diff --git a/src/Graphics/Vulkan/Core10/Buffer.hs b/src/Graphics/Vulkan/Core10/Buffer.hs
--- a/src/Graphics/Vulkan/Core10/Buffer.hs
+++ b/src/Graphics/Vulkan/Core10/Buffer.hs
@@ -90,7 +90,6 @@
 -- | VkSharingMode - Buffer and image sharing modes
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_SHARING_MODE_EXCLUSIVE@ specifies that access to any range or
 --     image subresource of the object will be exclusive to a single queue
@@ -111,17 +110,17 @@
 -- resources are not owned by any queue family; ownership is implicitly
 -- acquired upon first use within a queue. Once a resource using
 -- @VK_SHARING_MODE_EXCLUSIVE@ is owned by some queue family, the
--- application /must/ perform a
--- <{html_spec_relative}#synchronization-queue-transfers queue family ownership transfer>
+-- application /must/ perform a [queue family ownership
+-- transfer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers)
 -- to make the memory contents of a range or image subresource accessible
 -- to a different queue family.
 --
 -- __Note__
 --
--- Images still require a
--- <{html_spec_relative}#resources-image-layouts layout transition> from
--- @VK_IMAGE_LAYOUT_UNDEFINED@ or @VK_IMAGE_LAYOUT_PREINITIALIZED@ before
--- being used on the first queue.
+-- Images still require a [layout
+-- transition](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-layouts)
+-- from @VK_IMAGE_LAYOUT_UNDEFINED@ or @VK_IMAGE_LAYOUT_PREINITIALIZED@
+-- before being used on the first queue.
 --
 -- A queue family /can/ take ownership of an image subresource or buffer
 -- range of a resource created with @VK_SHARING_MODE_EXCLUSIVE@, without an
@@ -136,7 +135,6 @@
 -- structures.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBufferCreateInfo', 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
@@ -171,7 +169,6 @@
 -- | VkBufferUsageFlagBits - Bitmask specifying allowed usage of a buffer
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBufferUsageFlags'
 newtype VkBufferUsageFlagBits = VkBufferUsageFlagBits VkFlags
@@ -209,7 +206,7 @@
 
 -- | @VK_BUFFER_USAGE_TRANSFER_SRC_BIT@ specifies that the buffer /can/ be
 -- used as the source of a /transfer command/ (see the definition of
--- <{html_spec_relative}#synchronization-pipeline-stages-transfer VK_PIPELINE_STAGE_TRANSFER_BIT>).
+-- [@VK_PIPELINE_STAGE_TRANSFER_BIT@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer)).
 pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT :: VkBufferUsageFlagBits
 pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT = VkBufferUsageFlagBits 0x00000001
 
@@ -261,7 +258,10 @@
 
 -- | @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ specifies that the buffer is
 -- suitable for passing as the @buffer@ parameter to @vkCmdDrawIndirect@,
--- @vkCmdDrawIndexedIndirect@, or @vkCmdDispatchIndirect@.
+-- @vkCmdDrawIndexedIndirect@, or @vkCmdDispatchIndirect@. It is also
+-- suitable for passing as the @buffer@ member of
+-- @VkIndirectCommandsTokenNVX@, or @sequencesCountBuffer@ or
+-- @sequencesIndexBuffer@ member of @VkCmdProcessCommandsInfoNVX@
 pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT :: VkBufferUsageFlagBits
 pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = VkBufferUsageFlagBits 0x00000100
 -- ** VkBufferCreateFlagBits
@@ -270,7 +270,6 @@
 -- buffer
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ specifies that the buffer will
 --     be backed using sparse memory binding.
@@ -286,13 +285,13 @@
 --     the same buffer). Buffers created with this flag /must/ also be
 --     created with the @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ flag.
 --
--- See
--- <{html_spec_relative}#sparsememory-sparseresourcefeatures Sparse Resource Features>
--- and <{html_spec_relative}#features-features Physical Device Features>
+-- See [Sparse Resource
+-- Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures)
+-- and [Physical Device
+-- Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features)
 -- for details of the sparse memory features supported on a device.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBufferCreateFlags'
 newtype VkBufferCreateFlagBits = VkBufferCreateFlagBits VkFlags
@@ -334,7 +333,6 @@
 -- | vkCreateBuffer - Create a new buffer object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the buffer object.
 --
@@ -343,14 +341,13 @@
 --     creation of the buffer.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pBuffer@ points to a @VkBuffer@ handle in which the resulting
 --     buffer object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If the @flags@ member of @pCreateInfo@ includes
@@ -373,16 +370,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
@@ -392,17 +388,15 @@
 -- | vkDestroyBuffer - Destroy a buffer object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the buffer.
 --
 -- -   @buffer@ is the buffer to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -434,7 +428,6 @@
 -- -   Host access to @buffer@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
@@ -443,9 +436,6 @@
 -- | VkBufferCreateInfo - Structure specifying the parameters of a newly
 -- created buffer object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @size@ /must/ be greater than @0@
@@ -459,22 +449,24 @@
 --
 -- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@, each element of
 --     @pQueueFamilyIndices@ /must/ be unique and /must/ be less than
---     @pQueueFamilyPropertyCount@ returned by
+--     @pQueueFamilyPropertyCount@ returned by either
 --     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2'
 --     for the @physicalDevice@ that was used to create @device@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseBinding sparse bindings>
+-- -   If the [sparse
+--     bindings](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseBinding)
 --     feature is not enabled, @flags@ /must/ not contain
 --     @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidencyBuffer sparse buffer residency>
+-- -   If the [sparse buffer
+--     residency](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidencyBuffer)
 --     feature is not enabled, @flags@ /must/ not contain
 --     @VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidencyAliased sparse aliased residency>
+-- -   If the [sparse aliased
+--     residency](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidencyAliased)
 --     feature is not enabled, @flags@ /must/ not contain
 --     @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@
 --
@@ -482,6 +474,24 @@
 --     @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@, it /must/ also contain
 --     @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@
 --
+-- -   If the @pNext@ chain contains an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryBufferCreateInfo',
+--     its @handleTypes@ member /must/ only contain bits that are also in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalBufferProperties'::@externalMemoryProperties.pname@:compatibleHandleTypes,
+--     as returned by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferProperties'
+--     with @pExternalBufferInfo@->@handleType@ equal to any one of the
+--     handle types specified in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryBufferCreateInfo'::@handleTypes@
+--
+-- -   If the @pNext@ chain contains an instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationBufferCreateInfoNV',
+--     and the @dedicatedAllocation@ member of the chained structure is
+--     @VK_TRUE@, then @flags@ /must/ not include
+--     @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@,
+--     @VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT@, or
+--     @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO@
@@ -506,27 +516,31 @@
 -- -   @sharingMode@ /must/ be a valid 'VkSharingMode' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBufferCreateFlags', 'VkBufferUsageFlags', @VkDeviceSize@,
 -- 'VkSharingMode', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateBuffer'
 data VkBufferCreateInfo = VkBufferCreateInfo
-  { -- No documentation found for Nested "VkBufferCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBufferCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBufferCreateInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkBufferCreateFlagBits' specifying additional
+  -- parameters of the buffer.
   vkFlags :: VkBufferCreateFlags
-  , -- No documentation found for Nested "VkBufferCreateInfo" "vkSize"
+  , -- | @size@ is the size in bytes of the buffer to be created.
   vkSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkBufferCreateInfo" "vkUsage"
+  , -- | @usage@ is a bitmask of 'VkBufferUsageFlagBits' specifying allowed
+  -- usages of the buffer.
   vkUsage :: VkBufferUsageFlags
-  , -- No documentation found for Nested "VkBufferCreateInfo" "vkSharingMode"
+  , -- | @sharingMode@ is a 'VkSharingMode' value specifying the sharing mode of
+  -- the buffer when it will be accessed by multiple queue families.
   vkSharingMode :: VkSharingMode
-  , -- No documentation found for Nested "VkBufferCreateInfo" "vkQueueFamilyIndexCount"
+  , -- | @queueFamilyIndexCount@ is the number of entries in the
+  -- @pQueueFamilyIndices@ array.
   vkQueueFamilyIndexCount :: Word32
-  , -- No documentation found for Nested "VkBufferCreateInfo" "vkPQueueFamilyIndices"
+  , -- | @pQueueFamilyIndices@ is a list of queue families that will access this
+  -- buffer (ignored if @sharingMode@ is not @VK_SHARING_MODE_CONCURRENT@).
   vkPQueueFamilyIndices :: Ptr Word32
   }
   deriving (Eq, Show)
@@ -553,13 +567,11 @@
 -- | VkBufferUsageFlags - Bitmask of VkBufferUsageFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkBufferUsageFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkBufferUsageFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBufferCreateInfo', 'VkBufferUsageFlagBits',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalBufferInfo'
@@ -567,13 +579,11 @@
 -- | VkBufferCreateFlags - Bitmask of VkBufferCreateFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkBufferCreateFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkBufferCreateFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBufferCreateFlagBits', 'VkBufferCreateInfo',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalBufferInfo'
diff --git a/src/Graphics/Vulkan/Core10/BufferView.hs b/src/Graphics/Vulkan/Core10/BufferView.hs
--- a/src/Graphics/Vulkan/Core10/BufferView.hs
+++ b/src/Graphics/Vulkan/Core10/BufferView.hs
@@ -68,13 +68,11 @@
 -- | VkBufferViewCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkBufferViewCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBufferViewCreateInfo'
 newtype VkBufferViewCreateFlags = VkBufferViewCreateFlags VkFlags
@@ -99,11 +97,7 @@
 data VkBufferView_T
 -- | VkBufferView - Opaque handle to a buffer view object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet',
 -- 'vkCreateBufferView', 'vkDestroyBufferView'
@@ -111,7 +105,6 @@
 -- | vkCreateBufferView - Create a new buffer view object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the buffer view.
 --
@@ -120,14 +113,13 @@
 --     to create the buffer.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pView@ points to a @VkBufferView@ handle in which the resulting
 --     buffer view object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -142,16 +134,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkBufferView', 'VkBufferViewCreateInfo',
@@ -160,17 +151,15 @@
 -- | vkDestroyBufferView - Destroy a buffer view object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the buffer view.
 --
 -- -   @bufferView@ is the buffer view to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -202,7 +191,6 @@
 -- -   Host access to @bufferView@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkBufferView', 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -210,9 +198,6 @@
 -- | VkBufferViewCreateInfo - Structure specifying parameters of a newly
 -- created buffer view
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @offset@ /must/ be less than the size of @buffer@
@@ -268,26 +253,32 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'VkBufferViewCreateFlags', @VkDeviceSize@,
 -- 'Graphics.Vulkan.Core10.Core.VkFormat',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateBufferView'
 data VkBufferViewCreateInfo = VkBufferViewCreateInfo
-  { -- No documentation found for Nested "VkBufferViewCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkBufferViewCreateFlags
-  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkBuffer"
+  , -- | @buffer@ is a @VkBuffer@ on which the view will be created.
   vkBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkFormat"
+  , -- | @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' describing the
+  -- format of the data elements in the buffer.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkOffset"
+  , -- | @offset@ is an offset in bytes from the base address of the buffer.
+  -- Accesses to the buffer view from shaders use addressing that is relative
+  -- to this starting offset.
   vkOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkRange"
+  , -- | @range@ is a size in bytes of the buffer view. If @range@ is equal to
+  -- @VK_WHOLE_SIZE@, the range from @offset@ to the end of the buffer is
+  -- used. If @VK_WHOLE_SIZE@ is used and the remaining size of the buffer is
+  -- not a multiple of the element size of @format@, then the nearest smaller
+  -- multiple is used.
   vkRange :: VkDeviceSize
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/CommandBuffer.hs b/src/Graphics/Vulkan/Core10/CommandBuffer.hs
--- a/src/Graphics/Vulkan/Core10/CommandBuffer.hs
+++ b/src/Graphics/Vulkan/Core10/CommandBuffer.hs
@@ -101,7 +101,6 @@
 -- | VkCommandBufferLevel - Enumerant specifying a command buffer level
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferAllocateInfo'
 newtype VkCommandBufferLevel = VkCommandBufferLevel Int32
@@ -136,7 +135,6 @@
 -- | VkQueryControlFlagBits - Bitmask specifying constraints on a query
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueryControlFlags'
 newtype VkQueryControlFlagBits = VkQueryControlFlagBits VkFlags
@@ -156,8 +154,8 @@
                         )
                     )
 
--- | @VK_QUERY_CONTROL_PRECISE_BIT@ specifies the precision of
--- <{html_spec_relative}#queries-occlusion occlusion queries>.
+-- | @VK_QUERY_CONTROL_PRECISE_BIT@ specifies the precision of [occlusion
+-- queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-occlusion).
 pattern VK_QUERY_CONTROL_PRECISE_BIT :: VkQueryControlFlagBits
 pattern VK_QUERY_CONTROL_PRECISE_BIT = VkQueryControlFlagBits 0x00000001
 -- ** VkCommandBufferResetFlagBits
@@ -166,7 +164,6 @@
 -- buffer reset
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferResetFlags'
 newtype VkCommandBufferResetFlagBits = VkCommandBufferResetFlagBits VkFlags
@@ -190,8 +187,8 @@
 -- all memory resources currently owned by the command buffer /should/ be
 -- returned to the parent command pool. If this flag is not set, then the
 -- command buffer /may/ hold onto memory resources and reuse them when
--- recording commands. @commandBuffer@ is moved to the
--- <{html_spec_relative}#commandbuffers-lifecycle initial state>.
+-- recording commands. @commandBuffer@ is moved to the [initial
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT :: VkCommandBufferResetFlagBits
 pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = VkCommandBufferResetFlagBits 0x00000001
 -- ** VkCommandBufferUsageFlagBits
@@ -200,7 +197,6 @@
 -- command buffer
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferUsageFlags'
 newtype VkCommandBufferUsageFlagBits = VkCommandBufferUsageFlagBits VkFlags
@@ -245,7 +241,6 @@
 -- command pool
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the command pool.
 --
@@ -260,11 +255,16 @@
 --     command buffer begins in the initial state.
 --
 -- = Description
--- #_description#
 --
--- When command buffers are first allocated, they are in the
--- <{html_spec_relative}#commandbuffers-lifecycle initial state>.
+-- @vkAllocateCommandBuffers@ /can/ be used to create multiple command
+-- buffers. If the creation of any of those command buffers fails, the
+-- implementation /must/ destroy all successfully created command buffer
+-- objects from this command, set all entries of the @pCommandBuffers@
+-- array to @NULL@ and return the error.
 --
+-- When command buffers are first allocated, they are in the [initial
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -282,16 +282,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'VkCommandBufferAllocateInfo',
@@ -300,7 +299,6 @@
 -- | vkFreeCommandBuffers - Free command buffers
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the command pool.
 --
@@ -312,17 +310,16 @@
 -- -   @pCommandBuffers@ is an array of handles of command buffers to free.
 --
 -- = Description
--- #_description#
 --
--- Any primary command buffer that is in the
--- <{html_spec_relative}#commandbuffers-lifecycle recording or executable state>
+-- Any primary command buffer that is in the [recording or executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 -- and has any element of @pCommandBuffers@ recorded into it, becomes
--- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+-- [invalid](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- == Valid Usage
 --
--- -   All elements of @pCommandBuffers@ /must/ not be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending state>
+-- -   All elements of @pCommandBuffers@ /must/ not be in the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
 --     @commandBufferCount@ @VkCommandBuffer@ handles, each element of
@@ -350,7 +347,6 @@
 --     synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPool',
@@ -359,7 +355,6 @@
 -- | vkBeginCommandBuffer - Start recording a command buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the handle of the command buffer which is to be
 --     put in the recording state.
@@ -368,19 +363,16 @@
 --     structure, which defines additional information about how the
 --     command buffer begins recording.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
--- -   @commandBuffer@ /must/ not be in the
---     <{html_spec_relative}#commandbuffers-lifecycle recording or pending state>.
+-- -   @commandBuffer@ /must/ not be in the [recording or pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- -   If @commandBuffer@ was allocated from a
 --     'Graphics.Vulkan.Core10.CommandPool.VkCommandPool' which did not
 --     have the @VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT@ flag set,
---     @commandBuffer@ /must/ be in the
---     <{html_spec_relative}#commandbuffers-lifecycle initial state>.
+--     @commandBuffer@ /must/ be in the [initial
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- -   If @commandBuffer@ is a secondary command buffer, the
 --     @pInheritanceInfo@ member of @pBeginInfo@ /must/ be a valid
@@ -409,16 +401,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'VkCommandBufferBeginInfo'
@@ -426,33 +417,46 @@
 -- | vkEndCommandBuffer - Finish recording a command buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer to complete recording.
 --
 -- = Description
--- #_description#
 --
 -- If there was an error during recording, the application will be notified
 -- by an unsuccessful return code returned by @vkEndCommandBuffer@. If the
 -- application wishes to further use the command buffer, the command buffer
--- /must/ be reset. The command buffer /must/ have been in the
--- <{html_spec_relative}#commandbuffers-lifecycle recording state>, and is
--- moved to the
--- <{html_spec_relative}#commandbuffers-lifecycle executable state>.
+-- /must/ be reset. The command buffer /must/ have been in the [recording
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle),
+-- and is moved to the [executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- == Valid Usage
 --
--- -   @commandBuffer@ /must/ be in the
---     <{html_spec_relative}#commandbuffers-lifecycle recording state>.
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- -   If @commandBuffer@ is a primary command buffer, there /must/ not be
 --     an active render pass instance
 --
 -- -   All queries made
---     <{html_spec_relative}#queries-operation-active active> during the
---     recording of @commandBuffer@ /must/ have been made inactive
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active)
+--     during the recording of @commandBuffer@ /must/ have been made
+--     inactive
 --
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ not
+--     be an outstanding
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCmdBeginDebugUtilsLabelEXT'
+--     command recorded to @commandBuffer@ that has not previously been
+--     ended by a call to
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCmdEndDebugUtilsLabelEXT'.
+--
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ not
+--     be an outstanding
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkCmdDebugMarkerBeginEXT'
+--     command recorded to @commandBuffer@ that has not previously been
+--     ended by a call to
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkCmdDebugMarkerEndEXT'.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -466,45 +470,42 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
 foreign import ccall "vkEndCommandBuffer" vkEndCommandBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> IO VkResult
 -- | vkResetCommandBuffer - Reset a command buffer to the initial state
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer to reset. The command buffer
 --     /can/ be in any state other than
---     <{html_spec_relative}#commandbuffers-lifecycle pending>, and is
---     moved into the
---     <{html_spec_relative}#commandbuffers-lifecycle initial state>.
+--     [pending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle),
+--     and is moved into the [initial
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- -   @flags@ is a bitmask of 'VkCommandBufferResetFlagBits' controlling
 --     the reset operation.
 --
 -- = Description
--- #_description#
 --
--- Any primary command buffer that is in the
--- <{html_spec_relative}#commandbuffers-lifecycle recording or executable state>
+-- Any primary command buffer that is in the [recording or executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 -- and has @commandBuffer@ recorded into it, becomes
--- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+-- [invalid](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- == Valid Usage
 --
--- -   @commandBuffer@ /must/ not be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending state>
+-- -   @commandBuffer@ /must/ not be in the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   @commandBuffer@ /must/ have been allocated from a pool that was
 --     created with the @VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT@
@@ -522,16 +523,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'VkCommandBufferResetFlags'
@@ -539,9 +539,6 @@
 -- | VkCommandBufferAllocateInfo - Structure specifying the allocation
 -- parameters for command buffer object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @commandBufferCount@ /must/ be greater than @0@
@@ -557,22 +554,24 @@
 -- -   @level@ /must/ be a valid 'VkCommandBufferLevel' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferLevel',
 -- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPool',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkAllocateCommandBuffers'
 data VkCommandBufferAllocateInfo = VkCommandBufferAllocateInfo
-  { -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkCommandPool"
+  , -- | @commandPool@ is the command pool from which the command buffers are
+  -- allocated.
   vkCommandPool :: VkCommandPool
-  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkLevel"
+  , -- | @level@ is an 'VkCommandBufferLevel' value specifying the command buffer
+  -- level.
   vkLevel :: VkCommandBufferLevel
-  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkCommandBufferCount"
+  , -- | @commandBufferCount@ is the number of command buffers to allocate from
+  -- the pool.
   vkCommandBufferCount :: Word32
   }
   deriving (Eq, Show)
@@ -594,7 +593,6 @@
 -- inheritance info
 --
 -- = Members
--- #_members#
 --
 -- -   @sType@ is the type of this structure.
 --
@@ -602,9 +600,9 @@
 --
 -- -   @renderPass@ is a @VkRenderPass@ object defining which render passes
 --     the @VkCommandBuffer@ will be
---     <{html_spec_relative}#renderpass-compatibility compatible> with and
---     /can/ be executed within. If the @VkCommandBuffer@ will not be
---     executed within a render pass instance, @renderPass@ is ignored.
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with and /can/ be executed within. If the @VkCommandBuffer@ will not
+--     be executed within a render pass instance, @renderPass@ is ignored.
 --
 -- -   @subpass@ is the index of the subpass within the render pass
 --     instance that the @VkCommandBuffer@ will be executed within. If the
@@ -650,22 +648,19 @@
 --     statistics query /must/ not be from a query pool that counts that
 --     statistic.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
--- -   If the
---     <{html_spec_relative}#features-features-inheritedQueries inherited queries>
+-- -   If the [inherited
+--     queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-inheritedQueries)
 --     feature is not enabled, @occlusionQueryEnable@ /must/ be @VK_FALSE@
 --
--- -   If the
---     <{html_spec_relative}#features-features-inheritedQueries inherited queries>
+-- -   If the [inherited
+--     queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-inheritedQueries)
 --     feature is enabled, @queryFlags@ /must/ be a valid combination of
 --     'VkQueryControlFlagBits' values
 --
--- -   If the
---     <{html_spec_relative}#features-features-pipelineStatisticsQuery pipeline statistics queries>
+-- -   If the [pipeline statistics
+--     queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-pipelineStatisticsQuery)
 --     feature is not enabled, @pipelineStatistics@ /must/ be @0@
 --
 -- == Valid Usage (Implicit)
@@ -680,7 +675,6 @@
 --     @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'VkCommandBufferBeginInfo',
 -- 'Graphics.Vulkan.Core10.Pass.VkFramebuffer', 'VkQueryControlFlags',
@@ -688,21 +682,21 @@
 -- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkCommandBufferInheritanceInfo = VkCommandBufferInheritanceInfo
-  { -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkSType"
+  { -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkPNext"
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkRenderPass"
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "renderPass"
   vkRenderPass :: VkRenderPass
-  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkSubpass"
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "subpass"
   vkSubpass :: Word32
-  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkFramebuffer"
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "framebuffer"
   vkFramebuffer :: VkFramebuffer
-  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkOcclusionQueryEnable"
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "occlusionQueryEnable"
   vkOcclusionQueryEnable :: VkBool32
-  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkQueryFlags"
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "queryFlags"
   vkQueryFlags :: VkQueryControlFlags
-  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkPipelineStatistics"
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "pipelineStatistics"
   vkPipelineStatistics :: VkQueryPipelineStatisticFlags
   }
   deriving (Eq, Show)
@@ -729,9 +723,6 @@
 -- | VkCommandBufferBeginInfo - Structure specifying a command buffer begin
 -- operation
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If @flags@ contains
@@ -761,18 +752,20 @@
 --     'VkCommandBufferUsageFlagBits' values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferInheritanceInfo', 'VkCommandBufferUsageFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkBeginCommandBuffer'
 data VkCommandBufferBeginInfo = VkCommandBufferBeginInfo
-  { -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkCommandBufferUsageFlagBits' specifying usage
+  -- behavior for the command buffer.
   vkFlags :: VkCommandBufferUsageFlags
-  , -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkPInheritanceInfo"
+  , -- | @pInheritanceInfo@ is a pointer to a @VkCommandBufferInheritanceInfo@
+  -- structure, which is used if @commandBuffer@ is a secondary command
+  -- buffer. If this is a primary command buffer, then this value is ignored.
   vkPInheritanceInfo :: Ptr VkCommandBufferInheritanceInfo
   }
   deriving (Eq, Show)
@@ -791,13 +784,11 @@
 -- | VkQueryControlFlags - Bitmask of VkQueryControlFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkQueryControlFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkQueryControlFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferInheritanceInfo', 'VkQueryControlFlagBits',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBeginQuery'
@@ -805,26 +796,22 @@
 -- | VkCommandBufferResetFlags - Bitmask of VkCommandBufferResetFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkCommandBufferResetFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkCommandBufferResetFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferResetFlagBits', 'vkResetCommandBuffer'
 type VkCommandBufferResetFlags = VkCommandBufferResetFlagBits
 -- | VkCommandBufferUsageFlags - Bitmask of VkCommandBufferUsageFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkCommandBufferUsageFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkCommandBufferUsageFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBufferBeginInfo', 'VkCommandBufferUsageFlagBits'
 type VkCommandBufferUsageFlags = VkCommandBufferUsageFlagBits
diff --git a/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs b/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs
--- a/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs
+++ b/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs
@@ -199,7132 +199,7606 @@
 -- | VkIndexType - Type of index buffer indices
 --
 -- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableIndexBufferEntryNVX',
--- 'vkCmdBindIndexBuffer'
-newtype VkIndexType = VkIndexType Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkIndexType where
-  showsPrec _ VK_INDEX_TYPE_UINT16 = showString "VK_INDEX_TYPE_UINT16"
-  showsPrec _ VK_INDEX_TYPE_UINT32 = showString "VK_INDEX_TYPE_UINT32"
-  showsPrec p (VkIndexType x) = showParen (p >= 11) (showString "VkIndexType " . showsPrec 11 x)
-
-instance Read VkIndexType where
-  readPrec = parens ( choose [ ("VK_INDEX_TYPE_UINT16", pure VK_INDEX_TYPE_UINT16)
-                             , ("VK_INDEX_TYPE_UINT32", pure VK_INDEX_TYPE_UINT32)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkIndexType")
-                        v <- step readPrec
-                        pure (VkIndexType v)
-                        )
-                    )
-
--- | @VK_INDEX_TYPE_UINT16@ specifies that indices are 16-bit unsigned
--- integer values.
-pattern VK_INDEX_TYPE_UINT16 :: VkIndexType
-pattern VK_INDEX_TYPE_UINT16 = VkIndexType 0
-
--- | @VK_INDEX_TYPE_UINT32@ specifies that indices are 32-bit unsigned
--- integer values.
-pattern VK_INDEX_TYPE_UINT32 :: VkIndexType
-pattern VK_INDEX_TYPE_UINT32 = VkIndexType 1
--- ** VkSubpassContents
-
--- | VkSubpassContents - Specify how commands in the first subpass of a
--- render pass are provided
---
--- = See Also
--- #_see_also#
---
--- 'vkCmdBeginRenderPass', 'vkCmdNextSubpass'
-newtype VkSubpassContents = VkSubpassContents Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkSubpassContents where
-  showsPrec _ VK_SUBPASS_CONTENTS_INLINE = showString "VK_SUBPASS_CONTENTS_INLINE"
-  showsPrec _ VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = showString "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS"
-  showsPrec p (VkSubpassContents x) = showParen (p >= 11) (showString "VkSubpassContents " . showsPrec 11 x)
-
-instance Read VkSubpassContents where
-  readPrec = parens ( choose [ ("VK_SUBPASS_CONTENTS_INLINE",                    pure VK_SUBPASS_CONTENTS_INLINE)
-                             , ("VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS", pure VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSubpassContents")
-                        v <- step readPrec
-                        pure (VkSubpassContents v)
-                        )
-                    )
-
--- | @VK_SUBPASS_CONTENTS_INLINE@ specifies that the contents of the subpass
--- will be recorded inline in the primary command buffer, and secondary
--- command buffers /must/ not be executed within the subpass.
-pattern VK_SUBPASS_CONTENTS_INLINE :: VkSubpassContents
-pattern VK_SUBPASS_CONTENTS_INLINE = VkSubpassContents 0
-
--- | @VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS@ specifies that the
--- contents are recorded in secondary command buffers that will be called
--- from the primary command buffer, and 'vkCmdExecuteCommands' is the only
--- valid command on the command buffer until 'vkCmdNextSubpass' or
--- 'vkCmdEndRenderPass'.
-pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS :: VkSubpassContents
-pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = VkSubpassContents 1
--- ** VkStencilFaceFlagBits
-
--- | VkStencilFaceFlagBits - Bitmask specifying sets of stencil state for
--- which to update the compare mask
---
--- = See Also
--- #_see_also#
---
--- 'VkStencilFaceFlags'
-newtype VkStencilFaceFlagBits = VkStencilFaceFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkStencilFaceFlagBits where
-  showsPrec _ VK_STENCIL_FACE_FRONT_BIT = showString "VK_STENCIL_FACE_FRONT_BIT"
-  showsPrec _ VK_STENCIL_FACE_BACK_BIT = showString "VK_STENCIL_FACE_BACK_BIT"
-  showsPrec _ VK_STENCIL_FRONT_AND_BACK = showString "VK_STENCIL_FRONT_AND_BACK"
-  showsPrec p (VkStencilFaceFlagBits x) = showParen (p >= 11) (showString "VkStencilFaceFlagBits " . showsPrec 11 x)
-
-instance Read VkStencilFaceFlagBits where
-  readPrec = parens ( choose [ ("VK_STENCIL_FACE_FRONT_BIT", pure VK_STENCIL_FACE_FRONT_BIT)
-                             , ("VK_STENCIL_FACE_BACK_BIT",  pure VK_STENCIL_FACE_BACK_BIT)
-                             , ("VK_STENCIL_FRONT_AND_BACK", pure VK_STENCIL_FRONT_AND_BACK)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkStencilFaceFlagBits")
-                        v <- step readPrec
-                        pure (VkStencilFaceFlagBits v)
-                        )
-                    )
-
--- | @VK_STENCIL_FACE_FRONT_BIT@ specifies that only the front set of stencil
--- state is updated.
-pattern VK_STENCIL_FACE_FRONT_BIT :: VkStencilFaceFlagBits
-pattern VK_STENCIL_FACE_FRONT_BIT = VkStencilFaceFlagBits 0x00000001
-
--- | @VK_STENCIL_FACE_BACK_BIT@ specifies that only the back set of stencil
--- state is updated.
-pattern VK_STENCIL_FACE_BACK_BIT :: VkStencilFaceFlagBits
-pattern VK_STENCIL_FACE_BACK_BIT = VkStencilFaceFlagBits 0x00000002
-
--- | @VK_STENCIL_FRONT_AND_BACK@ is the combination of
--- @VK_STENCIL_FACE_FRONT_BIT@ and @VK_STENCIL_FACE_BACK_BIT@, and
--- specifies that both sets of stencil state are updated.
-pattern VK_STENCIL_FRONT_AND_BACK :: VkStencilFaceFlagBits
-pattern VK_STENCIL_FRONT_AND_BACK = VkStencilFaceFlagBits 0x00000003
--- | vkCmdBindPipeline - Bind a pipeline object to a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer that the pipeline will be
---     bound to.
---
--- -   @pipelineBindPoint@ is a
---     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value specifying
---     whether to bind to the compute or graphics bind point. Binding one
---     does not disturb the other.
---
--- -   @pipeline@ is the pipeline to be bound.
---
--- = Description
--- #_description#
---
--- Once bound, a pipeline binding affects subsequent graphics or compute
--- commands in the command buffer until a different pipeline is bound to
--- the bind point. The pipeline bound to @VK_PIPELINE_BIND_POINT_COMPUTE@
--- controls the behavior of 'vkCmdDispatch' and 'vkCmdDispatchIndirect'.
--- The pipeline bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ controls the
--- behavior of all <{html_spec_relative}#drawing drawing commands>. No
--- other commands are affected by the pipeline state.
---
--- == Valid Usage
---
--- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_COMPUTE@, the
---     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support compute operations
---
--- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_GRAPHICS@, the
---     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_COMPUTE@,
---     @pipeline@ /must/ be a compute pipeline
---
--- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_GRAPHICS@,
---     @pipeline@ /must/ be a graphics pipeline
---
--- -   If the
---     <{html_spec_relative}#features-features-variableMultisampleRate variable multisample rate>
---     feature is not supported, @pipeline@ is a graphics pipeline, the
---     current subpass has 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
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
---
--- -   @pipeline@ /must/ be a valid @VkPipeline@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.VkPipeline',
--- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint'
-foreign import ccall "vkCmdBindPipeline" vkCmdBindPipeline :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("pipeline" ::: VkPipeline) -> IO ()
--- | vkCmdSetViewport - Set the viewport on a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @firstViewport@ is the index of the first viewport whose parameters
---     are updated by the command.
---
--- -   @viewportCount@ is the number of viewports whose parameters are
---     updated by the command.
---
--- -   @pViewports@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.Pipeline.VkViewport' structures specifying
---     viewport parameters.
---
--- = Description
--- #_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
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_VIEWPORT@ dynamic state enabled
---
--- -   @firstViewport@ /must/ be less than
---     @VkPhysicalDeviceLimits@::@maxViewports@
---
--- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
---     and @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
---
--- -   If the
---     <{html_spec_relative}#features-features-multiViewport multiple viewports>
---     feature is not enabled, @firstViewport@ /must/ be @0@
---
--- -   If the
---     <{html_spec_relative}#features-features-multiViewport multiple viewports>
---     feature is not enabled, @viewportCount@ /must/ be @1@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pViewports@ /must/ be a valid pointer to an array of
---     @viewportCount@ @VkViewport@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.VkViewport'
-foreign import ccall "vkCmdSetViewport" vkCmdSetViewport :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewports" ::: Ptr VkViewport) -> IO ()
--- | vkCmdSetScissor - Set the dynamic scissor rectangles on a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @firstScissor@ is the index of the first scissor whose state is
---     updated by the command.
---
--- -   @scissorCount@ is the number of scissors whose rectangles are
---     updated by the command.
---
--- -   @pScissors@ is a pointer to an array of
---     'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structures defining
---     scissor rectangles.
---
--- = Description
--- #_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@).
---
--- Each scissor rectangle is described by a
--- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structure, with the
--- @offset.x@ and @offset.y@ values determining the upper left corner of
--- the scissor rectangle, and the @extent.width@ and @extent.height@ values
--- determining the size in pixels.
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_SCISSOR@ dynamic state enabled
---
--- -   @firstScissor@ /must/ be less than
---     @VkPhysicalDeviceLimits@::@maxViewports@
---
--- -   The sum of @firstScissor@ and @scissorCount@ /must/ be between @1@
---     and @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
---
--- -   If the
---     <{html_spec_relative}#features-features-multiViewport multiple viewports>
---     feature is not enabled, @firstScissor@ /must/ be @0@
---
--- -   If the
---     <{html_spec_relative}#features-features-multiViewport multiple viewports>
---     feature is not enabled, @scissorCount@ /must/ be @1@
---
--- -   The @x@ and @y@ members of @offset@ /must/ be greater than or equal
---     to @0@
---
--- -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a
---     signed integer addition overflow
---
--- -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a
---     signed integer addition overflow
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pScissors@ /must/ be a valid pointer to an array of @scissorCount@
---     @VkRect2D@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D'
-foreign import ccall "vkCmdSetScissor" vkCmdSetScissor :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstScissor" ::: Word32) -> ("scissorCount" ::: Word32) -> ("pScissors" ::: Ptr VkRect2D) -> IO ()
--- | vkCmdSetLineWidth - Set the dynamic line width state
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @lineWidth@ is the width of rasterized line segments.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_LINE_WIDTH@ dynamic state enabled
---
--- -   If the <{html_spec_relative}#features-features-wideLines wide lines>
---     feature is not enabled, @lineWidth@ /must/ be @1.0@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdSetLineWidth" vkCmdSetLineWidth :: ("commandBuffer" ::: VkCommandBuffer) -> ("lineWidth" ::: CFloat) -> IO ()
--- | vkCmdSetDepthBias - Set the depth bias dynamic state
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @depthBiasConstantFactor@ is a scalar factor controlling the
---     constant depth value added to each fragment.
---
--- -   @depthBiasClamp@ is the maximum (or minimum) depth bias of a
---     fragment.
---
--- -   @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s
---     slope in depth bias calculations.
---
--- = Description
--- #_description#
---
--- If @depthBiasEnable@ is @VK_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
---
--- <<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAigAAACoCAYAAADKIhV0AAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO2dedgdRZm37+whJiABwhIghEU2QQREBEVAQEXAcd9wQRAdmVEcdPy+UQRGQAXX4RNFYcCFYVwQBAEHBNcRBzTgAigSSAib7FuAJJB3/nhOf6dPd3Wf3tfffV195XSdqq7nnJxfvbU89dQkRN85BDgc2BS4E7gEOBt4KpDvTOAwYHKl1gkhhOgby4H3T6rbClEbk4GvAEc63lsCvAX4zeB+DvBoNWYJIYQQ/Fqj4f5yPO7OCcBmwE+BAwb3jwFnAatLt0oIIUTfWQ6cUbcRoh52BZ4BJsZcjwE71GSjEEIIIXrGlYzvnHjXH4GZ9ZgphBBCiL6wG8k7J951bC2WCiGEEKI3nE36DsrjwIZ1GCuEEEKI7jMT62yk7aBMAJ+rwV4hhBBC9IBXk61z4s2irFm9yUIIIfqIthn3i1fnKPssYF5RhgghhBBxqIPSL/at2wAhhBAiCeqg9IeFwIK6jRBCCCGSoA5Kf3hJ3QYIIYQQSVEHpT/sWrcBQgghRFLUQekPu9RtgBBCCJEUdVD6wWRgp7qNEEIIIZKiDko/WAjMqtsIIYQQIilT6zZAVMI2dRsgRAHshMXy2R3YHlgXG2Q9BNwM/Br4JnBTXQYKIUaQZsVYjiF7BFn/tWXVhoveMx04HLiR0d/iYuBnwC+BewPvnQesU4OtQghpVqTkK6iDItrJexn9DX4f2CqQZxJwILDMl+/PwPrVmSmEGCDNilRchjooop28j+Hv79wxeTcF7vfl/3G5pgkhHEizIhXBqTZ1UERb8Bq7FcB6CfJ/iNHf7J7lmSaEcFCYZrWLpx9sGvPek8AJwG7APsBpwMoqjBIiBb8A7kuQ7/zA/cEl2CKEGI80K8ayNtEzIk9g3tVBXgI86MivGRRRNbsDnwVem6LMUwx/s98rwyghRCTSrEjMNkR3UP4xpty+wCrUQRHt4xGGv9mLa7ZFCDEep2a1xNN9NohIvw3b3RPFVcCnijdHiFKZCczx3f+1LkOEEImQZnvMm3DPnnw0QdkZ2I9FMyiiLbyQ0d/53rVaI4QYhzTbY/4Bdwdls4Tl34Y6KKI9nMzw93pdzbYIIcYjzfaYTxDunNyYovxkLAxxER2Ud2IxWb5G/M6iS4DfDK6Nc9YpmslbGf4fe9cROZ85i9EIlfvmfF4fkUZFFNKsKJwvEO6gxPmeuDiK/B2U4EzOXUQ3gA/48qnx6yYfJvy7PD7nMz/pe9bpOZ/VR6RREYc0KwrnHMI/qsNSPmMO8CjZOyjrAY877PhvYIoj/0pfnnUz1imaTdGN3QsZ7jq7BvOfEsmRRsU4KtesdvF0n7Udab9P+YzHgO/msOEw4FmO9D2A/xNImwdM890vz1Gv6AcbYcGepgJLsEBPK+o0qIVIo6JKEmlWHZTuM8eRdnOG53w7hw1vjnnvOGBn3/2OvtePYZFuhYhiLuYzMR+4E9gP+FutFrUTaVRURWLNTq3QKFEPwVHRPdhUblp+DszOUG4u8LyY96cB3wJ2xRq6V/req/sPzSzM9g2whngZ1rmbqNMo8f9ZG7gc+4N5O9bQLa7VonbSZo16SKvtQJoVI9zA6JrhNRXX/yrC65au6xLMS/wxX9pPK7bVY2PgbOwogKCdS7AR5ayabOsKedez5wKLGP6fLCzWvF7RRo16SKvVIc2KwlnC6A/qgorr/wjJGj/XVYdX9wsYPf476roJ2KEG+7pCnsZuXcyPagK4FVhQgn19om0a9ZBWq6VyzcoHpfsEl3jurbj+rX2vn8amh/+eZFOvaeK1FMFk4DxgHcd7f8BiQ1yKfY5tgJ+QPOCdKIZ52Kh9R2xq+KXA0lotaj9t0qiHtNoepFkRiX86dgI4qeL6L/PV/X1f+pcYP/LZqVJLYUOHDfcRPpVzb4bbLP/I6I4GkYwso7ENsD+IE8BfMCe7OLzRteJ0xNMmjXpIq9UjzYrCWcHoD+qYiuv/ra/u9/nSn0V4+cl/PUD1M3yTMB8dz4YrsO1wLvwB8D5YiXXdIm1jtxHWwE0Af8b+QI1DjV0y2qRRD2m1eqRZUTjBH9SRFde/xFf33oH3DiS68Usb7bYoZgKvAV4yJt8ujDbUcsRLR5rGbmOGh1beSPQJ3UHU2CVjCe3SqIe0Wi2Va1bbjLvNdEdali3GefA3BvcE3rsUWysOdpomgDPKNCqGp0jmSHw9FgVxGuadfhD5gtmBrdWWsW1za7LFvmkCC4CrgM0H93OBXyUs6wpSKMK0TaMe0mozkWZFImYT7vEG12jL5mFf3a6R7Azsx+u38cuVWZePJQxt/kEBz3sl0aPVrNcj2HR400g6GjvdkS/tpRmUeLqsUY8lSKt5qVyzmkHpNq7/36pDgN8ErDF47Yo4uQJ4BRavYHfM2/7EakzLjX82aq8CnreL7/V5wOoUZdcDDnCkn4gJvq1op2H5dFmjHtJqdUizIhFrE+6Z7l+rRd3iz4x+t1FOekm5YPCcZSnLzWUYY8B/HZfTnjIp42RUIaKQVvNTuWbV0+k2rv/fND19EU8w9P9zcz7PG5UtSlFmLYaho/18Bjghpz1CdAVptYWog9Jt1EEpl+BBjHmOnV8P2GTw+ncJy8zGYljsEkj/N8In0ArRZ6TVFiIflG6jDmh61sa2Lu6OBRWahB1qdRVwIRb0iUF6MErvmjnq9TdcSRq9NYAfAS8KpH8dODqHHUK0BWlViBazPvJBScoMbB34KaI9y2/BTnQFaxCD7384R/2zsVDcmzE+2uUMbKo4WP83aPYuAD/yQRFZkVbroXLNagal27g8whXqOcxa2PSrf4TzKHAq8EMseNAuwMnAlcAemLNbENcOiKQ8TrIYNdOwcOTBjuZ3gXfTjV0AQkQhrQrREdYj3OM9pFaLmsd0RkNmT2BnejzPkXdNLHTzNcC7CH+3h5Zs6xSswQvWeyHtG2xoBkWkRVqtF2lWFMo6hH9Qr6/VoubxWdJ14t4wyBNsKMvu/E0GznXUeRnuiMFNR42dSIu0Wi/SrCgUVxyUw2q1qFlsBTzD6PfzozFlZhI+gNG7XlySnZOAsxz1XTmwp0ymAG8EzseicT4BLAduxdbWjyZbTAk1diIN0moyytIrSLOiYNYk/IOS1/iQLxP+fvZJUO5PjnITuNe6i8Bl568I70womgXYLgWvzruBnwPXYmebeOnvyPBsNXYiDdLqeMrUK0izomBmEv5BHVerRc3ib4x+N3eTzLP+54S/19tLsvFzjrquId82ySTMBZYO6lsJHMHod7Mzw0Zv+wzPV2Mn0iCtxlO2XkG7eETBrHKklTVySMNRwLaBtOXARyu0YRvsRFI/V2CiG4crvszvc1sU5iTgnwJp1wMvx3YulMlngE0Hr08Bzgy8vwg7w2ULLIy46BZN0KiHtDoe6VW0ktWM9njPr9ccwITimnatYhrU4zWO+pMuf13nKJsnroKLYx113EC+CJhJWYfh2v1qLI6Ei00YNopp0QxKs2mCRj2k1Xiq0CvoLB5RAsHTi+s+en4ysDDivS0qtGMdR9rNCcuuHbifAL6Tz5wRjgH+NZD2V+BlWJyHstmf4W6DG4A7I/Ito7zpclEfTdGoh7QaT2f1qg5K9wkGJMrTgy6CTbDoii6qbPxmOdLuTlBuJsNzODyuJv2pplEchW2n9LME2Be4p6A6xrGn7/X/VFSnaA5N0aiHtBpPZ/UqH5Tu8ySjo4gNMD+UB+sxJ7aB27IyK+AhR1qS6JDbEe7Yn5XfHMAc204LpN2BNXh3JCj/QqxBXoVF1cxK2rNGRLdoikY9pNV4pFfRWm4hvG64d432HOmwx7vOqNCOPR31J5ld+migzJ+x2AN5OZRwnIe7geekeIYXkCqtE+AawNNE/78Er7enfL4L+aA0l6Zo1ENaHaUOvYJ28YgScI00dgZ+VrEdHnEjsCpHZ9dg381sX9rsiLx+/i5w/y9YY5WH1wPnMDraux/Yj+Rr7dOAHQevf5uy/q2wqWmwxs8L5LQauM2R/5qUzxftoika9ZBWR5FeRWf4JeFe73/VaM8PHPZ415KKbflqoP6Dx+TfLZD/8gJsOASLW+B/7oPATimfs5Ov/Ptz2HOY7zmLcjxnHJpBaS5N0qiHtOqmKr2CdvGIEnDtwX8p9WwXhPgR2CZUe1bFp7BQ0B77xuSdBHzad38X8M6c9b8cO9nUf8L0o8ArsBgKaShqHVrr2aJJGvWQVst/VuPQEk/3cXVQZmDTn+dWbAvA5jHvTR68X1UgoaXAe4FvDe4PwxrCex15P8IwtPaDwIEk20kQxUuBCwjvlrgVG1WlHVntPPj3afIFoup0gycS0SSNekirbqRX0Wq+gnuq9uoabNkwwhb/dVANdr2PodPZtYzuYlgTi8zo2XcztjsgLz9i/HeR5Uo7mvMzBRules96QY5njUNLPM2kqRr1kFaHVKlXkJOsKIEHItJ3x9Zpq3SgSuJgV0echa9iI5nPY9/LzVjAo6eBrbE4DI9h2wpPxkJ+52WX8VkykWcUtR3mdAf22f+Q3xzRMpqqUQ9pdUjn9aoOSveJ6qCACXi/qgwhWeNXxy4BsBmlF2Gi3w/bxjgLuBhzPruccNC7PGxY4LOKwt8Q/4lwFGLRfZqsUQ9p1ei8XtVB6T5x4ZZfBrwSuKwiW1wjr2cYjU1Qd+N34+DqI1rPFm3QqEeftQo90Kt28XSfcSGXT6O6HT3Bhm0l4WnJpjR+faTzDZ4YizTaHjqvV3VQus+4DsoW2HpuFQQbtiXYwVp+FlBMtEeRjinA83z3nWzwxFik0XbQC72qg9J97kqQ50gsCFHZBKePF2Nb9fxMwxpAUS3bMjyUrZMOdyIR0mg76IVe1UHpPg8wGuAoim8QH/8gL+sCzw6k3Yo1gEE0hVw9/uniG4Cn6jJE1IY02h56oVd1UPrB0gR5ng18n+hj1vPicr5zjc5AjV8ddH49W4xFGm0PvdCrOij9YEnCfM/HAh2VgatBW4x7dFZnnIW+0osGT8QijbaHXuhVHZR+EHRyi+MDWGjnonE1frcCy7CdAuPyivKYTA8c7sRYpNF20Bu9Kg5KP0h7bsbpmACeLtCGqMZvNbYEtdWYvKI8tmW41byzDnc18Gbf6yeBH9ZlSEKk0XbQG72qg9IP0gYz2g54N/C1Am0INmj3MHTeXcxo47c5diLpRIH1i1EOBT4+eO2PgzMJuM53fy+wV1VGdYzzfK//Rvs6KNJoc+ilXtVB6QdZTsw8FjiH8NRuVlzbF12vAWYC84E7CqpbhNkXO7skyJRAustBUnQTabS59FKv8kHpBw8Dt6UsszHwloLqXxNYL5B2a8RrD00hl8u7sdHXuOvAugwUlSKNNpte6lUdlP7wPxnKfLCguqN2B7hex5URQpSDNCoaR1lLPNOBPYAdsJ75o1gwmatJdsrk+sCewEIsauF92GmN16A1z6z8klGnvSQ8H9gJuD5n3VHOd67XcWWEEOUgjYrGMa6DMg9z7orjIuDVg9ezgY8ARwHrOPI+CHwa+BzmGR7k+cAJ2DSV66yHZcDRwA/G2CTC/DxjubdTTgdl3OhMcRaEqA5pVDSOcUs8uyZ4hrcHe1fMGfMTuDsnAHOxQGBnBtInAccDvwUOJvogqk2A87E/miIdN2AdvLS8voC6XQ2Zf0T2BOFDDTU6E6I6pFHROMZ1UDZlGElwMXC3I8/vgP2AnzE8y+Ux7I9h1HLOYQxnXaYA3wKOG9gzgS3p3EV0HI7/h83WiHRcmqHMptgyTx6CDdlywo1dcApZo7Nu41qq1fJtfUijYhyVa3bcEs9XB5fHewjHxpgALsBmQT6JHTrnTQdOAfYGvsLoHnqA92JxAf4NeBu2y+RfgQuxXScAc4B3Aqdi29o81gReC3xzjP15+UdGI/ZVyc+Abxf8zO9h33taDiTfMk+w8XOtZy/G/JY85mC+SOOWGEU7cQ0+igwMKNIhjYpxNF6zX8U6JN71KHAL9mMOdkD8bIl9EH/Zh4F3DF7/gNEOSJAPBcpOAJ/P8TmS8iNHvVVd/o5hUUwG7sxgyxU56lwD8zfyP+9CR77jHPXu4cgnusFRhP+/P1qrRcXj/2zB2YgmIY2KJFSu2bTbjHcJ3M8B1gb2If68l1uAawNpa2Eh1a8C3kD8cdHnOtI2jLVUuFgNnJWh3J7YbqosbInNrvlxOdxpl0C/aPxorEdIoyIJlWs2TQdlGrZtOMhR2DkN47jdkTaBLe88M6bsvcCKQJoas2ycAaxKWWYNsi91jXO+81CchX7h+g2m/V2KYpBGRRIq12yaOCjPBWYE0hYB30lYfroj7Qskn/oM2vpIwnJ5OIFyllqSkKTTl4U7sRD270lZ7gXYLqu0jNu+6KHRWb/QDEpzkEZFEirXbJoOSnB5B2w3TVIv3nmB+2ewJZ4kzCW89ThuSakogstSXeGT2MzVrBRlXP//SRgXAMrjHmzngP8grKJ2CRyPrZ+L6jgB+96jcI28mtpB+Wdg55zPWAv4zwzlriDbsmwapFEBDdRsng7KU8D3U5TfJnB/JclnT4JlAf6Som4xyjLgRODkFGW2z1hXsPFbDSyJyHsro8uIGp11lzbNoOwFvCrnM2YCb8pQ7mGq76BIo8JFo31Qgh2U32DxTpKwMTYL4ufyFHW7fF+uc6SJ5JyKHT2QlG0z1hMcYd1B9AnJwVHbXMwJW3SPNnVQuo40KpLQ2A7KNGDHQNovUtTjWh7IU/5OtPc+L09jpxU/PC7jgLWADVLWMR2L/uvHtbYd955GaN2kTUs8XUYaFUlp7BKPy0H2mhT1BDsYK7Gw+FnL/86ZS6RlKXAEyZfqFpIunsNCwr5DrrVtj6jzPrrqC9Rn2jSDktVZ/mLf64fJdkRHWc7yHtKoSEpjnWRdMyBpOgnB8n8kegoxyHSsg5S17jwcgx1gWAdXAmdXUM/5WHTgIxPk3Zx0y0JJdwd4lLVL4Hjinb9E9bSpg1LEH98VWODHpiGNiqS0poNyF+lG0nlmQHYgvEW5qg7KPuR3jsvK41TTQQGL1PtSYOsx+TZL+dykuwM8NH3cH7TE0wykUZGUyjWb1AclTwdjPnZeQ9byrtmbRSnKi/E8AbyV8bNaG6V8rmsLYtzobAnhoH1q/LqJq2FToLbqkUZFUirXbJIOylTCDrJ5Oxh5yt+F+1RlkY9F2M6eONJ2UNJOH6/CdhD40Ymp3UQzKM1AGhVJaaSTrMtBNk1EUZeD7B9zlK/SQfZjwBcrrM9PsBGogk8DhxO9WydvB+Vh4KExZRYDC3z3GwCzsSUv0R3a5IPSZaRRkZRG+qDU7SAbjIFSZQclzU6jLvA4cCzw9Yj3g9GA45hC2GclbmTmcSuwbyBtC/r3f9F11EGpH2lUpKGRcVDqdJB9LmEHWfmflMs3iF5CWzfFcxYQPgE5zvnOQ054/UBLPPUjjYo0NNJJNk8HYyPCywVV+q+I9KzCth27mE14uS+KtM53Hq4GUmvc3UMzKPUjjYo0NG4GJa+DrOuArTwdlHuwGRxRLmdg53G4WCfhM9JuX/TQ6KwfaAalfqRRkYbGzaBsjx1y5SdPB6NNDrJ95m6iHaHXSviMtLsD4vKo8esemkGpH2lUpKF2J9mDgdf57jd1lDkceP3g9UpGI5AeCezhu39xoOxKRpcPrgW+7Ls/HZjluw/O3mwOnOO7vwj4gcNGkZ/LgN0c6WsmLJ91dObtIvAfQKbGr3soDkr9SKMiDbVr9jxgIsUVnNG4LmX5E3xl56csO4EddifKYU/c3/kBCcvfECi3kvCZH1FcGyi7muS+L6IdrEP4t9W1P3L+z5ZmY0FVSKMiDZVrNrjE43JKjcO/DDADWxLKWj5t3cHyoliux+2HMidB2UnYIWR+lhKOQBlFcAp5EjZ7JrqDlnjqRRoVaal9iec5OZ61gvCW4DRchP3IRTNYjoW1DjY6s8JZQ8wH1gikJVnb9og6kOymFM8QzaYPHZQmt2fSqEhL43bxiH5zsyMt2Ki5yOp8F5e3a9P/fUe7eOpFGhVpadwuHtFvljrSksygZHW+i8urOAvdQh2UepFGRVoaeRaP6C/LHGlJZlCyBoCKy1vV6GwW8DwswOBj2HdwM+YQJorDc6z0D5LUQamONmsUpNM6kGZFoziCsNf2cQnKfc9RLrhlPI7JwFOB8rekKJ+FjYGzgScI274E+9xJZo9EclYw+j3PrtecXtFGjYJ0WjfSrGgMhxBuBE5MUM613TztD/kvgfKrKG/G7wXA/YRtDl43ET68UmRnOaPfr7apVkfbNArSaROoVLNa4hFxPOxIS7JTKzh9fC/pj2JfzOiusqnY4WZppqGTMBmL/+MK4f8H4DfYqO0AYBvgJ8ALsdGayMfHGW3gFKitOtqkUZBOm4I0KxrDjoRHJ18YU2Z9R5lfZ6j7NMdzXp7hOePY0FHPfcBrA/n2xgJZTWDHNQRPgRWiLbRNoyCd9hLt4hFxuEZU42bdXM53aXYHxJUpwwnvHiwqpsdPMOe74BEKP2N4LMNzgfeXYIsQVdA2jYJ02kvUQRFxLHekjfvN5I2vEFemjMZvAtgLG4ntBexP9InZ3/a9/gRyxhPtpG0aBem0l8gHRcSxwpGWpYPyVuClKet2HUpYVpyFp4ALEuS7HltznQbMBQ4Cvpuz7gOBS1LkPwS42Hd/JHBGgnKnA0elqEd0lzZqFOrVqcds4BGSD+7vwqL2ujgF+EiCZ+yMOTX3DnVQRBwrHWlZOihbRqSnpe5Ilc9gDc6Cwf2byd/w7Zoyf/CAzqTlg+VEf+myRqEcnXrsTLqVhzjdJdHuCuBPKerrFOqgiDiK6qAUxeaD+l2HGFaF3y9nrwKe9wBw7uD1c7CtlH6WAxcOXj9BeFp7ma/8DgxjWdwELPLl+3kBtopu0HWNQvE69ZjKUG/Pxfxg/PyK0QjcFxPNjQz1PBd45eD1fcDlg9fL0E4ZIZxMIew5/7UxZR5wlCny2rSoD5eRPzNqz0YFPnsj3AGoXpSg7I7AQwzjQKxboF2iW3Rdo1CuTj3eTPizfzzjs87yPeNthVgnRA8ICvArMXmf7chf9LVPkR8uA3cwas8BBT//VMKf+coxZRZiI7EJ4HZgk4JtEt2hDxqF8nUKNhMV/Ow/zPCc3bEZpwlsF5IYoF08Ig7X7yNu6narsgzxUfca95zAfdEzFZ8GHg2k7Ut0o78+cAUWJ+J+bHeD6wwlIaAfGoXydQoW2v+hQFpan7IpmAP7JOxcGzmy+5APiogjbQelioapjDrWBl6DjWTmY43F7cBVmP+H54szCXhWoKxrJ0MeHgA+B5wQSD8R2DOQthbwY2znxGPAK7Dw40JE0VaNQrN06rEIeJnvfiNssHB3wvLvB54/eP0l4IbiTBOi28wgPIX5xZj8xzryF32dX/DnO47woWf+6xaGo6L5jvc/XKA9HnMwR7lgXQf68szEHF8nBvbvXYIdonu0TaPQXJ2CzXgG6zo4Ydn1seNEJoA7Cc/69B4t8Yg4XAdBxR2vXWYMhKLrWAv4KXA8w8/5KNaA74iNhA7GnFavBLbHdigEebIge/w8BnzKkf5JbHQ4BfhPbHfCM8Cb0Nq1SEabNArN1im4txEHd+JFcSr2+QCOwXQvhEjIPMKjg5Ni8v/Kkb/oqwgRTweuCTz3PsJbBsGmhv8yyP8uhz2HFmCPi5mYL0mwvtcB/z54vXpgkxBJaYtGoR06Xeio69IE5V7iyz/OCV4I4WABYfF9Iib/PY78ZVwb5Pxcn3U885CY/G8Y5Ak2luPK5eU9jvr8x50fU2LdLqYAb8Sm8Jdgo9bl2JkslwNHU852TlEcbdEotEen9wfqundM/qnYCcwTmN/MtiXZ1Xq9yklWxOFyLHOFvwcLAb1+IO1B3EsVaXgj4SnTLbGGNgtbAR8KpF0CXBRT5mKsIXFN3T6Y0Y4knI2FwvbvvPDOFTkZc6atigXYwWw7D+69w9tmATthI8n9se/jmxXaJZLTFo1Cu3T6O0a3Ma+HxYK5PSL/B7CgimCnw99Ugk3Sq+g8exAeiRwdkXcnR95fFWDDSY7nvjPH877seF6SuA1/cpSbwCJAlslbHHU+wXDtugrmYtExvRHfEZgvjMfOWLTLCcwHQDSTtmgU2qVT1+d/XUTeDTEfmglsCTe426gIOqNXOcmKONZxpEXNoLgc424rwAbXM/JsY3x94P4ekjmYPuBIW0a5IzOwEWNwTX8Nql3e+QzD6KCnAGdijZvHImwU+AQWwVM0k7ZoFNql09860qLioXye4W6df8J9YnxeOqNXdVC6Td7e8XqOtMcdaeBukJrW+G2DOf76uYJR8Ubh0srvM9qRlKnYbh3X9sMP4f7/KZp1gHcMXk8QHUn4Vdha+jMV2CSy0QaNQvt0mrSDsg8WHh/gJ8D3SrClU3qVD0q3WYj5kVydsXxwvRra3UFxOaMtcqS5mO1IK/MAvkmYD8pBg/u7selhvz0fI3rJrSj2x3ZTgAWRujMiX9rotc8jfMbQb3E39qIY2qBRaJdOwX779zLaqdolkGcatmwFtuzyDyXZUpZeQZoVBXMQcFqO8qcTXlvdLyLvTx15985Rt8dULPaK/7lZp2uPIGzjgbElhiwJlFtNuWfefMlX1yeB3Qjb/hTlH8x2mq++Mwt87ocJf57jC3y+CNMGjUK7dOpxKWGb/Z20j/rSTy7RjrL0CjVoVks83eeNZJ8pW+BIi5pBca1v35qxXj9PE+7tr002p7dZjrQkIalnEm7krnbYVRTHYZ7+YJ3EY7GtkxcG8s2g/D/q/pGgKyiVaA9t0Ci0R6d+4pZ5NsY0DLaz58QS7eiUXtVB6T7zyB4DwHWwWPAgO7A/lPMDaauInl5MS1FTyMGDvSC6w+VnO8JaOStD/Uk4imGn4z8YnQr+GOGzkN6BrdkXxRqMjob9U7quGbW3F1i3KI+2aBTaodMgcR2ULzLcrfMhzPK9ecQAAAZrSURBVDm1KDqtV3VQ+sF7M5SZgfmwBHFN3W5B+Ld0O8U5YBXV+LlGi1G7kvzsH7j/C/CNDPWP4y0Ml+QuxbZq+h0DbwS+FSgzhWJHZFth0+SLgbt86asHacHrmgLrFuXRFo1C83Xq4lpH2q5YfBRvy/F/YbFJikR6Fa3lIIbrsGnPx9gFdzyB6Y68hzjyXZHNZCcfdzz/2NgSbqZhW3b9z9kuQbmrA2Vem6HucbwSc56bAH6BjYxcLMAa6+D3kfaY9yQc5nt+UifFpMgHpVraolFotk7juCtQ/6PAzQz9xVwz0kVSpl5BPiiiJCaRPm6GKxrj4wyPNPdT1u6AuGdlGZ2tAs4NpI3ruO2GHe/ucQXFj4L2AL6PNczXYYefRR1uthQ4w5FehuNdp9aze05bNArN1ek4gss8cxh2Sk4F/lpy/Z3Tqzoo/eEwwrEF4tjLkeYKggTlOd/FPStr4/cpRteA943JOwk7Tt3jLvJHyAyyAxbCexY22noF8MiYMicSXpPfn2SRNtPQuQavx7RJo9A8nSYharvtEsrduePROb2qg9IfZmJb3ZIwhfB6LsDfIvK3aXS2lFGfnLiO20cY/tF/ENvqmGQ3QRwHAOf4riuAZw/eW4ZFfjwH9/d/+uC9U3D7An3N99yziV4mSsIURk+N7USD12PapFGoX6dZiNLI0UTPiBaF9Cpah+eD4l0rSNZo7EN4rXECuCAi/2JH3t3yGO7gCUcdrqBMSXkfQ+/3axkdYa6JdQK8em4m2Rp4Er6O+7sNXsEOyvyE5bwr7+6MHXzPWoU5TReJfFCqpY0ahfp0moV5hD//JRXVXbZeQZoVBRPsoEwAlyUod66j3ATDSIh+pjI8eMp/FR2G/UZHHTvlfOaLGDrWPYMdgb4IOx/Dc3I7iWIP9FpEsg5GMIaEy8kx7vphTjvf5XvWdTmf5UKNXXW0WaNQj06zsozhZ3+S9JsTsvIuytUr1KBZhbrvH6/Aphy/GPH+VlhwNxeuadOFhH9HjwP3ZbIumtsIh8DeErg+xzOvxhq/7bAIuZtiviAXYw3g5RQ/Nbvz+CxOLmL0RNKy6dx6do9ps0ahHp1m5U9YYDawQ/sWV1RvJ/WqDko/OQW4A9s54mcaFh456ndxuyOtrBNSgxTthOfnxsElhnSywespXdAoNF+nWzD0hbmNUcfdsumkXuUk20+mAedhu0HWHKTNx3xMXLt3PFyNWtnOd3HPrGr6tG/I4a5bSKPV8EWGvh8fwGKfVEFn9aoOSn+ZioVOfwhzqLwdO4I7jqZ1UIocnYkh2zI8D+VpbM1ftBdptHwOZHjy+MXAjyqsu7N61RKPmAxslCDfSkZDKXuo8ese/uniG6huJCjKQRotl+kMffqeBD5Ycf2d1as6KCIpiwkfVAf1Nn7zsfgunRFkQ+jkenaPkUazsw2wGRZfJeocm39mGDH2U5Tz3cbRWb1qiUck5QZH2mRMvEGKjFDp8Qjh4GSTgM1LqKvvdLbB6yHSaD4+jYVmODXi/R2wc4jADic8pQqjAnRWr+qgiKS4Oiib4A4ItKQkG/o6hVwlk+mow11PkUbz4f3xX0B4m/884Hzs+30GOJxkpy4XSaf1qg6KSIqrg+JqeO4jfE5MUXSt8Wsi2zIMeNUph7ueIo1mZx7DmCYLsCjQL8ZiGf091hnwlnb+Bfjvqg2k43qVD4pIiuv47qrWtuOe3dbGr0kcynCa2h+NcxKjUSnvJX4bumge0mh2dgncHz64gnyeapd2eqNXdVBEEh7EHRGxqgBQcc9ua+PXJPYFtnakTwmkl+G3IMpFGs3OPMy5d2bE+0uxmZP/qMwiozd6rTJ0tqieg7A9+Xm5HHh5Ac8RQog2MQM7VHFz7Oyi6cD9WPj+a7HzaERJaAZFJOHXdRsghBA1sAL45eASFSMnWZGEq+o2QAghRL9QB0WMYznwm7qNEEII0S/UQek2fyT/vvyrgFUF2CKEEEIkRh2UbrMUOC3nM84vwhAhhBBCCD/PxvbDT2S4VgJrV2+yEEIIIfrAoWTroHynDmOFEEII0R9+TPoOSqujEAohhBCi+WyIncGRtHNSx7kSQgghhOghB2A7cpJ0UPaoyUYhhBBC9JAjgNXEd04+V5t1QgghhOgt78AOwXJ1Tn4ITKvPNCGEEEL0me2Bi4CnsY7JfcD/xU7EFEIIIWrlfwEOmR1Xp/LmdAAAAABJRU5ErkJggg== $$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
---
--- <<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAjwAAAB+CAYAAAAgAMvUAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nO2dd9gcVdXAf28q6RAgkAKhBCWRAAICIlKiUYxYQUFAEaQpikHg+/wQJAiGJkUpxkJTKaKGKipFUVCQQAgoVRICiRATCBCSkP5+f5wZ9+6du7Mzu9P3/J5nn8zcvXfu3ex5d87c00BRlKpwOPA74MfA5iH9fgs85L1GtTjXjUC38ZrS4nWUfCnD91iGNSrxiPqdHkLtt8p/HdXqpL1aHagoSqH4KnCpcb4/sDvwkqPv7sDQLBalKIrSBiOA3ay237d6sR7trUVRlAKwMXCu1TYcuAHo6eg/yDhekdaiFEVRioQqPIpSfo4ABjja9wC+abUNA3ob58vSWpSiKEqRUIVHUcrPwSHvnQHsZJxvbxy/BbydyooURVEKhvrwKEq5GQrsEPJ+b+DnwC6IcvMR473/pLiupOiPfL5NEQVtHvAc4uioKGmgMldRVOFRlHLzXprv1I4Dfg1cBxxjtM9Pa1EJMAo4CzgI6Ge99yJwNXABsDzjdSnVRWWu4qhJS1HKzbiI/SYhCs9Ao+3p5JeTCO8BZgFfJHjjARiNhLE+CozPbFVKlVGZ6wBU4VGUcvNO43gNYrL6MtG2359KZUXt0QOJLtvQ8d4TSI6hO5HPui1wD7BFVotTKonKXIegJi1FKTcjjeNbqeWoGAuc0GTsA6msqD02Aba22l4FjgWmG237AHchUWe3I47ZqzNYn1I9VOY6BN3hUZRys7FxfI9xfCrid9CIxcjTa9FYAMwwzu9BHEinW/3uAy73jrcDvpL6ypSqojLXIajCoyjlZiPj+BnjeBnhP8g3AetSWVF7dAN7AZ/2/p0IvNyg7y+M428j0TWKEheVuQ5BFR5FKTfmD+4C6707Ef8Dm27gR6mtqH1WADcD9zfpN4uaSWEoUk4jCYZRX+cnqdc7Elqfkjx5ypzKW0aowqMo5aaPcbzU8f4JwF+tth8iP9xlZy31T+JhCRjjsHNC1zFZAvwrhesq2ZKGzKm8ZYQ6LStKuXmaWhitK2vySmA/JOPy7oh/wtnZLC0TTCVvr4Suad6AbiCe6W9j4EOO9rPRxHVVIWmZU3nLCFV4FKXcvDdCn6XAKWkvJCfM37ANkerKjfwvouLfgOYDh8QYNxT4k6N9CpKwTqkGScucyltGqElLUZQyM9A63y6Ba/o3oJkxxgxBQpa3t9rPA85MYE1KcUha5lTeMkIVHkVRyswg63wjZ6/obAxs5h0/GnHMQOB3BH0xfkCwWr1SfpKUOZW3DFGTlqIoRWMD4FOIz9FIoAt4CfgjcAuwyuvXBQywxg5uc27zJhLlBtQPuIOgafEnwOQ216JkR14yp/KWIarwKIpSFPoiT6j/5x3bHAvMRiJjHkF8J3pafWxzQ1weALb0jv/dpG9fJLv13lb7z5C1qtNo8clb5lTeMkQVHkVRisAQZJvefHJdgjhf3oqk+t8ZmArcC+yBOG3auCLV4rAUd3i/TW+kAv1Eq/0m4Ej05lMGiiBzKm8ZogqPoih50we4G6lY7fMq8EHgcaPtDuAvSBmAq4ErHNd6M6U1mvREwoftpHO3AociuVqUYlMmmVN5Swh1WlYUJW+mUn/jAfgS9TcenyXAaV5/V+mMJckuLUAPxIRwgNX+e+CzSEXtNOjpXf83wFxgOVI+ZA4SrTMZMbco0SiLzOUlb6AypyiKAsCN1Kexn9LidbZBnlDNa93RZMx6SEJFVzr9PVtcRxS6gCsdc97rrSktRiMOrf58rwB/RnYdVhvtX2jh2kl9j2mS9BrLInN5yRukK3MQ/Ts9meDnb9S3KbrDoyhKnkwm+Dt0YZMxK2icNv+ptlfUmMsQfwmTvwIf99aUBkMRk8pOyI3maOSpem9kx2E3ak/5UcOaO52yyFwe8gYVljlVeBRFyZMDrfMFwH0Rxr3maJsHLG53QQ24kKA5YwYwCdnmT4vzgM294/OBn1LvoDoTKS+yHHgmxXVUiTLIXF7yBhWWOXVaVpTqcTww1mpbBvxvDmsJY1ukUrTJ3USLOHE9rLn8L5Lgu8A3rLZZwIdJ139jQ2omg26k6KuLjyLmD3VebU4ZZC4veYOKy5wqPIpSPb6K/LDbfIf0nw7jYCtlED29viv3yZ/bWEsjTgdOtdqeQsKDX09hPpOJSDQRwJM0ztMyL+V1VImiy1ye8gYVlzk1aSlKtehBLZGZzdZZLiQCGzranos4dgPrvBv4ZXvLCXASoiSa/Av4ABLCnDbvM47/nsF8nUCRZS5veYOKy5wqPIpSLTbDnTEWiqfw9He0vRJh3HrU6g/5PEiyT53HA9+z2uYCExCfjyyIW3ZAaU5RZa4I8gYVlzlVeBSlWoQpNWMyW0U0XFv0UbLOjiP423Vl+8v5L0cBl1pt85Gbz/wI43dDHGM/EXPefkj0ix9+a2YAvoJgeO7nY15fKabM5SVv0GEypz48ilItwpSaoik8cxxtKyOMs9PrPwtc2/5yADgM+BHikOmzADErvBDxGpci4btPINlwo7IN8lQPciPyk7qtazD3wzGurQhFk7k85Q06TOZU4VGUalEmhedh5OnadAaNUojxk9b5qSQTLXIgcA31T/J+uYGofh69ge2940dizv8Ete/oCOAq7/hxJCeK0j5Fkrm85Q06TObUpKUo1SJMqSmaD89q4DqrrdkadwV2N87vBqYnsJaPA9dTXwn7deTJ/skY13kXNR+qdnwgKu1LkSNFkbmiyRt0gMypwqMo1SJM4dmMWshpUTgHSWDmMyGkbxdwrnH+MnB4Amv4MFJ1urfRtgTYD8l/EoekbhqVv/nkSN4yV0R5S/pahURNWopSLbYKea+H936RsqO+CBwL/Nw7PwK5IS109D0F2Nc7XoxknY0SYRPG3sDNBCPb5iCZbl3FIsPwzQBraD0pXU9gB+O8kjefHMlT5ooob6AypyhKyRiOu7ih+do/obmSLuh4HLVokRnUmxkGIynu/bmeQ6JmkuAOmv+ftfKK+6RuMt64zmoapxlIgk4sHuqTh8wVUd4gW5mDnIqH6g6PolSHKE7JRfPj8ZmGPKFehPhLPIf4MqwB3onkT3kLiUiZSnIZo3du3qUlkjJn/ZNoUURKfPKQuSLKG3SIzKnCoyjVIYrCU7RILZMHkTwg45BIlc2Rm87tSPr/u4C3E55zeMLXS4LK+1IUiKxlrojyBh0ic6rwKEp1cO3erKU+EqTICo/PU96rU+mIm0/BUJmrUVmZ0ygtRakOtjKzCsmzEdZHKRbqPKpkTcfInCo8ilIdbGVmLlJ80GQ09Ts+SrEYS63e0xqCCquiJE3HyJwqPIpSHWyT1myCqfR7I0qPUkxM08KTwIq8FqJ0DB0jc6rwKEo12AhY32qbgyg9NmrWKi4d4UuhFIqOkTlVeBSlGrgcll07PKAKT5HpmJuPUhg6RuZU4VGUauBSYmbj3uEpai6eTqcHHeI8qhSGjpI5VXgUpRq4FJ45wDwkWqtZXyV/xgIDvONKO48qhaGjZE7z8ChKNWik8KxDagdt06Svkg+HAad5xwOM9i7gMeN8IbBXVotSKk3HypwqPIpSDWwlZgG1itCzqVd4tkJ+3LozWJcSzgSkjIFNT6vd5YulKK3QsTKnJi1FqQaukHTXMcB6wMh0l6NE5EhE+Wz2mpTXApXK0bEypwqPopSfwcDGVtucBsc+atZSFKWjUIVHUcpPowgt13HYGEVRlMqSlg9PH2APYDzy9LkEyeD4INEqz24CvA/YEskMuwgpWf8w6neQNUOAfZAbZB/gVWAWEr64LsL4bZBqxCOA1Ygj3EMESx60w4bAdt4ahwD9gDeB15GCgE8gRTSrSiOHZddx2BhFUZSOZRiiYIS9bjX6DwTORG6Krr6vAafQeGfp3cBtSHica/xLwKeT+nAdxo40/y6nGf0HAxcDyxr0nQscS+Pvcjfg/pC5ngA+0uJn6QL2Bi4BnonwuZYCvwR2jzHHURGua752scZPiTjuNNrnVMd19zDe7+94/1dtznmjdb0pbV5PyYcyfI9lWKMSj6jf6ckEf7sa9W1KM5OW/SPuwk9UtAvwOPBt5InbxVDgfOCnVnsX8iEeAT5G4+KGmwG/AT4fYV1K62yB7KZNplZUzmY0oiBNB/pa7x0P/BXYM2SO8cCdwP/GXNsk4HngPuDrBKMNVhKsBTMA+Cyyw3gN9aGYVcCVSNDc1VmORG2Z6A6PoigdRTOT1ubU2//7A8OtPo8CHwRuoXYjeQt4A6nv089x3SOQnaFbEeXmWuBQ771uZIdoNbLD5FrjZcDNyJO7Eo2VBH05tiCoXG4A3E3thuibodbDrch+Avk+jvbOP++d+ywDFnvXHegYfy5irvxthM8AsCsSVm0yHVGiH0LMWCCyugOyI3gMsmMFcDhi/trbW1sjngeu8477AJ9x9LkLMbeC7F6aPGGMHwB80jtegSjtPv8IWUNUbOVlGUEFZw6wqXGu2ZYVRSk6LheWlt1amik806g3cxwN/Ngx+c3ILs1ZiPLi31h7Iv4fP6Q+DwiIOeRW4AeIsvMC8B1EcXrD6zMIuUFdgNxwfQYjN7KfNVl/u3yN+rTbWXIf8IsEr/c0wRvjfILhyZd7/R5DzC13ISZGgFHAV5BdGXN38ChE4ViEfNcgcnAxsusHIh87A1OBidacPwB+RzSfIJO1iOz80vHecmRH50Hv+rciJlO8dVyN7Po04j7v5fN94ASrzzpEwXP9AU73XgBXGe2nUK8QJoH9vbp8dmZTb+YahPjK/SfhtSiKoiTFmohtqTCNelvaEuRJeA5BhcZkDEG/nDeAL3jH06lXaGxOJGjHu6iNzxGVOxzzZvUyFc20mG/N+Zj3722EK8NfI7jenwG/9o6PCxnbC9lBssdPiLjmKcaYqRHHgIRtv2bN+b4Y4/siztr2uic3GfcZo+9tMeaLSj9E8TLXdIuj3xkE176Ho19U1K+iGpTheyzDGpV4RP1Ojyf4uxXXDeK/xA1L39k6H4SYKvYlPOrmeWCG1TYEuAL4I3JTsP0uTK5ztNmmNaV9dkSe+A8lXIu+nKB57ABk1+16wpW1Ncguh83Hoi8TkJt8HKV3EbLTY3JyjPErgYOpZS/2OZfGu4CbU9sRfRlJ+JU0Y5DdMxNXGLpGaimKUjYS3eGJo/D0RhxNbY5HavU04yVHWzdyc20WMrwQueGYZLat1WGcj/hghbGO4G5Ff+TGe0aEOWYhUV4mUU2Hv0d2/I5CfL3icI91PoHGDvIuniG4o9MXUfJsX7WeiElyfWqmr7jrjUIzh2UfzcWjKErZWB2xLRJx8vBsRzAaZyZu/wkXfRxtFxN0rmyEvdY3I45rhzPJxrTkIooSmQY3Reznqqr7GLKbF4XHEadpn6g334e8Vyu8bJ0PRpT4WTGu8RPgQ8CBRts44ELEv8nnW8D7vePzkJ3MNGiWdNAn7x2eKURThpXkOJPONP9MQWUtb5KSvUR3eOIoPLY5C8T5MqrH9DDrfC1i0orCUIJP4kkmrmuEbYarOi8ifj1RcPX7W4y57B2/ITHGtorryWA48RQeEOf9XRGTlc+Xkd2n25BEi6d77X9HUjWkRbOkgz4LkOgtMyRfI7UURSkyrt/sXBSeFYiTalS2tc7vJfrujj0W4NkYcyvReCZGX1dIdzvjXSHrUeiF7NK8G7mBD0F8y1ymKldOoUY5o8J4AzHF3mfNcyWSe+g6b11LgM+RrvnVVnjWETQX+syh3iytJi1FUYpMYXZ4HqK5r4fPKGSXxuSuGHO7fIceizFeiYadSyYMl+YdZ7ztkxXXgX5zxJfnEIK7h3EIiw4M4wEkDcMUo20jxMzrK1bHIekW0sTepZkPrGrQ11Z4hiJBB6+7uyuKouRKLk7LvYHtrba/xJjHZQ5rZ/y/0fwhaRCWiC+L8VE5AamRNZn2lJ12ORspn2HiKzvXAjekPH8fJPu4ict/J+w93eVRFKWo5GLScjksPxxjHlthWUUtIV0r4x919lLaJW7iv6THR2Eq8H9W21okr8NNiD/OItxFakcB8xJci5/48HFkp8Tk9gTnacSWBE13Lv8dH5fCszXZ+KpNoTMdaJXsmYLKWlXIxaTl2qGJo3TY4/9B4213mz6IwtXq3O1wErXsvFlzL5INWKkxiaCy8zpShPTv2S8HEAXqEiQqweSHSD2xqH5qrRA1Qssn70gtRVGUOBRC4XmZeD/k7ezQjCcY0p6VwrMv8NGM5rJZiio8Nt9ztB1JfsoOwAgk87TNxsDPkRD2lmu/NCFqhJaPmrQURSkTiZq0ovrwtKOwjERq9rQ63rW7NDPGeKUajAfGWm2zcZdRyIoeiFKzkXf+ivX+B4H/SXF+V1h52A7PXIJJPlXhURSlqLiUm5YTD0ZReHoRdFhuV2FpZ/zLBG8sSvV5j6PNdhjOmm9SqwF2pXdsl544C8nZkwZxTVqrCeZP0lw8iqIUlcydll0Oy4/EmMPlsPyPNsZn6bD8LcQ/Iw+iJgDsFOxdQojvHxM39D2M3aj57TyDRI4t9/79qdGvNxKttSPR0zhExVZ43qB5iPlsYLRxvimSA2lpgutSFEVJgsx9ePJ2WLZz8GSp8MSJJFPSxeUHEyePFARzQbXKYKR+Vi8kn9BB1HZ2rgQmem0+WyElSg5NaH6Q6KwtrLaw3R2fOQQr02+NyrqiKMUj8zw8eTosb0fQYVn9dzoTV96luOaYnZJYCBKBtZV3fBLBumLHEsx2fAhweELzg+zS9LbawhyWfdRxWVGUspC5SasdhWUEsmXe6vh2d5eU6vCgo20CUkYiqqnosATWcTiivADcClzu6PMmUlLifur/xi5D6o0lUQcursOyj0spUj8eJS5fJig33yTdMipK5xFnh6cHUsD544gV6QakzM9/aabwtOuw7HqibkfhWUCw4rXSGTyDZFceZ7QNQQpznhJh/MFImoF22AZRWkB8rI4M6fsQUrH5u0bbQOSPcA+im3UbETck3Ud3eJQk+BzwfuN8OXByTmtRqkucHZ7LEEXc56NIctaz/YZmJq13Eaw11I7CUiaHZaV4nO5oOxl5suwKGXcwcFWbc/vOxwOpZVhe3GTMucAfrbadgXPaXAvEj9AK66MKjxKXAdb5S7msQqk6UXd4RiC1C22+DfTzT+wdno8BBxjnmzsu8CXgQO94FXCM8d4xyNOrz57W2FXAj43zGdSbBK6gvqK1vbu0FXCNcX4bMN2xRsXNNOoVWLscwr7U///eQi3PzQbAxcZ7rirjk6nJBkh697nGtU0flh0d46+xzo+lvsjodOQz2IJ9DvLEeTVS8mQxYuraAVFM9vH6XQ0cYY09gno5vYpanbfvI7tIIH8LvgK+ENndORJ5Ajnauqb5WV07OScCw433/oTU3opDqzs8fiSX+d2rwqPEZYR1rg+jShpEzcOzFe6H3t7Ib/ezrovfgETDRH3ZQv5YzPFmOv6RMcd2Izc5JTpLiff/O8UYOyrm2G5gF2P8cS2MH+j4DD2BC5C6XVGv8zbw9Yif4ShjrgUR+q9wrDHuZ53muEYznrSusYpgXa1GzLDGriOYeqIZN1rXmBJzvFIMWvke1ycow8emtD5QWasiUb/TDQnKmusBbRiiHNl9l2IEPtkmLZeTcBhmPp6+iAms1fFx57bHK53BWsRnZ0+kQKedOdhkCZIJeSyyW1MVuhDbtMmLhP9fmNhmrS5qUWeK0gzbF24NutOupENUk9ZCgq4C3cA3MHbZbZPWO9pY2EqCIeRxuI1wPwylfVw7JlGZT3vfzzRa28loxN8Qb/xBwHsRBWADZLtzEfAC4jhsbn/G/Qx2hGFUkv6sNiMx7NIeUfx3fBoVEX265RUpnYQd7fhr5G9OUZImTpTW6YiVaX/kd/9GxF3gv8RN3KYoReMt4K68F5ExrTosh/VVPx4lCtsBnzTOVwPfyWktSvWJm4dnOiG7jarwKEr5aNVhOaxv0XLx9EeczjdFlNp5wHPINrWSD72RTOKmK8RZlH9nUGWtuGSeeFBRlGLRatLBsL5F2eEZhdxEDyJotnsRibS7gGCRViVdeiBRlGYh3NuAqbmsJhlU1oqPH1RhKtmplpZQFKVYtLvDM5/6cP9G18ya9wCzgC8SvAGBlNOYgkSH2jX2lPToi6SnOMRo+wOS3yqqo3zRUFkrD7aCowqPonQQ7So865AnWJPR5Lvj2wNJi+HK7/QEkr/rTuTHblvgHoLFU5V0WImYeHymIY6hb+eznLZRWSsXtoLjMnNFQk1ailI+bJPWQiTfRBxmUx+V2QtReuKYxpJkE4Kf61Ukv4vphLgP4qQ+DElLsBNt/AAqkTkZkbGZiCmrzKislYvTqM8Tpt+BonQImxBMrvW3Fq5zqeM6H44xPulkcF1Ilmz/encTzObrc7HR7+ttztvplCGpn8pa9chF7tSkpSjlwuWwHMecFTYmTz+ebmAv4NPevxNpXCj4F8bxt6kvR6MozVBZ61BU4VGUctFuDp6wMXk7Lq8Abgbub9JvFrVt7aGIP0m7TCJeOZCPWeOPiTjucpQikKes+fiFiKPK3L9DrnV+xGu8O8H1lw714VGUcuFSSg4B9o55ncGOtqLl4mnEWuSJfLR3fjBwU5vX3KV5lzrsOoJRx2uRzXKRhqz57ES8TYcw2YkifyuBf8aYr3KowqMo5cKl8Ixp0J7EtYuK6aS9VwLXew24zjt+BxK2bLIMCc0Gyctim0DmGePHA9t7x08jjr4+f05grUq2JC1rPr2oycx2SPJDkweoj6a8PeRaT1GTyaHAR7zjRdQy0c9DHX4VRSkRprNl0q8VRH/izNvZ9Rlr/kZOp60wAlFq7P+f90YYuz3wutf/aWCjBNeVBnl/j1HIe41pyprPwQTl7bQWr3WlcY1DE1ld8qjTsqIoTUnT7NQXyT5bBuxCuNsleO2XcfvanN1k3JbA74H1kafpDyHhzkq5SVPWfB5xtNm7jFHYHTjCO/4ztR0kBVV4FKVMrI9sV6dJWfx4BlnnSe+knAsssdomAPs26L8JEt48HFFyJiJKj1J+0pY1gOeRnUGTuH5lPYErkLD7NcDxCayrUqgPj6KUh20ymGMM8KcM5nGxAfAp5Cl1JPLD/RLwR8R/ZpXXrwsYYI11OWG3w2vAhcCZVvvZwPustiHIzs7WSPHJ/YBnE16PkixFkjWfmcAHjPMRiAL9SsTxX6EWhfV94MnklqYoipItnyM9/x3/dV7EtSRpg+8LnIH4EDVa1/PUnnhHOt4/uY35GzEIcfq055pk9FkPMR34PlD7pLCONMnbPyYKnSBrILuK9lx2+oNGbAK8QS183d6VKhrqw6MoSihZRFFlHak1BNlRmkItffwS4HTEAXgE8qO/HLgXeBewleM6adR1egs4x9F+FvLk3xP54d4LCV8+CLgvhXUoyVBkWQN32HlUP54LkM8HcBIiu4qiKKXlGtLf4ZkVcS1JPKH1IRh1tohgeC6IGeFZr/8XHes+rIX5o7Ae4otjz3cAcJV3vM5bUxnplB2eMsjalo657oww7v1G/3tTWlvSlEHuFEXJkQdIX+GJ+mSYxA/W9xzzfzyk/2e8Pq7Q/LBx7XK0Y75lxvFJKc6dNmW48XSSrL1qzbWwSf9eSIX3bsTvaGyKa0sSNWkpihJKFuamgcCmGcyzDXCi1fZbwitx3478qLu2+RcntC4XVwP/str8mkpTEefmrOgJfBb4DTAXMb8sQ2qj3QVMJp08MWWmTLJmm7U2BjYP6X8CkugSpNDp02ksyqP0sqdRWopSDgYijokmi3H7mMThswR/1McAC9q8bjMmE3zgaqY4rEAUj3c53nsqiUU1YA3i6Hq91f42UsMoK0YD05GSBCDf0QxE+doRMYlMROTiZxmuq+iUSdYeQfI3mbwHiSCzGU5tZ2Q+8J30lqWypyhKduxIcGv9gQSu+13HdQ+PMK7dLen/WONfQRyBm+FHRJkv180gaQYgDq723GneZEyGImUGfNPFUdT/f+2ElA3oxn2TbkQnmLTKJGufcszZ6KHmBqPPZ1JcUxqypyYtRVEa4koI+EIC13VdI23T2bbAMKvtbuSHrxmu36zH215ROL2QH2hXqO+JiNkhbc6jZto4H/gp9f9fMxFzxnKkFIIilE3WXBmXXQkI90XKUQDcA/wqtRVVSPZU4VGUcuBSQsqq8LgcK2c62lzYaf4h3YKcXYgPz/7euZ0EbiDwrRTnB9gQ+IJ33A38sEG/jyL/t2tTXk+ZKJOsgUQE2o7KO1vnvamVPlkFfDXF9VRK9tSHR1HKQZUUng0dbc9FHLuBdd4N/LK95YRyCbUw5LMRZ9a/W32OAy4iPXPHRCSsGiR77r8b9NNSFkHKJGs+j1Krdu6vYwySEBHgG9QUuQtJN6t33rK3A8GivY/g3glriu7wKEo5SEvheYngU1na9bT6O9qipM9fD9jManuQ9H5sz0CiYEBqFJ2OhCnfYvXrS7o+CGYpC1vZUsIpi6yZhJm1RiFyCPK326ygbbvkLXsTkV0l87V/6IgQVOFRlHLgUkLmJHDdNQR/xDcg3SKldpFEgKURxo0j+Jt1ZfvLcXI8NSXmeurNBt9Ckg2afAHxF0kD06ThysarNKYMsmYTpvBcQq2214mI30yaVEr2VOFRlOLTF6npY7KaxtvLccnarOVS1FZGGDfROn8WuLb95QT4HHCpd3wnErVmOmk+BfzcGtOT5J62+yGKqB/BYm7pX0EwiufzCc1bRYouay5mONp2QcLVD/DO/4CEiSdNpWVPfXgUpfhsTfDhxGWKapUXkKgPkzGI+SYNHkaesk2nUJeDqM0nrfNTSd5J8iPIja0LuB84ELkB2JyBKEZ9jLYDkBtTS/4FBtsgid1AbkB+Mrd1uJXTtL6nKlBkWWvEK95ruNG2E3CZd7wS+FpKc1da9nSHR1GKT1r+O2HXStOPZzVwXcz5dgV2N87vJvkn3D2AX8iijFYAAAQJSURBVCNRMI8hhSQbFYp8EfiRo31qAut4AvnOxwCnGe2PG+3mK02n1bJTVFlrhq00D0KUEZBCoXbm76SotOypwqMoxScPhSftSK1zqPc/mBDStws41zh/mWjJEeMwHik30B+J4tkPeLPJmLMJ+oNMJLhb1g6V8qHIiaLJWhQa7RLOJRmlOgqVkz01aSlK8UnLYTnsWmkrPC8Cx1LzhTkCuTG5iiWeQk2JWAxMIlqkTRgfAg4xzvcD1veO51ErGXEd8oRvcgW16J/FBE0kPwb+6h13A1+h8U5RMyp308mBvGWtFRp915NpXZbiorKnKErm/IGgs+BBCV5/U8f1/9NkTFKp4Y+j5iQ5g3rlbjCiePhzPIdEzyTBTwh+ZtfLdl4dGXGc/2rHsbwnsjPhX8tVyLJdOqG0hE9estYKwwjK0m8znD9t2Yv6nZ5M8P+hUd+m6A6PohSftE1aC5Cnxn5G2zBk5yJKCG87TEP8Ay5C/CaeQxKcrQHeieykvIVETU1FqjMngZ29thH2k23UcT7tODCPo/adrEH8K5TWyUvWWmEhUhB0lHe+glpOqCyopOypwqMoxaYXtTo2JkkqPCC+AXYa/jHArITncfEgEv46Dvgg8nn7I1mNZwJ3kfw2/k7Nuzi5jWiFJ5PAVK7+SbRwaiWcPGStVf5JTeE5D5id4dyVlD1VeBSl2GxJ8O90KbAo4XleID+Fx+cp76UI6kORHkWXta2p+RK9QL0jdRZUUvY0SktRik1aVdJt8nBcVsKp5E1HicQlSMJREFPWioznr6TsqcKjKMUmbf+dsGumXVNLaUxPpHCiT2VuOkpTJlGrF3U7cEfG81dW9lThUZRik6fCozs8+TGWWuh7ZZxGlab0QXZ3QHyJvp7DGiore+rDoyjFRhWezsQ0KTxJ9iYNJXm2BbZA8vs0KsnwP9QyKp9DOn/rzais7OkOj6IUmzwVnpHAeinMpTSnkj4UHc65wO+Q0hAuxlMr5/AsteSXWVNZ2VOFR1GKSw/kidAmySzLPm8iT54mXcBWKcylNKeyN50Oxv9ORxNMbTAM+A3iqLwW+BL5hYJXVvZU4VGU4rIZtUgNk7kpzadmrWLQg4o6jXYww6jl1BmNZPreE8kH9WXkO/ZNWadSK02SNZWWPfXhUZTi4lI2FpFe9uMXCGYSVoUne8YCA7zjSjmNdjD239WXvJfNReRnyoKKy54qPIpSXLLy3wm7tio82XAYNf+NAUZ7F/CYcb4Q2CurRSmJMQxx/m3kE/cisrNzfWYrqtExsqcKj6IUl6ySDoZdu5HC8xD1vx9FzlpbBiYg9ZxselrtSftvleF7LMMam3EtUjBzV8QvbmMkBP1VJJv5DKQwZh7kIXu5fKf/D+Woq8HLbv+YAAAAAElFTkSuQmCC $$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 no depth buffer is present, r is undefined.
---
--- The bias value o for a polygon is
---
--- <<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAADgkAAADkCAYAAAAYPSVKAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdd/wlVX34/9dnWXpHAanuIsUoqBQbiYFgiQVLsLe4Bo2aRE1ixEQNiiURe0yiWBL9xh41iiKaYGRNogaCIgSDCohIl97LLvv5/XE+97dz555bpp/53Nfz8ZgH3NnPnDl37sw55z1n5pwF1FdHA2synz8JnNxNViRJkiRJkiRJkiRJkiRJkiRJkiRJUhHvBhYzy4u6zY4kSZIkSZIkSZIkSZIkSZIkSZIkqW0rus6ASts79/nyTnIhSZIkSZIkSZIkSZIkSZIkSZIkSeqMLwn2ly8JSpIkSZIkSZIkSZIkSZIkSZIkSZLUU1cAi5ll226zI0mSJEmSJEmSJEmSJEmSJEmSJEmSZrEpcA8bXxC8udvsSJIkSZIkSZIkSZIkSZIkSZIkSZK6sKLrDKiUvRj+7S7vKiOSJEmSJEmSJEmSJEmSJEmSJEmSpO74kmA/7Z37fFknuZAkSZIkSZIkSZIkSZIkSZIkSZIkdcqXBPsp/5KgMwlKkiRJkiRJkiRJkiRJkiRJkiRJ0hzyJcF+8iVBSZIkSZIkSZIkSZIkSZIkSZIkSZIvCfaULwlKkiRJkiRJkiRJkiRJkiRJkiRJknxJsKfyLwle1kkuJEmSJEmSJEmSJEmSJEmSJEmSJEmd8iXBfnImQUmSJEmSJEmSJEmSJEmSJEmSJEmSeuoWYDGz3Kfb7EiSJEmSJEmSJEmSJEmSJEmSJEmSpFnsxPALgutwRkhJkiRJkiRJkiRJkiRJkiRJkiRJmku+XNY/e+Y+Xw1s6CIjkiRJkiRJkiRJkiRJkiRJkiRJkqRurew6Aypsj9znqzvJhVTOXwO7Tfj3m4BXt5QXpeGZwJOm/M07gJ+0kBdpufsbYPsJ/24ZLEnSfDJOU4yxmiRJkiRJkiQpBfZjKM8+DKl7PocmSVKiFrrOgAo7FvhY5vOpTA94pBRsBtwKbDrhb04HjmonO0rEycBTpvzNrsCvWsjLcrY98DvA1sCXgKu6zc7c2gQ4AHgAsCPhd9kcuAW4GbgM+OnSfxdr3veOwPVT/sYyWJKk+WOcpnGM1dphrJauzYEHAvsQHkDamnAv/UbgBuBy4BxCLCdJkiRJkiSpGfZjKMY+jHbYh5GurvswfA5N6t5WwMOA+wM7AeuBa4DzgB8C93SXNUlSUX9JeHFgsPxjt9mRZnYow+dubHlnZ7lTVy5l8jlxaXdZG3Id08/fWZa7CQ3xCwg3rN5IeGmsSQ8GrmT4mG7T8D610Q6EF/y/BdzBbOfJbcBa4O3AEwkBXVWPnmG/lsEaqKvMK7Jc3so3kyTlGadpHGM1Y7V5tBp4HfBfwJ1MP282ABcCnwGeR4j/JGkcY21JkiRJkoqzH0Mx9mHYhzGPUurD8Dk0qTsHAZ8Gbmf89Xct8F4mz8Ss9h3FbPX+X9Swr6JtkJ/WsM8UeIzVWycxfML8VbfZkUrbn9EC8Nmd5kgpOJPhc+LL3WYHCCPuNPWgzmA5FdizgbyvIAT7+f09vYF9adiWwBsIIzJVPT/uAL4OPLfG/MXOa8tgQTtlXmz5ahtfTpI0lXGaxjFWq5exWloeCXyNMKJmlfNlHfDvwPMJo/hK0oCxtiRJkiRJ9bAfQzH2YdTLPoy09KEPw+fQpOatAN5KuJZj13esjLiRcM0rDccxW3l9E3DvCvsp0wb5TIX9pcRjvGRlmztTLXbPfXYKb/XVoZF1P2g9F4pZA6zKfL4E+HgL+10JPCi3LoVzYjvCyBtZjwN2zq37BnB9ZPsVwLbArsCBhJfH8p4AnA08CvhJlczmHATcL7L+uhr3oVEPIDyElT/25y+tPxu4jPAC4aaE82Nf4DDgmcC9ctttQZhR8FbgszXl0TJY48xa5tXN869Za+imbpfUP7YR0rWG7spyYzVjteVqN+ADwDNy628kPFzxXcKIftcD64HtCZ0FBxPOiSOBhcx2KwmjEx4FvB/4BGHwmLsbyr/StAbb3n2yhnZ+L2Pt5WkNXu+SJEmS1Db7MdK1Bp83y7IPQ1X1qQ/Dsllq1krg88AxmXW3AicS6pqLCfXGg4BXAC9Z+rw98ClC/fz29rKrMW5ktG3wJEZnet0OOB54Vcn9xNogDya0JwDOAc7L/fsXSu4rNR5j9dZZONqClod3MzpiwcLELdSWKxn+bT7W0n4fwuib809oad9FXcVoXvONiJiVhIb6+ZHtFwk3blbUmM/VwIbcPs6oeR8adgSjsweeQ7jBMovNgBOIj+xyXI35fAeWwZpdrMzbA9im4vLNTHpHt/Zt5lNXdbuk/jFOS1eXZbmxmrHacvQMQsd59je4GPg9Zh9Bdz/gK8TPmcEIhJah88e2d790+XsZa/ef17skSZIktc9+jHT5vNl09mFoVn3rw/A5NKlZH2X4GrscuP+Ev38y4QXg7DbHNpxHFbfA6LPGg+VuwsQjdflcJu15evfIY6zeuILhE/SIbrMjlbaW4XP5253mRgN7MFoRvqKlfR8b2fcuLe27iNgxurBgGtsAP46k00S5fjyhMbMe+BJpHtPlYh/gWoZ/z5OJj+Y1zRsYPTceXU82ATgNy2DNJlbmXVRT2tl27W41palRXdbtkvpnLbYRUtR1WW6sZqy2nCwAf8Xo7/t3wFYl03xrJL1F4PSqmVXvdF1eq5gufy9j7f7zepckSZKkbqzFfowU+bzZdPZhaBZ97cPwOTSpOc9i+PpaDzx8hu3+KLfd7cABDeVR5RxAvHweLHXOPHdBJt06X4xLncdYvbAJozMLTXoTXErVAmEkkuy5/K5Oc6SBpzBaCT60pX1/MLffS1vab1GxY/T5EukcE0lnEXhbPdkcsjmwRQPpath3Gf4tf0z5GzSbAlfn0tuxhjwOXIdlsGZTV5mXt1smvctrSE/jdVm3q17PySxP7TgvWp6M09LVdVlurGastlysAP6R4d/1HuAlNaT9NUbPmXfXkK76pevyWsV0+XsZa/ef17skSZIktc9+jHT5vNl09mFomj73YfgcmtSMzQiziGavrw/NuO0CYabZ7LZfbCCPKu95jH95bbA8oob97MDGGYLnbabXuT3GTv/cL/dh9De7qouMSBXtB2yXW/eDLjKiEYfmPq8Dzm1p34flPqd6TuTzCXBWiXS+M2b9ziXSmuYu4M4G0tVGRwOH59b9BWEEljLWAd/IfL4IuKFkWnn7ADvl1qV6val7sTKvjvMlm67nX7O6rNtVr89mlg93nBctT8Zp6eq6LDdWC4zV+u8k4MW5dX8EfKyGtN8YWVfm/FO/dV1eq5iU7oOCsXbfeL1LkiRJUvvsx0hXSvdZUj0n7MPQNH3tw/A5NKk5LwNWZT4XeQl3EXhnbt3TcbC7lGTbBteM+Zs6Xro+hI0vrf2QcG7Mi7k9xr4k2C+75z7fRXjbVOl6FXDvBtJdDRzbQLptyd8YAAODVORvSPyYUNY0bSXwoNy6VM+Jus7fW8ast27up1fmPl8LnFIxzYsy/1/n9WAZrCKaOl+y6Xr+Naurul1KmXFanG2EdHVZlhurbWSs1m9/Abw0t+6TzD7a5jTnEEbjzEr1WlFzbHv3S5e/l7F2/3m9S5IkSVL77MdIl8+bTWcfhibpcx+GZbPUjAXgdbl13wV+XiCNLwO35tb9eZVMqVbZ8vMPib8T9BvA02rcz7wNcusxVi88jeHpLS/pNjua4kTC73Qu9T6Auprw2y8Cf1Jjum16D8PnchJTqwoIs5Nmf5uPtrTfhzA6he8TW9p3UfljtEiYKriovSLpLAJ/WU821aKtCSNn1T01++sz6R1XQ3oD78AyWLOLlXk71pDu4cALlpbVNaSn8bqq21W/7O/ojPLlGaeNZ5yWri7LcmM1Y7Xl4AhgPcO/5/nAVjXv528z6d+EZeg8su3dL13+Xsba/ef1LkmSJEntsx8jXT5vNp19GBqn730YPocmNeNwRsv6Mi/4fTmXxu3UX76ouAXgZsJvsoHQJngt8Tr+J4SBEcr6XCatZ1dIp288xuqNP2D4hDyj2+xogncy/FvV9QBq9sHTwfLaGtJt21qGv8O3O82NBvZgtOJ7eUv7Pjay711b2ncRsWN0Ycm0HhdJaxF4VvVsqmWPZfR3fG8N6T4KeOPSsn8N6Q2chmWwZhMr8y6auIVS02Xdrvplf0dfEizHOG2ytdhGSFHXZbmxmrFa323NaBm9CDy5gX29OpP+6Q2kr7R1XV6rmC5/L2Pt/vN6lyRJkqRurMV+jBT5vNl09mFonOXQh+FzaFIz3s1o2fDrJdL500g6T68pjyrvADb+Hhcsrdsc+AXxev4VFfZ1YSadfSuk0zdzfYyrvPGo9u2e+3x1J7lozmaEN98PArYjvL37Y+D7wB0zbL8roQJcDWwKXAOcB5xJuOjasgK4T27dQYTG71HAtSXTXU242bF3bv1uJdOr09aE324vwu+wDriCMGXqz3J/uwAcnFvX1vTiWwEPJ1xLu7LxPLmGcJ6kdE1tT8jrvoS3128nHNOz2VhZ1a3Lqd/z+76c0d9jBfBQ4MGEh7nvAH4FfA+4uOkMLqnzGD0msm4D/Q6UtwF+jdC42gnYlnDuXk9oWJ3JbOV5XRYIZeeDCWXldoT64AbCDZazCedQVftF1tUx2sp/Li11OyT3ua3rfFPCNbw3sDPhfLmOcK2fDfyypXzMoosyOKbreitW5qU+HXpq5VBW/hoYtHdvJLSXzgNuq3mfXdbtMX0oB/YjHLc9gC2AWwm/0SWEB3cvo93YYrlr83gbp6Ubp0H3dd6s5i1Oi+3fWK2fUmsjtRWrARzPaBn9PeBrNaWfdWPm/5tsN6fepuq6TGjz/MrqurweSO16n6TLcyWl+6BgrF2FsXb69cKA8bYkSZKkvL70Y/SlDwPmrx/DPozAPox62YdRTNvPoaV2vkyzXJ6LnySV5+yWm/zLwovAOSXSOXtM2l8qkVZR3rseL9s2GJSbdwGvBz4d+fs3AZ9cylsROwD7LP3/TTQ/aGVKZfRyPcZahv6B4TdWP9Ztdsbahfgbttnl5MzfbwOcQHgoM/a31xFmYVgxZn8HA19ldMrtwfJL4Ji6vtyMVhAKinxeys5UEZuZYhF4Xx2ZreDXga8QCvBxv/UPCLNsDewf+ZvnNJjHTYAXEEYsuXNCPjcQGh2vWNqmLsdN2OdgeW7m7x8HfJPx5/MiYRbRx7eUt2lLXTOknJFLN1tGbA28gRA4TDomD68pL5OcENl3mWOwKRsbjtnlqxXyVrTsrcMC8BvAiYRrfcOU/d8NnEqYIa9J+xLKx8un5GeREIi+l3KjrAy8OZLuTxlfb3VpNe2WwQuEOvgU4JbIvrPLj4BXUe8gFimXweN0XW9lxcq84wqmkS2bmugcSbUcyubvdwg3cKddA/csfYcqs4emVLcPdFEOFK0TNyVcS+dP2eYuwg3crmTzktJMgn063sZpG5eu4zTots5LuY2QWllurBYWY7V6tB2r7U7oZMin/egKaU6yFbBqadm25rT70Kbqukxo+/xKpbxO4Xrvw7mSyu8Fxtp15c9Yu5t7bn2K/yRJkiSlqw/9GF3329uPMRv7MMJiH0Y97MMoro3n0FI5X+bhufiU6555sxWj5/olJdPaldHf5Uc15HEc713P5j2ZfWTbBAvA/4zJywkl9nNUZvsmBhRIpYyOWS7HWHPg6wyfiO/oNjtjPZHpBe3xS397GOGN2Wl/vwj8Y24/C4QXM+6ZcfsX1vw9p1kBfCqSj6IPoI578PS9dWa2oF2AL0TyNG7ZALxyadvnRf49NgtXHY4hvKgTy9PtjK+MzgXuV1Me/nnMPrLL/oQ3yb84w99mj+mJLeRt2nJUxTxAaODlA95sGXEhs+XlDkJjo0n5crjsMfjDSDrrCaNmlFWk7K3D7xFG1Bq3r9sIDbpx//4+6n+JbvOldGP7vYcQdEyqM85l+CbzrN44Jr3Xl/8qjXkm7ZXBTyaMXBQ7Nncx/rc4lzB6Uh1SLoNjUqi3smJlXtGbkU/IbHtqrblLsxzKOprJ18CkvG0gPOz4sIL7TKVuH+iqHChSJz6QMNLWLMemy5khyOUlpZcE+3a8jdOGy5ou4jTovs5LuY2QUllurBYWY7XquorV/iaS1sWEe4p90oc2VZdlQlfnVwrldSrXex/OlRR+rwFj7WqMtbu959a3+E+SJElSWvrSj9F1HwbYjzEL+zDCYh9GdfZhlNf0c2gpnS/z8Fx8ynXPvDmM0eP4nQrp5QdmuINmJiXw3vXsvpPZR75NcMSYvNxKmOG2iNdmtn9XhfzGpFRGxyyHY6w5kX9r9c+6zc5YLycEWYMlNhrLkwhTn9+aWXczYXSDSaMEPXVpH5sw/GDnBsIU3pcD68ZsexNhdIY2bQJ8JpKXWR9AXUWYXjW/fZcPnj5oTJ6uAz4O/Cnwu8CfEKZjHfzGGwgjp7yH0d+l7sBmC+BDuf3cDXwYOJIwygKEkQAespSn/HlzCaNTuZfx14RzdbBckNvPzcCewP8tfV4P/Adh2tqXAL+/lMa4GxevqjFv+QbYj3P/Hlu2r7D/gYcw+r2eRAieb8usu4NQRlwf+ftsnpt0VWSfOxRM41CGv9dgeUvFvD2R4d/mtMg+nlRxH1ln59K+iRDMPQLYMvN3Oy3l7SuR/LyzxvzsCPx3Lv3/IpRHq9jYmFwgjPz0GkK9kc/T75fYd+xm9GD5BGE0llS8g+bL4M2Bv2X0WHyFcDP9Xkt/t5JwY+h4htsDi4RR8A+oIS8pl8FZKdVbWbEyb8eCaWRfon1rrblLrxwaGHcNfBV4BrAzG6+7nQg3SP4t8vdl2nyp1O1dlwOzxiNHEM6bwbp7CHXDpcRvTH2kZH7qks1LSi8J9vF4G6d1E6dBOnVeym2EVMpyMFYbLMZq1XQVq23NcL0zWMqM/teVvrSpuiwTurwXkEJ5ncr13odzJYXfa8BYuxxj7e7rBehn/CdJkiQpDX3ox0ilDwPsx5iFfRhhsQ+jGvswqmn6ObSUzpd5eC4+5bpn3ryI0eP3uQrpXRxJr84Xer13XcwC4Xqa1CY4OZKXMvn5XGbbZ5fM7zgpldF5y+UYa078kuGTcE2nuZndSxm9gJ5IGGHjNkKgkh1FZxPCyLk/i2w3GBX375c+/5xwHLIX77bAHxGfivt3a/5us9gE+GwkL9MeQF1Feg+eHsbo9L93EYKTLcZssyfwfTYGUGtz259ecx63ZTRw+wnwgCnbHcXoG+vfrDlvAN/K7eOHwP8u/f+/T8jnAuGBj/z5sI56Gmt7RtJ+WQ3pzuLYyL6fRGgE3k1oPB6c22YV4SZcrIJ+eEP53COyrwsLpvEC4gH+B+rL5v/vJZH93KemtDdn+Hr5NmHEt2n+IJef9dQzY9xKwvWTTfu1E7cI9iIE0dntDi2x/90ZH4gvEoL8kxg9j7uQv5lXdxm8DfDd3D6uYfqIWQ9i9Nq4gPqnak+xDE613oqVeReVSOfLme2fVlvu0iuHBrYBvsfoNfC4GbZ9O6PH/PkV8tJV3Z5iORCLRx7PxpsB3yS0PbI3KHZmtA3fVttonGxeUnpJMK8vx9s4rd04DdKt8yDNNgJ0G6eBsdoixmpVdRmrrSF+Hu5bMJ2u9KVNNa1MWA18NLJdHWVC1/cCsroor1O73rNSO1fyuqxfjbXLMdZOs16A/sR/kiRJkrrVh36MlPswwH6MGPsw7MOoyj6M6pp8Di218yVvHp6LT7XuGeeVwMc6Wl5Q83c5gdHj93cV0jsjkt5vV8zjgPeuizsgk/64NsEBxJ9JXs/09mlW9qXdOuuY1Mvo5XCMNUfylfvR3WZnZicxnO+bCRfEz5lc4e9LuNCy295IaNAsAv/C+BsFEEYWyl+4XT24uQnDbwoPlnEPoK4i/uDpe5rP6lh7A1fm8nM7odKcZhc2jqByVy6Nd9eYxy0YvSl0PuEt9Fm8i9Fj/qga8wfjRyU6idmmb45N6f3hGvL11Ei6h9WQ7iw+mNvvoIy4AjhkyrZfZTTfL20on0+J7OvzE/5+S8JNkiOB17MxQMoul9HcyAH50c0urzHth2bSPZPhhvI0p+by9dc15OfluTSLjJryosx2d1M+yPgIo79vbPk/wug5TTRsZ3FdLj91l8HfzqX/K8L07LPIBwCLhNEC65RaGZxyvRUr86oue9WUN0ivHGIpD2tzaV/N7EHjCuC83Pb3r5CfLur2VMuBfDxyE6GtcTvwrAnbbUmIP9puG42T/Q4pvyTYp+NtnNZOnAZp13mQXhthoMs4DYzVjNWq6zJW+xqjv+sFBdPoSl/aVEXKhFMieapaJqRwL2Cgi/I6tes9K7VzJa/L+tVYuzhj7XTrBehX/CdJkiSpG33ox0i9DwPsx4ixD6MZ9mHMpuo95j73YWQ1+RxaaudL3jw8F59q3TNOrH+hreWkmr/L+yL7+KsK6eVf+FwEnlkxj+C967Kel0l/Ut2Tb+sMlq/NuJ8dCDOSDsqZOmd6Tb2MXg7HWHNiO0ZPwEd0mqPZ/Q+jeb8OuO8M2w5GBMoutxJGIZjWyNglsu1ni2e/NpsQArx8nvIPoK4ivQdPNwHOiuSpyIi7b4tsvwg8t8Z8fjKX9u0Ueys7++b4YPlgjfm7XyT9ReDrbJyafpqDItvfQfWHmd6SS/Nuwpv+bYiNUnEzsz2s8dzItm9oJpvR0TnKLNcTpil+IfXPkpZ1Zm6/X60x7cFNkg3AgQW3fVkuX2dUzMsCcEkuzd8ssH12VLMfVMjH1oyOKjdtuYAwvfZDK+y3iNWRPNRZBv9TLu0NzHZjf2BrQrmdTeOKGvOXYhmccr1VV5k3WK6uKV8DKZVDA5/OpbuB2WY1yHp9ZvtbmP3cjOmibk+1HIjFI+sII3tOM4hH2mwbjZPNf8ovCfbteBunxcvtOtsIkHadl2IbYaDLOA2M1ZpirDabKrHalsRHUv1YwXS60qc21S3MViZkO2LqKBNSuRcw0EV5ndL1npfSuRLTZf1qrF2csXa69QL0L/6TJEmS1K6+9GOk3IcB9mOMYx9GM+zDmM0892EMNP0cWkrnS8xyfy4+5bpnnOX0kuBHI/uoUk+dHEnv9yrmEbx3XdZ7MnmaNIPtzsRnEl4EjphhP0dl/v7bFfIbk3oZvRyOsebEfoyefH2YknJT4E5G8/6cGbePPax5C7NPYZ7f9ydnzXhDVgJfYPQ7DR5AXUV6D54CvJrRPBUZOQXgkZE0FoH9a8pjbNSdPy+YxgKjhf25NeUPwugD+TzeRHyWkkl+GUnnYRXz9vVcenU8IDWLlcSD3jUzbv+bkW2Pqz2XQf4YlVkuJQQELyRMAd+UWNn7phrTfxTwxxS7cTuQvw7GTeU8q0MYPc6zjuYGcK/Mdh+pmJdtgI9H8jPLcj6hMbpNxTxM8ozIfpssg/+hRDr/HkmnrlkXUyuDU6+36ijzssupNeVrIKVyCOBpjH7nj5ZI58mZ7f+jYp7arttTLQfGxSOvm3H7twCfAt5ZIQ91yeY/1ZcE+3q8jdOaayNA+nVeam2ErK7iNDBWa4qx2uyqxGpHRva9CLygYDpd6Fub6sUzbn9EZNsqZUJK9wKgm/I6pes9K7VzJabL+tVYuxhj7XTrBehv/CdJkiSpPX3ox0i9DwPsx4ixD6MZ9mHMbl77MLKafA4N0jpf8ubhufiU655xltNLgp+L7GPW+64xX4qk96qKefTedXnfyeRp2kuL2UEQs8uZTJ+17rWZv39XhfzGpFxGw/I4xpWs7DoDmtkukXXXtp6L4g5k9C3qHzJ5yvSs2IgB72P2h2Lz5/hNM27XlPVsHC3jGZn1BwGnE4K4++a2eQ/wZ81nbax7Eyq8rHuANxZMJ1aI30w906RvxWgj61rgAwXTGTRkt8usm3Xa41kcGll3IsWv5YuBvXLrDiFUSGXl89bWTZsDGZ0e/VzCCBOzWIysu6FSjsY7JLLvSfnchHAu7QI8mDAK0J6EURBeRrhZ9RHCzZS6y6YHMlr2nlVj+v+5tJSxW+5z/vcvKhY07kUYQWsWNwMHL/3/lRXzcivhobdPEEaz+40C296fEFQcB7wZ+PuKeYnJT33eZBm8DnhribQujax7FPC/JdLKS6kM7kO9FSvzBiOnzOoNhPMZ6q9XUiqHtgI+lFt3N+WugezxrXrM2qzbUy4HYvHIhYSYYhbHl9zvvOrr8TZOG1ZXGwH6Ueel1EbI6ypOA2M1Y7V+x2qPHLO+7LFpS9/aVP8L/L8Zt6+7TEjpXgB0U16ndL1npXauxHRZvxprz85YO+16Afob/0mSJElqRx/6MfrQhwH2Y8TYh2Efhn0Y3WvqObSBlM6XvHl4Lj7lumecE6j/Zb1ZXVJzeltG1t1TIb31kXVbVUjPe9flLbCx/oBQdkzyPuAVhLZA1kOBZzN5AI5sOV1nfQ5pl9HL5RhX4kuC/bFr7vN64MYuMlJQrKHwd8QDrZj8y5H3AB+ccdudGJ16uc5GaFmDB1BXAMdk1semW+36wVOAlzB8EwPgixR/c3tdZN0Pmf1cmGQNo5XGSYRpiKtaQWiU311DWvnr4W7KjVZ+XWRdldnH9mS0jGnrpk2sjPhbwhTEs9g5sq6J63wPRkdquZDZR6BaCTyO0Hh8+NK6LQmjpj2VMFLBxZVzuVE+CId2H3ia5EG5z1WnB4+NkPU+wkglt86w/TrgRxXzkPcdQqByMOGlwecQP1dj7k2oJ38beCZwV435yl9vTZbBXyLMuFRU7KbFvUqkE5NSGbyGtOutWJl3EfHvPkk22EqlDIL6y6EXM3q8vkgYDauo8wmj/wH8T4U8tV23ryHdciDW1ng/9bTtyjqO0c6goran+EirAKdRbuSuWaV4vGdlnLZRXW0ESL/Og7TaCFldxmlgrGas1u9YLVZ230a59lmb1tCvNtUH6K5MSOleQNfldRl1X+9ZqZ0reV3+XsbaxRhrp10vQL/jP0mSJEnN60M/xhrS76QbG/AAACAASURBVMMA+zFi7MOwD8M+jO419RxaHZq8Bw7z8Vx8qnXPJFXu/abmjsi6/O9eRGzb2D5mtQbvXZe1PxvroIuY/i7QHYRBNj4R+be3A//C+O+VPQ6p1OfQfBntMcaXBPsk3ygo2nHclXxBeych4J/V/XOf/53ZR0vIbwvw0wL7btJ6wksjnwd+Z8zfpPDg6Qrg5ZH1nyqRVuxN7zoKxAVC4Jv36ZJpxabs3px6Ggf5h8FPpdyMoLERHGKji8wq1iDq6qbNXcA/F9j+fpF1PymfnbGqHqP1hN/7NMID/dkHz1cB/0qYqaauF8Ly+b2C2cvOMvYnjF71a8COhBu9+ZE4Bh6T+1x1FJXYza7fAv6PMJvfJ6kW0FRx9tLyJ4RZBY8BngbsPcO2TyaMsv+cGvOTL4OaLIPL1BMQvwlQ142BVMrgPtRbddULbQZBXZVDK6jv9wS4hvLXT1abdXvq5UDsxuVnKqRXh98EnlQxjS0IoxUVdSPtviSYwvEuwjgtqKu86EOdB+m0EfK6jNNi+zdWq4exWjuxWuye4M9Ip3M6pm9tqq7LhJTuBXRdXg90eb1npXau5KV0H7Tsvo21izPWbuaeW9/jP0mSJEnN6UM/Rl/6MMB+jFn2ndo9qAH7MCazD2Oj1PswYpp4Dm2SVO6Bw3w8F59q3TMvbomsq/LOT2zb2D5m4b3rasr08XyScMwPzq3fB/gDwguQeTss/TuEFzEvKpDHMlIto5fTMS7ElwT7I/+SYJnKtgv5gva/mb1i2ZMw6kHWvxXY90GRdWcX2L5p64C/AI4GNs39268IwUbXHgXcN7fuJkKAWdTqyLo6AoPDCZVL1l3An5dIa1NGf4v1hJFaqrofoeLLKnMcYXSkLag2ilX+Ol0HnFshvSr7/m/C1POzekDu81U0c3Oirhtb6wg3Qh/PcAC0H/BHhIfO65DPbxNB+O7AHxIepN9nyt9OUmVacIBvAlczOjrZXsCHgXcRRin5AiGg7mI0kHsIswt+h9CQPAx4HmG2otiN4oFnE77D6TXkYTWjdWod58UjGS2Dy9YTEGbGyqvjN0upDO5DvVVHmbcLG6dg/xVwaaUcxaVQDj2SUIZn3USxNmsT2qzbUy8H8sfiDOCGCulpsuVwvI3T6ms79qHOS6mNkNdlnBbbv7FaPYzV2onVdo+s+1mN6Tehb22q71OsTHhg7nPVMiGlewFdltepXO9ZqZ0reSndBwVj7XGMtdOvF2B5xH+SJEmSmtGHfow+9GGA/Riz7ts+jHrYh2Efxqyaeg4tL5XzJW+5Pxefct0zL2Izmm5dIb3YS3dlXxL03nU1ZV5g2wC8FvhW5N/eCHyc0RkZDyG80AnNzfTahzK678dYc+DvCSfPYFnbaW5msylhhIRsvk8osP1Tc9suAg8tsP1HctteVmDbNqwmvP2c/46D5X8Ibxl36W2M5uuUkmm9KJJWvqFQxgmRdOtcfl5DHgGeFUk7NqrHLH4VSespFfL29VxabY3qtJIw4k7ZMgJCXus4P6c5hdFj/lsV0js1kt4ZFfM4ECt731RT2hB+t7cQbmbWcY1VnUkJ4EhCYDRtXzcSRiw5mjQGStgUeCFwAePz/LGa9vWMSNpNlcFVrsNzI+kdWzGPkFYZ3Id6K1bmHVUwjSdktj21hjxlpVQO1X0N1KXNuj3lcqBqPNKU2DXW1nJSg98r1eNdlHFaPW0E6Eedl1IbIa+rOA2M1fLpGauVdyTdxGp3RfZxYg3pNqlvbaqi5+7Z1PfdBo4kjXsBXZTXKV7vkO65ktVl/WqsPTtj7bTrBVg+8Z8kSZKkZvShH6MPfRhgP0aMfRjDi30Y5R2JfRhlNfUc2kCK58vAPDwXn3LdMy9i7ZS/rZDeGZH0Hl9j3rx3Pbu1bMxX0T6iWDtgXB1yXObf31Uyr+OkXEbD8jjGmiNfYPhk+0K32ZnJwVS7kN+S2/Yuik0znA/mTi6wbdOmPXg6WM5idESGNn0/kqfjSqb1vlw6N7PxDeoqvhfJY53L6TXkEUIFkU33Rsp9/x0jeVwEDqyQt6tyaX2kQlpFPITR71GkjNiM0aC5qcbclbn9bCA+gsWs8i9+D66JOsSO69E1pX0vwjWRT/8K4O2Emye7Mr6s/oPItpNm0itif+C0SPrjlssJs/rlR3PrwhbAPxLPZ10j/byD0fOtqTK4bD2xgtEbuYvAo6tnM6kyuA/1Vr7MW6T4CzF7EqaGfwxwQA15GkitHKrzGqhTm3V7yuVA1XikKQ8l1M1Fl+z3uKFkGrFR5eqS6vEuwjitvjYC9KPOS6mNkNdVnAbGavnvbqxWTRex2vpIum+ukF4b+tamekKB7TcnjPjZRJmQwr2AtsvrlK/3lM+VgS7rV2Pt2Rlrp10vwPKI/yRJkiQ1pw/9GH3owwD7MWLswxi9JupgH8Zsy7z2YeQ19RwapH2+wHw8F59y3TMvXsTocftshfR+Hkmv7Iu93rsub4EwG90gX0X7iB5IvA65A9g797efz/z7c8pneUTqZfRyOMaaM99h+GT7ULfZmclLqHYh50ebOavAtrFg7vgC2zdpFfALRo/N+wgjjuTX/4BuHkBdYPRt+kWKv1U98B+5dNZWzyILxBsIR9SQdt2+xXAe/71kOo9l9PveQvnAc89Iei8rmVZRx0b2XaSMODSyfROjjOwR2c8FFdN8fyTNDdQTLFc9ruNsBvxnJO2PMPtU5v+Q2/byGvKV9/ClPN3AaF5jy1mE37hrC4wG8YvAhTWln7+htbaGNMeVwWWDtAMjad0D7FQ5p+mUwX2ot2JlXl3nYVWplUN1XwN1abNuT70cqBqPpCb7Pa7qOC8xfT/eqzBOq6uNAP2o8yCdNkJel3EaGKvl0zRWq0ebsdrtkfT+vELem9bHNtUuBbZ/aGT7usuEru4FtF1ep369p36udFm/GmvPzlg7/XoB+h//SZIkSWpOH/ox+tKHAfZjxNiHMbzYh1EP+zCKaeI5NOjH+TIPz8WnWvdM8xrCsx1dLC+u+bscxuix+06F9PLlzp3AJiXS8d51NQewMU9l+4jys4kOln/K/d2FmX/bt+S+8vpQRvf9GGsOnc/wifa2brMzkw9R7ULOjzbz4QLbxoK5FN4EX0X8wdP3Lv37Jox/ALWOlySK2CuSj0Vg9xJprSQ07rLpvKeGPO4+Jo+pVOhZ1xP/zYt6G6Pf92sV8hWbvvzQCukV8cHcfouWEb/PaN6beNnrKZH9fK5iml+MpHl1xTQHqh7XcfIjxCwSZr8r4ke57Zuc4XVz4BjgS4wGx/nlPIqNyNOU7PTT2fK/Dtfl0m2yDC57Hf5hJK0zqmcTSKcM7kO9FSvzPt9pjjZKrRyq+xqoS5t1e+rlQNV4JDXZ75LiS4J9Pt6rME6rs40A/ajzIJ02Ql6XcRoYq+XTNFarVxux2kWRtF5bNeMN6lub6tKC2788kp+m2sxt3wtou7xO/XpP/Vzpsn411p6dsXb69QL0O/6TJEmS1Kw+9GP0pQ8D7MeIsQ9jeLEPo172YcymiefQoB/nyzw8F59q3TPNKZH9tbWcVPN32ZrwEnh2H5eUTGtXRvN7Tsm0vHddzfPYmK+yfUT3AW5l9LjdQ5gVGMLseYPzp+xMoDF9KKP7foxrs6LrDGhmO+c+39hJLorJB35FXnTYg1Axld0+FnT+sMD2TVhFGDHjvrn17wX+dOn/7yFME/zp3N8cQhidoc0HUPeJrLudMCVsUYcB2+TW1fHiS/5YQiiYU3to+n6MzjLys5JpxUZcOK1kWjB6rdwN/G+F9Krsu+g5kd/+appp0MXKk6rnb2yq7rpGD696XGP2AF6VW3dtZN0kWxCmYs6q6wW4mLuAfwGeTmi0vZLxI3I9EHh+wfTvAxy9tJSdej3vysi6i2tIdzWj9UdTZfAdlL8Ofyuy7l9LppWVUhnch3orVuYVGbWqKSmWQ7Hf8za6v7nQZt2eejnQRJ2o8fp6vFdhnJZV1+/WhzovpTZCXpdxWmz/xmr1MFYLmo7VIP6bdf1yySTLvU3VVpkA7ZxfWW2W13243lM/V1K6DwrG2uMYa6dfL0B/4z9JkiRJzetDP0Yf+jDAfoxZ953aPahx+wH7MKD7e0/T2IcxXVPPofXlfFnuz8WnXPfMk9sYLSv2YvbZ2rIeEFn3oxLpgPeuq8rmrWy+rgLeFVm/Anjn0v8fwsaX1n5IeJGtqj6W0X07xrXyJcF+WCC8cZqV+kuCK4EH5dZVbcxU2f4K4i9ftOW+wOnEHzx9TW7dPcDvMvoA6sGEaZvbegB1q8i6m0um9djIujoegtg8si7FayN2PpcZ1WEVYWr7rLupNup0Pm/nLaXZtKplBISbgVW2n1XdN23uTZgmO+9bFdIcqOO4xryY0EDL+gjhJumsHkzIX1ZbDfAbgL8jBDx/BqyP/M0RBdN8IWFkm68Bj6+Uu43uFVn3nzWk29SDaLEy+KaSaW0LPDG3bgOjU3SXkVIZ3Id6q4kb1XVIsRxK9fdss25PuRxoqk5UXF+Pt3HaqLoeVk+1jMxKqY2Q11WcBsZqxmpBn2M1gO9G1sUeTqrqOEInwWA5j3Kdc8u9TdVVZ1xT51dWm+V16td7H86VLutXY+3ZpdqONNbeqK/xnyRJkqR29KEfI9XYM89+jFH2YYyyD6M59mHENfUcWh/Ol3l4Lj7lumfe5GddXCCc40UdPEPas/LedTV1vMAG8G7i1/5jgd9muK1T1/fvQxkN/T7GtcofaKVpB2CT3LoUA9OsAxmtDIo0BKuONpPSm+D3JcxMsSq3/j2E4CFmA+EBVBgebeQhhAdQH0OYsrtJ6yLr7iyZ1gtzn29h/AgrRcQql7J5hDD6SzaYPot6rrVYw7lMPl/I6JS0XySMaFRWV9fKAxltMBQpIzZj9MZHmzdtqozA8kTiUwufWiHNgQMZPa51HJfYtPSnFEzjoZF1bZfN6wll7zbAm3P/lh99bprseVHlGsw6JLLuGzWkmz+HmyyDbyuZ1jHAlrl1J1PPiGcplcF9qLdSnI0Z0iyH6rwG6tRm3Z5yOVA1HlExfTzexmnNxWnQ3zpv3uM0MFYzVgv6HKtBOAYn5NbFHp6oYnfgeIY71I+nXFuob22qIudHm2XCOHWfX1ltltepX+99OFe6rF+NtWdnrJ12vQD9jP8kSZIktacP/Rh96MMA+zFi7MMYZR9G8+a9DyOvqefQ+nC+zMNz8SnXPdO8AXh/g+lPclkDaf4L8Ke5dY8Cvlcwnd/Ifb6D8s+keu+6vAWGX9is0ia4jVCmfzTybycyXCbXVU70oYzu+zHWHLofYRrK7BKbhjclxzKa5/sU2P6U3LZFg7m7ctu/qcD2dbovcDGjxyI2DWnMCuCTke1/RHzGqTo9PLLfMm/8Py6Sztp6ssiqSNrXVEjvy5l0fkl81IMyvsVoPn+7YBpbE75bNo0NjI5uVMQekXz9foX0iqhaRhwa2f6pNecR4seo6ktLZ0TSPJf4jZyiYsd1t4ppLhACvXy6sdHfJjk5t33ZKcYHXgN8gjDTT1EPZvT7FA0QL8hs++ISecjblNFrvOy07nmn5dJdW1O6qxk9jmXK4AXCNZAv3/KjCZWVUhm8KpKXlOqtJsq8OqRaDsWugStKpnUCcO3ScilhFMAy2q7bUy4HqrY1UpT9Lld1nJe8vh3v+2Kc1mScBunXeZBWGyGryzgNjNXyaRqrFdd1rDbwo0hadcUYK4B/y6X9/aX1ZfStTbVrge0Pi2xfpUxI5fyCdsvrVK/3rNTOlbwu61dj7WKMtdOuF6B/8Z8kSZKkdvWhH2NVJO3U+jDAfowY+zCGF/swikvlHnOf+jDymngOLdXzJW8enotPte6ZRysI53D2OH6nYBqbE2Z0zqbxLxXy5L3r8g6gvjYBhPMjfwwHy/rM/+9Xw776Ukb3+RhrTj2M0ZMr9rZ+Sj5ItQv5ytz2Hy6w7SGMHq8nF9x/HfYGfh7Jy6wPng6MewD1HMp3as9iK8LoTvn9FtnnCsKb2Pk03lNjPn8ZSX+7Eun8JqGRMUjjJXVlELie0Tz+YcE03hxJ4yMV8/X4SJoPG/O39wOOXloeW3G/UL2M+H1G875XDfnKe0pkP1WmPH9GJL3FpfV1qHpcY3ZmNL93FUxjT8LIN9k0Tq6Yr8G1f16JbR/J6HcqctNve4bLi7eWyEPeKyJ5quu8uC6Xbp1l8GWM5rto4//ZkTQ+UGMeUyuDU6636i7z6pJqOQSj18B6wku/RexM6BgbpPE3FfLTRd2eajnQRJ3Ytez3Se0lwT4db+O0duI0SLvOg/TaCANdxmlgrNZUm9xYbTZVY7Ws2G/6oZJp5b01l+41VD/P+9KmKjoS6ssieapyrFI5v6Dd8jrV6z0rtXMlr8v61Vi7OGPtdOsF6Ff8J0mSJKl9fenHSL0PA+zHiLEPY3ixD6O4VO4x960PI6uJ59BSPV/y5uG5+FTrnnn1aoaP4wbCi3qzit0jHldnz8p71+U8j3raBFmxNll2uZF6BhPoSxnd52OsORU7we7XaY6my49c8tUC2+7O6PctMtrMSyPb715g+zqMe/D0nSXT6+oB1B9E9vmiAtufENl+kVAQ1+UfIuk/p2AaOxLeGh9sfzr1FdqxmUAXga8XSONhjN5AuxrYqWLeXhnJ17Zj/vZTmb85teJ+oVoZASFAym7/qxryFBM7h48rmda+hHzm0zuN+s63qsc1Znvi5/AuBdL4TGT74yvkKdvoLDNV+/G5vFxHsUDlt3Lbn0e133A/RgPsMyqmORAbvaXOMvjjkfSfUmD7+zB6XVxAGFGoDimWwSnXW3WWeXVKsRwaiF0DjymYxqcz215JtVnIuqjbUy0HmqgTu5b9Pqm9JNiX422cFrQRp0HadV6KbYSBLuM0MFbLLsZqxXUdq2UtEMqMbHp3AweVTG/gz3Np3gU8umKa0J82VdHOmo/ktq9SJqR0fkG75XWK13teSudKTJf1q7F2cbEy0Vg7jXoB+hP/SZIkSepOH/oxUu7DAPsxxrEPY+NiH0ZxKd1j7lsfxkBTz6GleL7ELPfn4lOue+bV5sAvGD6efz/jtguMtsmqzCI44L3rct5D9TZBTH7m2Ozy7Zr20Zcyus/HWHPq+YyeVClXmCuBOxjO75sKbH80o9+3yMyJJ+W2vbLAtnUYN73oiTWk+0+RdE+vmO4kfxDZ3/8Rpq6e5qUMj5SUXQ6oMY8PZHja1kXC9OibzLj9toQpmAfb/orw8HBdnsXo979rKc8PnWH7AwkPgWe3vwM4vIa8vSmX7i1j/m5bhqecfn7F/VYtIyBMtZ7d/hsV8zROfor3RcoFzoczOvX3IqEBX+UBlaw6jus4sRFiXj3jtq+NbLsIPKlCfvIvzz+gwLa7MDqd/Z8W3P+fMfp9XlUwjYEDGX1Z4VrgviXTy4uNPFVnGXwQcE8u/Vmvx22B/8pteyXhBmddUiyDU6636irzmpBaOTQQuwa+WGD712S220BoB1fRRd2eYjnQZJ3Ypez3Seklwb4cb+O0oK04DdKu81JsIwx0UZYPGKttXH6BsVoZXcdqeXszOqLtRZQbMXdrRsv7O4AnVMzjwHJtU+U7H6uUCamdX22X16ld71mpnSsxXdavxtrFGWunWS9Af+I/SZIkSd3qQz9Gyn0YYD9GjH0YG5dfYB9GGandY+5TH8ZAk8+hpXa+5M3Dc/Ep1z3z7LkMH9N1zPZ7vILR3+L+NeTHe9flrKVam2CcBzP6ewyWd9W4n9TLaOj/MdYcio2+MmtA2oUHM5rfIp2w+UDyLma7STDwP7ntTymwbV0eRQiAB3l4R03p5h9A/RXwoJrSjtmS0UbbIvAlxr+1vzMbR925HvhabtubqX9q1fwUwYvA+wnHa5KDgf/NbHMTYVruOp3I6Pf/26X/vwQ4bMx2C4QbXzfktl9PmGq5Dq/PpX078WOWfbv+IkJjqoqqZcRmhHIhu/3bKuZpnPwU74uEkcBmsZIw49ynid/APAdYVWNeqx7XSf4xkvZNwCMmbLMV8HeR7QbLfSrk5w25tL7L+FHJsvYi/tBZ0Tr1s4x+n3sI9deWM6axPWHksNty6VxPqEPq8te59Jsog/Oj/S8y/aXJfYEzc9v8inAjvk6plsGp1ltVyrympVYOZcWugZdO2WZzRs/PqjeQobu6PbVyoMk6sUvZ75PSS4J9Ot7GaRvbG23EaZBunZdqGwG6K8vBWG2wGKuV13WsFnM4cGsu7SuBZzJbubclYSTX/IMYVwJH1JC/rOXWpqq7TEjt/Gq7vE7tes9K7VyJ6bJ+NdYux1g7vXoB+hX/SZIkSepOX/oxUu3DAPsxYvpwD2rAPowgtXtPqd1jhn71YUCzz6Gldr7kzcNz8SnXPfMuf31cxuQXdJ/EaJ1XZObKabx3XcwCoTwr2iaY1ccZ/e6LFJ8le5LUy+jlcIxr1cQDYKrfm4A3Zz7fAmzXTVaingw8PfN5b0KgkvUVwsUHYVrsbGXz+wyPFPAbhGmLB24l3CQY+B+Gp8v9IMPTdj+X4cbT+YSKZeCr1DNl7jSHE4KBDxGm8a7LCuATwGMJbzr/X41pxxxFmCo1H9RcC3yOcHxvA3YFHgk8jvB73Aj8NvBOhgOOGxiewncDoYF4T4U8bk5o9D4mt/77hEbqt9k4kssuhErp+cAxme/186XP51TIR8y3GH4j/TuESuF8YAfC9z6NMNPI1cA2wP7A7zA6KswtS9ueWlPenkq4NrPeALyPMKLC3oSHKAZv+y8SjnHR6XGrlhH3Bt6d+bxNLj0IQfuFmc/vBs4rmM/XE479wCbAC3J/czfhBbFxVhLK590II6NsEfmbdcA/EGaju61gHrNeQxiVY2DacQX4G+DsEvtaTZh5Z5vc+nWEB+K/ShilagPhvD0S+D3Cb/czQnmRLefvAT6V+Xw18LoC+fky8LTcuosJ3+80wvTj65bW3xt4yNLfv5jh+uJUwjU1blSzcX4G7Dfm364jjGx+BuGcvIlw3mxDuKl9IOEFhccRyq6snxKuy58WzM/A9oRjkHUEwzcH82Vw/norY0vCsTwyt/7zhPr6bEJdvh0hGHs28BKGv/9/As8jBLB1SrUMTqHeqlLm/TdhhKo2pVYOZY27Bj5N6Mj6EeH82ZQwItNvE0Zr2mfp79YTyvQPlNx/Vlt1e17X5UDRtsbAO2m+LV2nxcz/X029N0uK6PvxNk5rL06DNOq8mFTbCNBuWW6sNsxYrf+x2jiHAScDu+fW/4xwz/FMQufm7Uv52InQIfUIQudR/iGBUwjH8Zqa8jfQtzZV22VCaudX223vlK731M+VmLZ+L2NtY21YPrE29D/+kyRJktSdPvRjpNqHAfZjQH/uQdmHMV5q955Su8c8kGofRtvPoaV2vszjc/Ep1z3zbiXhmdSnZtbdQhgY+zOEa2MFoXx/OeH8y77A/ybgLTXmx3vX48XKzi3Y+MJsrE3wY6rNSLcHoRzcKrd+f0LdVoeUyujleow1hz7A8Funv+w2OyNiMypNWn6Q2/7sgtufkNl2j4LbLhIaS23Zu6F0VwB7NpR2zIsYnYZ32m+8H6NvZseWsi/D5G1FeEBg3H7WLy359esIDwjvUFM+8vJT7L5naf1jCYHbrMf0uxSb4n4WmxFGasrvawOjo0isB44tuZ+qZcSTCm6/yGjQMYvrSuynyHIlIXhbXSJvMZeWyMO4F9tm8QSGZ96ZtmwgBCDbER7amfS3JxfMy8sJNz8mpXkH8Wt+kXCD4jWUHyzhgYQG4xVT8jDrci3wxxQbHSjm0SX2nb/eytqGEOSN28/dY9ZfS2jcNzVDcsplcNf1VpUy7y8r7ruslMqhvGnXQL5eHSw/Bn6z4r6z2qrbY7osB4q2NQbLbhX22YVs3rucSXA5HG/jtPbiNOi+zotJuY3QZllurBYWY7XxS99itUl2IoxwOG7fsyzfY/SBobr1qU3VdpmQ2vnVRds7les99XMlpq3fy1i7/HkVY6zd/T235RD/SZIkSerOi0i/HyPFPgywHwP6cw/KPozJUrr3lNo95qwU+zC6eA4tpfNlHp+LT7nuUbjX+9fEy4m7x6y/CfjdhvLjveu4MmVn/oW3Mt6WS/NG6q+vUimjl/Mx1pz5FMMnVd0jz1T1M4pdaB/ObLs54yuCccuTM9s/peC2i1QLWubZgYQ3/ycFIj8kjJwyGIFg/wl/O1g+XXM+j1zK551T9nsp4SWf/aOp1ON+kf1mG+MHAf9KqAhjebwH+A/C9PFNWU0Y8WNSJX0a46cKn0WVMgLg+ILbX10ij/sU3Me45XbCFNg/B/4L+Bjh5sAjqLcxsEuJvNXRIDmA0LCfVA7cDPwzYTQlCOX8uil5K/MQ1CaE0ZD+gfCixCzH4EzCiFp13aTdhDDKz5sII5vcNmM+FgmjNf0zYTSTLWvKz3EF9j/ueqvqMYRybdxDWouE8+cMwm+RH1mkTn0og6GbeqtqmfeEGvJQVkrlUMws18AGwrn1IsJIT3Vro26fpItyoGhbYxG4vIb9ti2b/y5fEpyX490XfYnTIJ1YrQ9thLbKcmM1Y7XlGqtNcgDwXqY/CDC41n4CnAgc2kLesvrQpuqiTEjt/Oqi7Z3C9d6HcyWm6d/LWLvaeTWJsXZ399yM/yRJkiRV1Zd+jCNJow8D7McY6MM9KPswZpPSvafU7jHnpdSH0dVzaKmcL/P2XHwf6h4FDyK8IDdpIIbrgPczOkNpE7x3PaxM2fnCGva7LcP1WtEZnGeVQhm93I9xLXx7sR++ATw+8/k/CNM2S124D/BIwmgVOxCmBP4FYbrrlDp/tyZMTbs7IcDdhDAqwpWEUTouaSEPzyJUhlkHEBonWbsTjul9CS8LXUeYoez7VJ/2fVb7Ag8HdiWMknUL4RidQThmUta2wK8TbvrtSAg4riHcrDqT0ABs256EYHRPwsgT7G4ToQAAIABJREFUWxJe2rsJuJDwgn1+6vC6LRBmJjqAcF1vu7QsEq6pmwmNxP9l+V9X2xLK4N2AnQnH4BrC9z+TMLpW0/pUBkMa9VafpFgOZeWvgRWEm+cXAWct/X/Tuq7bUygHpHnSlzgNuq/z+tRG6LosV/+k2EZKIVYbZ9VS3u5LOHYLhLjtJuDipbzd0lHeBmxTTZbK+dVFeZ3i9d4X1q/jpX5eGWtbL0iSJEnqr770Y3TdhwH2Y2j5SvHeUyr3mGNWkX4fRpNSPF+Wsz7VPQq2IrxMfgDhGtlA+A3OI9wvv6fl/HjvunuPJZSbEM6BUxrc17yW0W0eY82BMxh+m7XotMeSunEiw9fuTfhytiS1xTJYkiTF2EaQJEmSJEmSJEmpsh9DktQ26x5JWkZWTP8TJWCn3Oc2RkOVVF1+GvezCQ1oSVLzLIMlSVKMbQRJkiRJkiRJkpQq+zEkSW2z7pGkZcSXBPthx9znWzvJhaSiDsl9PquTXEjSfLIMliRJMbYRJEmSJEmSJElSquzHkCS1zbpHkpYRXxLsh+1yn2/pJBeSirgfoy/4/qCLjEjSHLIMliRJMbYRJEmSJEmSJElSquzHkCS1zbpHkpYZXxJM35bAprl1ziQopS8//TbYcJaktlgGS5KkGNsIkiRJkiRJkiQpVfZjSJLaZt0jScuMLwmmLz+LIDiToNQH+YbzzcAFXWREkuaQZbAkSYqxjSBJkiRJkiRJklJlP4YkqW3WPZK0zPiSYPq2j6xzJkEpffmG8w+BxS4yIklzyDJYkiTF2EaQJEmSJEmSJEmpsh9DktQ26x5JWmZWdp0BTeVMglL6DgZek1v3iNznvYBPZT7/FHhrk5mSpDlhGSxJkmJsI0iSJEmSJEmSpFTZjyFJapt1jyRJCTiK8EZ+dnlCpzmSlPc6Rq/TacuHO8mpJC0/lsGSJCnGNoIkSZIkSZIkSUqV/RiSpLZZ90jSHFjRdQY01faRdbe2ngtJk+Sn257FWbXnQpLmk2WwJEmKsY0gSZIkSZIkSZJSZT+GJKlt1j2SJCXgRYy+lf+QTnMkSZIkSZIkSZIkSZIkSZIkSZIkSUqCMwmmb7vIOmcSlCRJkiRJkiRJkiRJkiRJkiRJkiT5kmAPbB9Zd0vruZAkSZIkSZIkSZIkSZIkSZIkSZIkJceXBNPnTIKSJEmSJEmSJEmSJEmSJEmSJEmSpChfEkxf/iXBDcDtXWREkiRJkiRJkiRJkiRJkiRJkiRJkpQWXxJMX/4lwduAxS4yIkmSJEmSJEmSJEmSJEmSJEmSJElKiy8Jpm/b3Oc7OsmFJEmSJEmSJEmSJEmSJEmSJEmSJCk5viSYvq1zn31JUJIkSZIkSZIkSZIkSZIkSZIkSZIE+JJgH2yV++xLgpIkSZIkSZIkSZIkSZIkSZIkSZIkwJcE+8CZBCVJkiRJkiRJkiRJkiRJkiRJkiRJUb4kmL78TIJ3dpILSZIkSZIkSZIkSZIkSZIkSZIkSVJyfEkwffmXBJ1JUJIkSZIkSZIkSZIkSZIkSZIkSZIE+JJgH/iSoCRJkiRJkiRJkiRJkiRJkiRJkiQpypcE0+dLgpIkSZIkSZIkSZIkSZIkSZIkSZKkKF8STNvKpSXLlwQlSZIkSZIkSZIkSZIkSZIkSZIkScDoC2hKy9aRdb4kqGk2Bf4A+AJwBfBU4Frgu11mSsvKXwO7Tfj3m4BXt5QXpeOZwJOm/M07gJ+0kBdpufsbYPsJ/245LEnSfDJWU55xmiRJktQcYzDFGIdJ3bMfTU15E7DljH/7MeDCBvMyb2x3Kc82l9Q921ySJCVqoesMaKLdgctz6/4G+OMO8jIvDgGOBC4AvtZtVkp7GXAS8N/ArwP/D/gO4QaUVNVmwK2El1HHOR04qp3sKCEnA0+Z8je7Ar9qIS/L2fbA7xAGEvgScFW32ZlbmwAHAA8AdiT8LpsDtwA3A5cBP13672LN+94RuH7K31gOS5I0f4zVFGOc1g7jtLRtDjwQ2IfwMNnWhH6RG4EbCPffzyHEcpIkSbMyBtM4xmHtMA5LV9cxmP1oatKNTH4ZIuuxwLcazMs8sd2lGNtc7bDNlS7bXFJ/bAU8DLg/sBOwHrgGOA/4IXBPd1mTJHVhX8KD5dnlHZ3maHl7KaGyHRzrT3WbndK+yMbvcCLwC+CYLjOkZeVQRsul/PLOznKnLl3K5PPi0u6yNuQ6pp/Dsyx3E4K1Cwg3H99IeGmsSQ8GrmT4mG7T8D610Q7AsYTOnDuY7Ty5DVgLvB14IiHor+rRM+zXclhQX3lXZMkPcCJJao+xmmL6EqdBf2M147Q0rQZeB/wXcCfTz5sNhNH9PwM8jxD/SdI4xtuSwBhM4/UlDutrDAbGYSlKKQazH01NupHZy8fHdJTH5ch2l2Jsc9nmmke2uaR+OQj4NHA746+Ta4H3MnnGZEnSMvMgRiuEN3Wao+VrJWH2n/zxPrzLTJX0E8LLgVez8Xvs12mOtJztz+h18+xOc6RUnMnwefHlbrMDhNGT6rj5Nmk5FdizgbyvINy4ye/v6Q3sS8O2BN5AGF2r6vlxB/B14Lk15i92XlsOq43yLrZ8tY0vJ0maibGaYlKM06C/sZpxWnoeCXyN4YHgyizrgH8Hnk8YkVmSBoy3JY1jDKZxUozD+hqDgXFYavoQg9mPpjr5kmAabHcpxjZXvWxzpcU2l9QvK4C3Eq652HUYu5ZvJFybklSLlV1nQBPFZpu5o/VczIediI90cl/gey3npaqdgA8Spgv/NHAZIWiTmnBoZN0PWs+FYtYAqzKfLwE+3tK+VxJedM9K4bzYjlAuZj0O2Dm37hvA9ZHtVwDbArsCBxJeHst7AnA28CjCS9t1OQi4X2T9dTXuQ6MeQHgIK3/sz19afzahnr0Z2JRwfuwLHAY8E7hXbrstCDMK3gp8tqY8Wg4rZtbyrm6ee81bQ3f1u6R+sY2QrjV0U5anGqdBf2M147R07AZ8AHhGbv2NhAdlvgv8lHD+rAe2B+4NHEw4J44EFjLbrQSOWlreD3yCMHjM3Q3lX2lag23vvlhDe7+V8fbytAavd1VnDJauNdhfltfXGAyMw1LRpxjM8llafryu07UG731n2eZSVba5pP5ZCXweOCaz7lbCxD+fBi4mlO8PAl4BvGTp8/bApwj16Nvby64kqQu/xejb4n/caY6Wt/MYPtZ3El4S7JuTgK2X/v+VODqVmvVuRke0WJi4hdpyJcO/zcda3PdDGK2/ntDi/ou4itG87jDDdisJwdz5ke0XCTfhVtSYz9XAhtw+zqh5Hxp2BKOzB55DuFk2i82AE4iP/nNcjfl8B5bDmk2svNuDMFBGleWbmfSObu3bzK8u63dJ/WKslq6uyvI+xWnQj1jNOC0NzyA8BJH9HS4Gfo/ZR0PeD/gK8XNmEbgJy9B5ZNu7P7r+rYy3+6/rc0jLgzFYuuwvm00fYjAwDktB32Iw+9FUJ2cSTIPtrnR573s621yalW0uqZ8+yvC1cDlw/wl//2TCi7rZbY5tOI+SpI49ntGG2R92mqPl7QGEgGkRuAanR5dmsZbhMurbneZGA3swWn+8osX9HxvZ/y4t7n9WseNUdObVbYAfR9JZJLxkVqfjCUHheuBLpHlMl4t9gGsZ/j1PJj4y2zRvYPTceHQ92QTgNCyHNV2svLuoprSvyKS5W01pKq7r+l1Sv6zFNkKKuizL+xKnQb9iNeO07iwAf8Xo7/t3wFYl03xrJL1F4PSqmVXv2Pbuj65/K+Pt/uv6HNLysRZjsBR1fY33JQ7rUwwGxmFd6WsMZj+a6uRLgmlYi9d1irz3PZ1tLs3CNpfUX89i+DpYDzx8hu3+KLfd7cABDeVRkpSApzDaMHtppzmaD9vjKBbSLBYII8pky6h3dZojDcTqj4e2uP8P5vZ9aYv7LiJ2nD5fIp1jIuksAm+rJ5tDNge2aCBdDfsuw7/ljyl/s21T4OpcejvWkMeB67Ac1nR1lXd5u2XSu7yG9DRZ1/W76vOczPLUjvOi5clYLV1dluV9idOgf7GacVr7VgD/yPDveg/wkhrS/hqj58y7a0hX/WLbuz+6/q2Mt/uv63NIy4MxWLq6vsb7Eof1LQYD47C29TkGsx9NdfIlwe7Z7kqX976ns82laWxzSf21GWG2z+x18KEZt11g4wRHg+WLDeRR0hxx+ue0bRZZt671XMyfwc0ESZPtB2yXW/eDLjKiEYfmPq8Dzm1x/4flPqd6XuTzCXBWiXS+M2b9ziXSmuYu4M4G0tVGRwOH59b9BWGUnjLWAd/IfL4IuKFkWnn7ADvl1qV6valbsfKujnMlm67nXvO6rt9Vn89mlg93nBctT8Zq6eqyLO9LnAb9i9WM09p3EvDi3Lo/Aj5WQ9pvjKwrc/6p32x790fXv5Xxdv91fQ5peTAGS1fX13hf4rC+xWBgHNa2vsZg9qNJy4/trnR573s621yaxjaX1F8vA1ZlPhd5WXYReGdu3dNxIDNJFfiSYNo2j6zzJUHNYjvgSODAjvOxXLwKuHcD6a4Gjm0g3bbkb/CAAV4q8jeWfky4cdOGlcCDcutSPS/qOodvGbPedlY/vTL3+VrglIppXpT5/zqvB8thzaqpcyWbrude87qs36VUGavF2UZIV1dleZ/iNDBW02R/Abw0t+6TzD4i6zTnEEZszUr5elEzbHv3R9e/lfF2/3V9Dml5MAZLl/1lszEG0yR9jsEsn6Xlx+s6Xd77ns42lyaxzSVNdziwSdeZiFgAXpdb913g5wXS+DJwa27dn1fJlCQpXS9mdIrnZ3aaI/XFYHr673adkWXgRMKxPJd6Hz5dDVyylPaf1Jhum97DcPl0I6HBq+5dxfBv89EW9/0QRuuuJ7a4/yLyx2kR2KFEOntF0lkE/rKebKpFWxNGQcv+jl+sId3XZ9I7rob0Bt6B5bBmEyvvdqwh3cOBFywtq2tIT5N1Wb+rXtnf8aqO89JnxmrjGaulq6uyvE9xGhirabwjgPUM/57nA1vVvJ+/zaR/E5ah88i2d390/VsZb/df1+eQlgdjsHTZXzYbYzCN0/cYzH401e1G4uVcbHlMR3lc7mx3pct739PZ5tI4trmk6TYjvHx+KfBmYO9OczPscEbL5DIv+H05l8bt1F8OSJIS8DJGK46ndZoj9cUfE86XK7vOSM+9k+Hrr66HT7MPnQ6W19aQbtvWMvwdvt1pbjSwB6N1x8tb3P+xkf3v2uL+ZxU7TheWTOtxkbQWgWdVz6Za9lhGf8f31pDuo4A3Li3715DewGlYDmu6WHl30cQtlKKu63fVK/s7+pJgOcZqk63FNkKKuizL+xKngbGaxtua0TJ6EXhyA/t6dSb90xtIX2mz7d0fXf9Wxtv91/U5pOVjLcZgKer6Gu9LHGYMpnGWQwxmP5rq5kuC3VuL13WKvPc9nW0ujWObS5rNoQyfZ/cAXye8U7Gyw3wBvJvRa/jXS6Tzp5F0nl5THiXNma4LRk22WWTdutZz0YztgSOBfQnf81rgR4RppjfMsP1+wCOB3QnH5FfAfwMXNJDXum0J/Abwa8C2hJtIlwP/RTgOddhn6b/3IYwkcHtN6c5iM8LICAcB2wE3Az8Gvg/cMcP2uxIaSKuBTYFrgPOAMwmNnrasIBy/rIMIQcxRlP+tVhNuWuVHstitZHp12prw2+1F+B3WAVcAZwE/y/3tAnBwbl2b08RvBTycUAbsysZz5RrCuXJ1i3mZZHtCPvcljP50O+GYnk1z5dWhkXVt/jb5/V/O6O+xAngo8GDCw9x3EMrx7wEXN53BJXUep9gN/g30+6bHNoR66gBgJ0J9dTtwPfALwnU2S5lelwVC+flgQnm5HaFOuIFws+xswjlU1X6RdXWMyPOfS0vdDsl9buta35RwDe8N7Ew4X64jXOtnA79sKR+z6KIcjumy3oqVd2c1uL86pFYGZeXP/0F790ZCe+k84LYG9tt1/Z7VlzJgP8Jx2wPYAriV8DtdQnhw9zLajS+WuzaPt7FaurFaX+I0mL9YrS9xGhirTZNSO6mtOG3geEbL6O8BX6txHwM3Zv6/qbZzH9pUXZcLbZ9jA6m0vVO63qfp6lzp+rcy3q5XF/F21+dQXh/qhnmJtfsSg0F/4rB5i8Fi+081DjMGmyy1urPNNvJyiMHa7kdL7XyZZrk82zNJKv2EGq8v7a6+tLlg/tpdtrkC21z1ss1VjG2uyWxz1SNfjq4gzBz7RMJkOh8HPka7fZoD+Zd6F4FzSqRz9pi0v1QiLUlSwl7D6Fvhj+00R6NiU7bnl5Myf78d8D5CR17sb39BmEFxxZj9PZzwkP24fZ0LPKGhvFfdfhvC1No3jfnbDcA3ltKt6pRMug8smcYukTzml5Mzf78NcALhgczY315HmIFh3G97MPBVRqdOHyy/BI4p+V3KWgF8MpKXsrNUxGalWCRcE136deArhMb5uN/6BwyXP/tH/uY5DedzE+AFhNFn7pyQ1w2EBvMrlrapw3ET9jdYnpv5+8cB32T8+bwInAE8vqW8TVvqnB3ljFza2XJia+ANhCBw0nF5eI35GeeEyL7LHIdN2fjgQ3b5aoW8FS1/67BAeIH9RDa+sD9p/3cDpxJmyGvSvoQy8vIp+Vkk3FR4L+VG4hl4cyTdnzK+7urSatothxcI9fApwC2RfWeXHwGvot4BSVIuh8fpst7KipV3xxVM4/9j77zDLSmqvf1OgIEhCUgOzgCCV5IIguEimAMgylXAyJgx32vAe9EPMIsKxquICRVUFBUQMSCKGBBECaIoQUByGJghDRPP98fa+57e1bX37lDdXXXO732efuD07Kpau3f1qvWr7lqV9UtNPOSK1Qdl7XsBNhE/rv+v7H2HujuHxja+d+UDyo6Jq2H30pVjyizFn5SnLbK2xLSTYErXW1pt8uhaq3U93sUcI8Tky1PRaRCvVutCp0GccVLbOg3sBawlnvqfVrPeYcwF5vWOdQLWm0pM1bVfaLuPxeKvY7jfY+8rsfxWfaS3w9jXpt6OrQ9BN2NDStqvbVLQYKDnZXVsa/MeT0WHxarBQM/LsrQdI08FDdbGc7RY+st0eLcnlvFHOwmGI4W4S3Pf9Wwbd0y3uW/FXIPEMoa6KOYqj2Ku4feKYq6wY8+xBWxbBfwMeCHmL9tgLvk+eUPFujYh/50uDWCjEEKIyDiSvMPft0uDPJRZKDcP+HuBz09gEwFznLbexOhgInu8O7DtdcvPZ/zDs/6xFAtS6vA3JhdiVt16/LkFbD2q99k9sAyhRb7fV512ZmCLMlYWLP/yit+nKjOBkz12lH35dNhLp8eHNLYkGwPf89g0Koh+S6/sSzz/7tuBKxQHYQt1fHY9yHDxdzmwbYD2vzuk/uyxPZYJ5bQCn81e02NbsG3c8dSaNvSZTX7yIusnrilozxJM3DfJjz3tVrkOb/LUswLLQlaVMv43BK/CsugMa+sBbAJl2L9/kvCL6Ob06vW1uxJ7YWbUuHE51RIrvHdIfUdW/yqN8SLa88MHYFmofNdmKcN/i8uxTFghiNkP++h63Mri83dlJ5Wfkyl7dlDr4vRBWfZndP8fZdsq7EXHPSu0G9P43qUPKDMm7ohlYytybbrcGQLHlpgWCaZ2vaXVBv1NF1othvEu5hghFl+ekk6DeLVa2zoN4ouTutJpAJ/21HcdNq+YCqnEVF36ha76WAz+Opb7Pfa+EsNvlUV6ux5d6O3Y+lBXY0Nq2q8NUtFg0L0OkwYrRko6LFYNBnpeBt3FyFNBgzX9HC2m/jId3u2JZfzRIsH6pBJ3dR1zQTz9vqpt447pNvetmGuSmMbQPoq5qqOYa7gPUsw1eYR6N2sf4BRGL97vH7f32twuQLuj2MPT9q9r1OcmUFhCMwnnhRBCdMgx5AePulmXQ/NvmKDKHu5CvhOA9bHsGf1zy7CsJsOyJEwAX8q083Ln3+7HMiGMyqq53xjbt8ZeKMwe7g6HoxYJFv3uGzAoOldiAcgtwPIhti8FHj3G/mHMwAKFn/fqelvFeg5n8Lv5sursh01s3Z85dy/224zK9nRgr41ZDL7UuQrbiv1mhl+bxViWjTaZBXzLY0vRl0/nYbtkuuW7fOl0lyE2LcS23n478Argv7DAuv8br8L80HHkf5cmBOoawBectpYBX8QWTc/tfW41bOHuceT7zg3Y/V6HjzDoK7L+rN/vt8QW6E5gvuB84GjgNcDrenUMm4B6a0DbXIH4V/K+zj3Wq9F+Ft/i6f2wiZCsf12C+Ym7PZ/P2t0kt3nafFjJOnbHvzPu+2va9lwGf59zPG2MG+PKcIlT92JMJD8eWDPzuQ16tp3usedjAe1ZH/iDU/9vMZ80j8nJmxmYkH8HNna4Nr2uQtu+Bwv94yQsY08sfJTm/fAc4LPkr8Xp2IORDXufm41N8h3FYEwwgcU8OwSwJWY/nCWWcSuLz9+tX7KO7ALaDwS0DeLzQX2G9f8zsYQeGzF5z22Avdj3c8/nq8Z8MYzvMfiAoppkHwZ3bF+JjQ034p88P7GGTSHI2hLTIsEUr7e0WjdaLabxLuYYIQZfDmnpNIhXq7Wt0yCuOKlLnbYWg+NO/3hfpW/SPinFVF36hS77WAz+Opb7Pfa+EsNvlUV6uxpd6u1Y+lDXY0OK2q9JUtBgEI8OkwYrRko6LFYNBnpe1lWMnLoG69P0c7SY+st0eLcnlvFHiwTrkULcFUvMBfH0+yK2ae57PIq5JolpDAXFXHVRzKWYq4t3szbA4oUiG/esAn6J7XC5eqD2sxzmafM7Neq7zlNfk8mohBBCdMCHyTv7KrtQtM1NDNp8ApMv7f0ZC8ZmZz6/JfZdfQ+U9gK2YTJoOgnYNVN2BrYS3/eA8FrKZ4Hw2V63/Ld7/38NttXyWpnPz8WyafzTY/9PSrbdZ7Ne+fdgQdinKtbj8lryNj4XW6j5ACY4s9mQZmFZc6/ylOtnxP3f3t//BBYwKH7XAd6Mf0v1VwT6TmWYxeRvmT3GvXw6j/heOt2D/ALbpZjIXGNImS2BC5gUwuc55X/VgJ3rkBfhf2f8Atqnks8Q89PAtv3Cqf/PwF96/3/uCBtnYC97uP1hOWGC+S09db8+QL1FebWn/f0wH74Me/FhN6fMPGxC1SfS9mrIzi08bV1Tso6X4Z+s+Uw4M/+P13ja2TRQ3XMYvF9+iWXvG8cbHXtWEGbHuNnYPZSt+10Fym2FTYhky+1eof3NGT6pMoFN2JxAvh93gTsxG9oPrw38zmnjTsZnP9uF/L1xNeEnWmL0wzGOWz5/d22Fen6YKf/8QLZBfD6oz9rA78n3/2cWKPsh8tf8pTXt6WJ8j9UH+DTJs7HJ6P69sx+DDwQ2Ih/Htxkf+cjaEtMiQZdUrre0WrtaLcbxLkuMMQJ0q9VS0WmQllZrUqdBXHFS1zptAf6+uF2FutompZhqnF+YjyX1a8IvdN3HsnThr2O6311i6ytZup4Hld6uRkx6u6s+FOPYkIr2a4IUNBjErcOkwfykosNS0mCg52VtxcgL8PfDFDRYliafo8XWX1ymw7s9XY0/WiRYnRTirphjLlDc5UMxl2Kuuijmqo9iLsVcPpoee7I8GVvQ6Lsu7nEntsD/UQHbf5+nnc/VqO9CT33PqmmjEEKIyPgEeWf/mE4tKoa7UK6fzeFMBhcHuryF/Pf9BpPbEh8+ouxs/FlMym7LHnqRYP+7n89kNiEfmwO3OmVXYiKxLE/qlT8Ee+HxzAp1+DjBse9eTLD+k9GB23bkd1hchAWmE8APGD7hA5bxwf1du3ppcxaW5cG1Z9jLp/Pwv3R6XPOmDmVr8n3tQeyB7zg2ZjITzlKnjk8EtnMN8hN8V2JZQIrwcfLXfe+A9g3LLnUCxbb39m3N/sUAdh3oqXePAPUW5fNO230/cQvw2DFlzyRv+2sbsvN5nrZOHfH5NbEJr32BI5kUu9njJszvNoGbqe7mgHU/LlPvRQy+6DGOsx27PhLAnsOdOstk1jksU24Z1V+QOZH87+s7/oZlQmpiIqkICx17QvrhNbDJtWz9dwA7FizvTrhNYJkfQxKbH4513PL5u7rHVgHs6hObD6Jnw3lO3bdTfJfvmcAVTvm6E4xtj+8x+wBXkyzGYo0HgYNHlFuTwYf3bcZHPrLfIeZFgildb2m1drRarONdlthihD5darVUdBqkpdWa1GkQV5zUtU77Efnf9eoK9bRNSjFVGb9wlseuun6h6z6WpQt/HdP97hJbX8nS9Tyo9HZ5YtPbXfShWMeGlLRfSFLQYBC/DpMG85OKDktJg4GelxWlboycqgZzafI5Wmz9xWU6vNvT1fijRYLVSCHuij3mAsVdPhRzNYNirmIo5jIUcynmGkVTY4+P/u6C/V0Oxx3nYwuwR13rInzSU/eHa9TnLsycwDYiEkIIMYX4DHlnX/RBUZe4C+UmsBcf1xlTbib5bYYfwLb7PaVAu74t5D9Z0/a6iwQnsEBp1O4Ffd7pKfvKku0DvLxXdk8sM8cVFerw8UePfQuBRxQo28/slD3ux7JJjAsWN/aU/XZ584MxCxPqrk3uy6fziO+l01nAxR6bymTb/aCn/AS2S2ZIvunU/yDlMuXs4LHx84Fs29ZT9wTwY4rvXrqzp/wS6r/I9H6nzmVYVp228GUyuZdiL2u82FP2Pc2Y6c3gUuW4GzgD87tNbEff5yKn3VCLv2FywmsVsFPJsq937Lqwpi0zgBucOp9conw2Q92fatixFvkMgeOOq4FjsQmqNpjvsSGkH/6GU/cqij2k6bMW5rezddwS0L4Y/XCs41Yof9c/bg9gU5aYfFCfU5x6V1FsR4MsR2bK30f53c1d2h7fY/YBPk2ynGLJYfqapO34yEfW/pgXCaZ2vaXV/L47ZIwQ63jXJ8YYoU+XWi0VnQZpabUmdRrEEyd1rdPWxJ/99csV6mqb1GKq+ygKgxjmAAAgAElEQVTmF17iKVvHL3Tdx1y68Nex3O8+YuorLl3Pg0pvlyc2vd1FH4p1bEhN+4UgFQ0GceswabDhpKLDUtJgoOdlRakTI6eswbI0/Rwtpv7iY6q/29Pl+KNFguVJJe6KOeYCxV3DUMzVDIq5iqGYSzGXYq7xNDX2jGNviu8ueDfwaaqvzfiSp84648kZnvpeVaM+IYQQEeJmGpgg7Da3TeFbKFc0k+XxnrITFBfe1znlflnYaqOJRYJFB/ztPWU/VbJ9sF2NJoCNgK9iCy3rshrwkMe+QwuW972oeR/Ft6J32/5mUcMbYjbwPfLfqf/y6Tzie+kU4G3kbSqTAQfgCZ46JrD+GwpfBqX/LlnHDCzbrfv7hOBgj32LKbYYOMu/PPXsWdO2Hzv1hXg5qiiz8QurBQXLP9lT9ojgVhrudapy3IiNES9n/CL4Ovj879EB698b+E/KTcL3ce+Fa2ra8ljy17loZj6ADTPlTqxpy9rA1zz2FDmuBN7Vq6MpXuhpN5Qf9vngr1So51xPPaF2XYzND8c8boXwd9nj7AA2ZYnJBwE8n/x3/lKFeg7IlD8/gF1tju8x+4BhmuTdBcu/H5sI/lhNO0KQtT/WRYKpXm9ptXZjhFjGuz6xxQhZutJqKek0SEerNa3TIJ44qWudtq+n/Qksu2vMpBhTFU1Wt4+nbB2/0HUfc+nCX8dyv7vE1ldcupwH9bVf95DeLkZIvd12H4p1bEhV+9UlBQ0G8eswaTA/KemwVDQY6HlZWzHyvp62J4hfg7k0+RwN4uovLtPh3Z4uxx8tEixPCnFX7DEXKO7yoZirGRRzFUcxl2IuxVzFaGLsKcoGWB/6q8cG3/F7bByZW6KN73jqKTqv5uP7nvreWqM+IYQQEeJbYR4yiGoK30K5LQuWXeAp++cSbZ/ulP1XibLQzCLB+SXK3+uU/VHJ9gG+jmWVAPh/vXqKBo/D2I389/oTNslRhB96yr+/RPvu9tqfK1G2KYa9fPoX/C+dhtxKvQoPJz8htYJyma/AFp/6gv+ifWEcc7HMt9n676Rc4N3HFRgrA9l4LPlrcGSFen7tqefwmrbd5tQX4uWoovh2c72M4plj9vaUf214MwG41WlnFXDSiOObWJaWC8hnap7onfsUsF4Dtvqu634NtFMFd0L/ppr19TNAZY9dS5RfDbtejwE2qWlLn32A33jsKnLcCbwpkB0uH3XaCuWHfT54Gbagoiwnkb8mbwxgI8Tlh2Mft3z+bkMsjil6HJ0p/4EANoUitA+aS/56LQW2rlBX9qFS2Z3NfbQ1vsfuA3ya5GqazzLXBNnvEOsiwZSvt7RaOzFCTONdn5hiBJeutFpKOg3S0Wox6zQIGyd1rdP+x9P+BMUy8XZFijHV5RT3C74XqOr4ha77mEuXc2tVCK2LssTWV1y6/q2kt4sTq95usw/FPDakrP2qkoIGgzR0mDSYn5R0WCoaDOLWYVPpeVmKGsxHU8/RQtBkDA/T492eLscf30vuw462Xn6PmRTirhRiLlDc5UMxl2IuxVzdo5hLMVcRmhh7qrA35l+L7C64CPhf7P4eh2/nv3fWsNO3gLRs8gIhhGB21waIkfhEy6rWrajPDRQPsnyf+32JttxFgU2IoTLcjO1uWJQbGNwae90KbW6TafO6zLk6L5/u7jn3OSwAKcLGzt8rgc8XLLsB+S20ry5YtklWYNujzwQOypz3bW1+HPUCvxC8hnx/Oo3yWVKWe879meJ9YRwLgM2ccydgExx1mYk92F5Wsx73flhGtUmuhZ5zdXYe25L8pEObmVF9fuKzFB+3NvKca+Je34L8wulrKJ5NbDbwTOAoYK/euTWxyYUDgadSzu+PYw/PubYzow9jF+fvW2rW58t29kksc9/9nn9zWQ5cWtMGl19jkwS7YZnyD8XfV308HBsrnwW8CHv5KRTu/RbKDy8g74O/jy2oKMtiz7kNK9TjIyY/vIB4xy2fv7sW//cexW6Z/4/F/0B4H/RK8tfrNMonHQHbUfTlvf//Yx2jaHd8X0DcPsAXa3yK+rFdHY7AskzWYT3KZ80FOIdqu04UJcbrXRRptUmajBFiGe+yxBQjZOlSq6Wi0yAtrRazToOwcVLXOs3nux+gWozWFgtIL6b6DN35ha77WJau59aqEFoXZYmtr2Tp+reS3i5HjHq77T60gHjHhpS1X1VS0GCQhg6TBvOTig5LSYNB3DpsKj0vS1GD+WjqOVoImozhYXq829Pl+HMzsFXB+kP/timSQty1gPhjLlDc5UMxl2IuxVzdo5hrEMVcfkKPPVX5Te94K/AK4HXAo4d8dj0sKdcbsfHirhH1LvGcc3+fMvjK+toQQoiRhFgkuBrwOCzj40aY814I3A5cQnqBS0xMlUWCfy/x2QcCl+8imMjyt5Kfv8f5u4r92zApzrKLBMsstnRxA76HsImbojzK+ftcii9adMsC/KNE202yAlswcirwgiGfieGl05n4s2+cXKGuNTznQk0GzMAmMVxOqViXbwfNOdSfgHNfBD+b0UJgGL7MY3Wy8/rEZ5cPPZcC3y1RflvPuTL+vyh1r9MK7Dc/B3uhP/vi+TzgZ8DOhFsQ5tp7C83uOLQ9lhnr34D1sUn7OUM++3Tn7xtqtu2buHwKNpZ+kMlsPl1wSe/4L+Dfsd/9+RTLeH4AtsvvoQHtcf1QiHt9mA+uMlaAP4YJFZfF4odjH7dCjQvZepoeV7ryQTMJ91uCZRiteu+4tDW+p+ADfJPQ36pZZ12eTP3smWsAh1Qot4h2FwnGcL3LIK1mNBkjxDLeZYklRnDpUqulotMgLa3Wtk6D7uKkrnWab17wKuJ50cAlxZiqa7/QdR/L0vXcWp8u52ayxNZXsnT9W0lvFydWvd1mH4p9bEhd+5UlBQ0G6egwabBi7cc0hmZJSYOBnpe1FSOnpsGG0cRztFHEEsPD9Hi3p8vxp2iC/FU0P1cUOynEXanEXKC4q0jbirnCoJhLMVcZFHNNophrOKHHnrrcA3y6d/w7tljwRfjjjZsY/53v85yrszbHV9bXhhBCjKSqI5qBvWT1KmAfRj98uAz4KrbKfUXF9qYrvkWCqQWCUC57qi/7T5nyruApuoV8U5QNilxhUTajwBpYhqPre3/3/7tNyXpc3KD2DxQPPLbEsldk+XmJtnf2nLukRPmmWY5tAb8/tmg6yx2YaOyavclvR78Ymygoy3zPuVAC74mYmMuylGrbZa9G/vdYgX8hchm2xURmlirXEfw7hdbJRubep8uBy2vUV7f9PwD3lijvZma5jWYmmkJNUi7HJrWfzaCYfSTwZuyl8xC49jYxobI58CbsRfo648VfatrxUyzJhJtpbivgi8DHsQzb38MmR7rIZr0S213w19gDgz2Al2C7Ffkm/fscgn2HXwWwYT75cTVEv3gCeR9cdawA/27OIX6zmPxw7ONWCH+3MRbLgcU1N9awZxgx+KAnYP47y2LKxaxN0db4noIPcK/FheSTrIhwTIXrLa0WJkaIfbzrE1OM4NKlVktFp0FaWq0NnQZxxEld67TNPeeuCtxGSFKMqS6gnF/Y0fm7rl/ouo9l6dJfx3C/u8TWV7LENg8K0tvDiFVvt9mHYh8bpoL2K0MKGgzS0GHSYMXbj1WHpaTBQM/LoJ0YOTUN5qOp52gusfQXl6n+bk/X40/RRYK3o3ckU4i7Uoi5oPt+PwrNfY9HMVeeWMZQxVz1UMw1iGKu4YQee0LyN+B8bOHl4zz/XqRP+3YeXauGTb71OFokKIQoTZVFggcAHyH/gA8sEJrN4MKsXbEV168BXkr4wXYqM1V2EqwreEMI5q4osvV4Ft8iyTLMxxbx9jOd3IJNYNQJkFcjv/32+SXK+8RunfI3YwItFuZjQbo72QP2oP8c4BnYTh9d8QzPud9Srb+5E2QQTuA903NuDnBYoPpvpL4P9fXn8yrWtZ3n3D8r1gV52/5Ce4uoZpP3E78uWYdbvqmXLENmMrsT+57Pcc4fTJgJOJ//DXldZgNHAe/An7WnLHVtux+b1DkLv1heF3hl71jc+9x3sIm7rh6yXNw73o3ZfhT+exssDg6xSLCpbHzP8pz7LdWvrW+8uL5iXVli8sOxj1sh+kqTuxrE5IN8v2Wd/h+Stsb32H2Ab0wM4VOFn6lyvaXVwvju2Me7PjHFCC5dabWUdBqko9Wa1mkQV5zUtU5zH5RD+Iy/IUkxpjqvZB2h+3/XfSxLF/46pvs9S4x9JUuX86C+9kF6exix6u02+1DMY8NU0X5lSEGDQRo6TBrMT0o6LBUNBnpe5tJkjJyaBvPR9K5WsfWXLNPh3Z6ux5+bC9Zd9HNTmRTirhRiLui+349Cc9/jUcw1SWxjqGKueijmGkQx13BCjz11WRc4ELv/n4H/XYI+RfqNb4H6OhXsGlVWiwSFEI0yB/gstpNd9jgd28Z6w97nZmMZKo7CAqnsZ28HdmjV6rQ5hfz13qpTi4pxE4M2n1Ci7B7kv/P+Jcof4ylfhjq2hyh/llP+0pLl9+uVe37m3D8oF0S67Eb+mu5Xovz7nbJLKbdd9J+c8meUKNs08zGB5l4f97iYfGaNNrnAY9MRFev6pFPPvdjC1BD8nvHXss4R4uH2sU6di6j2/dcfYuNONWy7zanrxBp1leUx5L9LGT+xOuYbsuXfF9jGPrc67azCn325KP9L/ruXyU42Ct91LTMmjmJD7J5w678F+BCwL5Yta5i/fqOn7Kid9MqwPfbSftF7+2ZsV79Ror0t1sB20PbZGSpr00fJ97cQftjng6uOFTOx3ZHd+p5W38yo/HDs45br7yaAh5WsY0vg6b0jpI6LzQeF7P+haWt8j90H1NUkTfE4bGwue2S/xz0V6/BlCAxFrNe7DNJqzcYIMY13fWKKEVy60mop6TRIR6s1qdMgvjipT1c6bYWn7mNq1tkkKcZU7ktFo5iDvejVhF+IYS6gbX8d6/0OcfcV6HYeFKS3yxCr3m6zD8U8NkwF7VeWFDQYpKHDpMH8pKTDUtFgoOdlRe/tEDFyahrMR1PP0SDu/gLT492ersefQ4eUc4+Y3mvqihTirhRiLui+349Cc9/jUcxlxDyGKuaqhmIuxVxFaGLsqcJcbEH1D/DPrbnHJdjOwhsXqPswT/lv17D1n576fAkThBBiJEV3Elwb2yr2iZlzdwEvwQKkLCuAq7GB7HTgN0xuF7sxtghqR5rLGvIWbPfCLjgPODlgfVNlJ0HRHv0dA6/LnLuOekFV3awfdbIGrU7e9iaz1pdhHiZGtnbOfwrYCNsxqs/uwC+wB/73tGFchhmYMHG5uGJ97u/5ZywQrcswO/elfLanJnG/f190lWUPz7n7sUW9VdgSE79Z2rxX6vqJncmL3Sbs34K86L8Wy/hUFV+mu7WxPl333vBd16r3bpbVsRjt353zXwL+i2I7+Lq23YJNAIfgKixTz17Aq4EXMfpFq80x3/tyLNNPl5kZH8Js3hV4rPNvdbIEZWnCDw/zwVXvw0djCyazrCLMQslY/HDs49Ywf1d2t6ybekdIYvNBoft/SNoa31PwAU1nIqzKHwPUsRSbJ4mJWK93UeYhrQbNxgj7Esd4lyWWGMGlS62Wik6DtLRaUzoN4ouTsnSl05YBazrnHqpYV9NMh5hqF/Ivv4TyC13PBbTtr2O+3311Qzx9pet5UOnt4sSqt9vsQ7GPDalrv7KkoMEgHR0mDeYnFR2WkgYDPS9rM0ZOSYMNoyn/HHt/8dUPU+/dnq7Hn6Ix/HTfSTCFuCuVmAu67/fD0Nz3eBRzGbGPoYq5qqGYaxDFXH5Cjz1lmIMlvjsEOAD/jqFZrgROxRb4XVWinb96zm1eoryLO24sxcYOIYQIzhrALxlclXwHttCvCL5V+W8Pb+b/4e7E1uZRdte4cZzqaaPO4NEW2kmwevm6Own2syetmzn3Bewh4ZySdWXLZ20qK2zcrEFfLFF2d/K/ZwxZTOcB15O37fjev8/CFgy7//4n/NvFN8lWHjuq+pLZ2NbV2XqOC2Mmm3tsnCBsFpcQ3I3/Ny/LB8l/1x/VsOtAT30+QdoUn3faLusnXkfe/i1CGtjjeZ52vlOzztM8dd5es84+da/rMNxsPxPY7ndluNQp32Q2xDnYrtXfJ5/NzT2uoFx2paY4Av8YEIKFTr0h/PAwH1z1PnyTp64L65sJxOOHYx+3fP7u1E4tmiQ2HxS6/4ekrfE9BR9QV5PERva7hHwgEYqUr/c8pNXaiBFiGe+yxBIjuHSp1VLRaZCWVmtKp0F8cdIo2tJp13rqe1cdwxskxZjqxpLlD/fY1JRfaHsuoG1/Hfv9HnNf6XoeVHq7OLHq7Tb7UOxjQ8rarwopaDBIR4dJg/lJRYelpMFAz8v6tBEjp6TBhtHEczRIo79Mh3d7uh5/5nnK+Y73VLRrqpBC3JVKzAXd9/thaO57PIq5jBTG0CyKuYqhmEsxVxFCjz3jmI0tDDwJS+o2Lma7Btudcpcaba6FvZ+frfeGinVt4rHxshq2CSGmMb6d6lxOBJ6S+XsCeAX+1c8+vo5tz5rlnQXLTne0k6AoyzZYgJbdRv46LFvM/Ip1+rJCFGUL6mUN8k0e/LlE+SaYh+0a+gjn/PFMLoBeiW0jfYrzmcdiu1S0+fLpNp5zD2IZUsqyB5Z9KEuoRS/u9QTLGhLTS9PbYlugZymTNSTL0zzn3J15y+DeK8uwLDNtUcdP+MrfTjMvJDSRGdm3nfs1NevsU/e6+tgCeKtz7i7PuVGsQT5ZRJMZ4ZYCPwD+A5uUfwu2a7WPHRncHagIm2IJCfbH/3tW4VbPuesC1Duf/BgS4tr7fPASqt+HT/Gc+1nFurLE5IdjH7ea3OGmDjH6IN9v+QBxvBjX1viegg9oYkwUw0n1es9DWi1LUzFCTONdn5hiBJcutVoqOs3XFsSr1ZrykTHGSaNoWqf18f1mXS8uGcZ0iKna9Att9bE+bfrrFO73mPtKbPOgIL09jFj1dpt9KPaxIVXtV5UUNBikocOkwYq3H9MYOqodiFeDgZ6X9WkjRk5Jg/lo6jlaKv1lqr/bE8P4czP23uQ4qsQXU4kU4q4UYi6Io98PQ3Pf5dsBxVwQ5xiaRTHXeBRzVa9fMVe9scfHTOCp2GLL24CzsfcB1hvy+RuxRa17AtthyR0ur9H+A+Tv6a0Yv3Ohj0d7zpXdaEgIIYDxiwSfh22LnOVrwE9LtPEAcIFzbjNs224xGi0SFGXZBts1Icv1mX8ry2zyWRLqBqV1yt+Cf+FFWzwC+BX+l07f4ZxbiS2odl8+3Q04l/ZePp3rOXev51wRnuE5F+oFCN9Ol4sC1R0KX3+ukvVjHrCXc24Z9TJOu7ZdQfFt6OtS109Afmv5piZzQk/APRzYyXP+FzXq7BPiuvp4JTYhkuVEbMK7KLti9mVp6wWSe4DPYaL4ncAKz2f2KVnny7EsRT8Cnl3Lukk29Jz7TYB6m3oRzeeDF1esax3guc65VcA3KtaXJSY/HPu41cQDhxDE6INi/i3bGt9j9wFNjYnCT6rXW1otT1MxQiw+MktMMYJLV1otJZ0G6Wi1Jn1kjHFSUZrQaX1+5zlXZY5zHEdgD4/7xxWUf4A7HWKqrhaTNNnH+rTpr2O/32PvK13Og/rahzji5Rj7VayxZJt9KOaxIVXtV4cUNBjEe+9kkQbzk5IOS0WDgZ6XDaOpGDklDeajqedoKfSX6fBuTwzjz3LgzgKf6zoxRtekEHelEHNBHP1+GJr7Ho9irjTG0FEo5vKjmKt6/Yq56o09fWYATwI+g8Vd52K7xPre1wPr/58D9sbeJ3gn8McAdvRxd0ecgfXFsuxWoG4hhCiEOxhmmQuc4JxbDnygQjs3es7tTTPZQ95H3u62qLpF7DC0SFCUZT75RbzXZf6tLDuRnxgpE9DXzRoUUxbTR2C7Usxzzh/H8N1RV2Evn8Jg1pjHYIHp07Gt15tkuefcQxXrcheN38fwTDll8Ym5qnaCZfLJToxcTP0JPZ8AqmLjyzEhkOU0LDNVVbq8V3YkL9DL+InVyU9itTkBVyebznPJ/5ZgGWnqshP56xriuuznOXdWyToe5znXtn9egfnftYFjnH9zMwmOI9sv6tyHWR7rOfeTAPW6fTiUH/b54Acq1nUQsKZz7gya2bUFuvPDsY9bMe7GDHH6oJD9PzRtje+x+4C6mkSUI8XrLa3WnFaLfbzrE1OM4NKVVktJp0E6Wq0pnQZxxkllCanT+pyFzfdn8b0IU4fNgaMYfDniKMrHQynGVGX6R9t+wUcTfaxPm/469vs99r7S9TMD6e3ixKq32+xDMY8NKWq/uqSgwSANHSYN5iclHZaKBgM9LxtH6Bg5JQ3mo6nnaCn0l+nwbk8s489J+Hehy/KPkjZNNVKIu1KIuSCefu9Dc9/jUcyVxhhaBMVcgyjmGkQxl58mxp49gEOBg7Hd+kaxENsV9FQs2XCTay9+ALzdObc38PuS9fy78/cSwrxvKIQQA7wRmHCOb1es69Oeuv5fABunOmeQv27DVrrHxE0M2lxm0eYe5L/z/iXKH+MpX4Y6tocof5ZTvsxWwRv3yhyHLQDuH5tmzpfl1eSv56Ylyrvfp6woX+qUP7pE+ZA8Alts6V6LjxcsPxP4pqf8pTR/T+/labdKptpneuo5L4yJgL3Q69ZfJAPbMH6Yqedf+LOAleUX5G18Vsk61sK+V7aOVeSzVJVhC49dr6tRX1nq+ondPeUPDGwj+K9T3UVLF3rqvBz/pFxZfNd1s5p1zsBEu1uvL5PfKNz4pG4mxHdgD1OOr1B2V/Lf51Ml67g6U/aVFWxwWY38fV5mPB/FOU695wWqdz7561jFB8/A7gHXx7mZoaoSkx+e57EllnGrCX8Xglh9kK//31KxrvcBd/WOG7FsjlVpc3yP3QfUjTViJPtdbuvYFpfUrvcjkFZrUqvN89Qdy3iXJaYYIUuXWi0VnQZpabUmdBrEGSd1rdOyXOqpL5TGmAn83Kn7AvzJ+8aRYky1SYnyvnn7On4hpj7Wpr+O8X53ia2vZOl6HlR6uxwx6u22+1DMY0Nq2i8EKWgwSEOHSYP5SUWHpaTBQM/LihIyRk5Fg/lo4jlarP3FZTq82xPr+CPypBB3zfPUHVvMBfH2e819j0cxV7xjqGKu+ijmUsw1jpBjz87AhzAf6trlHouArwPPYfQmWqGZifW1rC2/LlnHHGzn5WwdPwhooxBCADbg/oO8A/Wt1C/CVzx1HVvfzCnPj8hft/U7tagYWiRYvXydRYKPJ//ds8cPS9oC8HmnjrJB861O+S+WKPtY8t/hgJLth2Br4J8eW4q+dNpn2Munl1HvBfJxzMWydLntlmlzJpbJyK2jysLTUfzL08a6Fep5MiYq+nW8JpB9d3vse1PJOo7x1HFiTbue7alzzyGf3RbzqfsDz6jZbp+6fuJ15O0fl+mlCs/ztFNn+/oXeuqb6J0PQd3r6mMj8vYuLVnHllgWo2wdZ9S0q3/vX1Gh7BPIf6cyE7jrMegvquyY7fIGj02h+sVCp96QftiNYSYoP9l2iKeOzwS0MTY/HOu4FdrfhSJWHwT5/r8CW/Bbho2wB5z9Oj5d06a2x/eYfUATY2LXZL9PbIsEU7re0mrtaLVYx7ssscUIfbrUaqnoNEhLqzXlI2OMk7rUaS6+3/QLNerL8gGn3jup19dTiqluKln+9R676lyrmPpYm/46xvvdJba+kqXreVDp7fLEpre76EOxjg0pab9QpKLBIH4dJg3mJxUdlpIGAz0vK0rIGDklDebSxHO0WPuLy3R4tyfW8UfkSSXuij3mgnj7vea+x6OYK94xVDFXfRRzKeYaxzGeOsqOPU8D/uapxz3uB74DPJ9wi/Sr8DbHrlVYArGi+Ob/ho2tQghRmSeSdzaLqL6y+jRPfSFewp7q+BYJPqxTi4qhRYLVy9dZJPgS8t89e1xW0hbIZ6A5s0TZzT02lMka9FpP+c1LlA/BsJdOP1axvq5ePv2Tp83DSpR/n6f8BNbnQuJbUH5oyTrWZzBryK8IkzFpW49tE8CPS9SxJ/mJ0NuBDWra9haPXesM+ezJmc+cXbPdPnX8BJjYzZa/I5BdLr5+fETFurbD7HTrO4cw/Q3qX1cf6+HvxxuXqONbnvJH1bApO8lT9qUzem1nbVlIuZdsnuKUv4J6v+EjyU+WXFizzj6+zOMh/fDXPPU/r0T5TcnfF1dj2aFCEKMfjnXcCunvQhKjD+rj6/9PL1nHKZmyt1J/B7K2x/eYfUATY2LXZL9PbIsEU7ne0mpGG1ot1vGuT4wxQp8utVoqOg3S0mpN+cjY4qSudZrLDMxvZOtchmWPrcN/O3UuxR461yGlmKrsyxEnOuXr+IXY+lib/jq2+91HTH3Fpet5UOnt8vj8Ypd6u4s+FOvY0LX2ewPwCedoI8N7ChoM4tZh0mDDSUWHpaTBQM/LihIyRk5Jg2Vp6jlajP3Fx1R/tyfm8Uf4SSHuijnmgrj7vea+x6OYK84xVDFXfRRzKeYaR6ixx/XX2eMhbNOcQ6j3bCAkc4DrGbTzfwuWnUE+dtIugkKIRvAFqWfVqO9yT32vrmnjdOBM8tdNOwmO5hhP+TKkvEjwveS/e/a4r6Qts4ElTh1Hlyi/v8eG3UuUP8Epe2uJsiGYid931d0FdSbwDU+9v6pZ7yje6Gnvb9gW5ON4LYMZr7LHDoHt3BHLJJxt4wJgVsHy62DbdPfL3oG9PByCg8l//6U9ex9XoPxO2Avg2fJLsEX5dTnaqXfYvb4Og1uSvzRA23X9BMDFTvmfBLDLh+tfJ6g2CfJE8tvDT2Air+6CkD4hruswfNl+3law7Ls8ZSeovtM05DPMPbpE2Y2xbFfZ8m8v2f47yX+ft5aso89O5Bcr3AU8omJ9Lr4sYiH98M7ASqf+ovfjOueZtHEAACAASURBVMBvnbK3YpPVoYjRD8c6boXyd00Qmw/q4+v/p5Uo/45MuVWU0y/DaHt8j9UHNDkmdkn2+8S0SDCV6y2tZrSl1WId7/rEGCP0aduX90lJp0E6Wq1pHxlTnNS1TvOxNfnsxNdSLfvxWuT9/RLgOQHsnMoxlfuAuo5fiK2Pte2vY7rfXWLrKy5dja19pLfLE5ve7qIPxTg2xKD9znfaf6CldlPQYBC3DpMG85OSDktFg4GelxWliRg5FQ2WpcnnaLH1F5fp8G5PzOOP8JNC3BVzzAVx9/uu4i7FXIq5FHMNRzGXYq4QxDT2uPPMy7DF5q+g2s6/bfBiBm1eTrHr9gby1+xRDdkohJjm/J68o6+ayWIm+YGxatA73Tid/HULFdw3iRYJVi9fZ5HgV3tl7vccS3v/tlGJ+nal3m/hTggspdhkT58/OuXrLFSuyt7YREbfho8Gqtd9+fQOYJdAdftYk3zwPQF8n+HZZjdiMhvH3eR3Nr2XcNmIsrhbsk8An8Ku2Sh2A/6SKbMY22I9FMeS//6f7f3/DZjv8jEDm8C8xym/AstkEoIjnbofxH+9jst85lrCZOWt6ydWZ9I/9Y8PBrDLx63kbS268H42tuPcKfgnoy8D5gW0te51HUV/rMgei4HHjygzF/icp1z/2LSGPe9x6vodwzPMZdkK/0tnRSfs+3yb/PdZiY1haxasYz0swcYDTj13Y+NIKD7i1N+EH3az/U8wftHkdsBFTpk7sIcqIYnVD8c4btXxd00Tmw/K4uv/rx1TZg75vhniJXjoZnyP0Qc0OSZ2Sfb7xLRIMKXrLa02GW+0odViHO/6xBojQHdaLSWdBulotaZ9ZExxUtc6bRhPxOY5s/XfCryIYn5vTSwrr/tSza3APoFshKkZU4X2C7H1sbb9dUz3u0tsfcWly3lQkN6uSkx6u6s+FNvYEIP2c/35lS21m4oGg3h1mDSYn9jH0CypaDDQ87KudVgqGqxPk8/RYusvLtPh3Z6Yxx/hJ5W4K9aYC+Lu95r7Ho9iLiO2MVQxV30Ucynm8hF67On76xXAub26U9n92e3HNzF6Ie1+5MemMjtMCiGEF9/gPAML3Ndwzj8dc7Zl2QkTRVlWYcLu7gr1jeMdmBDrgnOBrwWs7wfAC5xz/YwUMXECg/3lRQxu4XsVlmmnz+m9A0z8fDLzbxuSD5zOZXB772OwbChgguiwzL89BgvGsnzd+fv12KC6NfB+59/G2X4r8D+Zv+t8d3q2PyXz99OALTN/38PgltT/YvgW2Odh2U18W2y/DZvEeDy25bWPA4D/yPy9tWMbmO2Le/+/jMFg5HUMZnz4d2z76T73Y5M9ff7I4HbKn2fw2r2YwSD4SuyBaJ8zaWdL5Sdiou4L2HbsoZgJnAQ8A/vd/xawbh9PBX5OXpzeBXwHu74PAJsATwCeif0ei4BnAR9jUDi6fXMVFoyvrGnnHEzAPN05fwEmOH7JZFaejbE+/VLgICa/2z97f19W05Ysv2BwcfuvgUOx6/Yw7Hufg+0ycjuwNrA95sPd7D739cqeHci2Axn0K2CTGp/EFulvjb1A0c+sM4Fd319WaKuun3g48InM32s79YFNwFyT+fsTwBUl7TwSu/59ZgEvcz6zDFsgNozZWNaZzbBYxo2LwLK9fAXbja5OpuN3YBml+4y7rgCfBi6p0NZ8bOedtZ3zy7EX4s/ExthVWN/dF3gV9ttdhfmMrK9fCZyc+ft24N0l7Pkh8Hzn3HXY9zsHuLpnGz0bHtP7/CsZHDPOxu6rsrvmXgU8csi/LcQym1+I9cnFWL9ZG4tjd8IWKDwT811Z/oHdm/8oaU+f9bBrkGUfBid6XT/s3m9VWBO7lvs650/FxuxLsPF8XSzeOgR4DYPf/zfASxiM3UIQqx/uetyq4+/+QPmEFnWJzQdlGdb/T8EeSF6K9Z3VsIxdz8KyeW3T+9wKzJ9/pmL7Lm2O731i8AFlY40+H6P5eDokE5n/v52wDyfKkPr1llZrT6t1Pd6NItYYAdrz5anoNEhLq7Wp0yCuOKlrnTaKPYAzgM2d81dh844XYQ+qH+zZsgG2mOLx2Jyz+8LHWdh1DDnfnmJM1bZfiK2PtR17x3S/x95XXNr8raS3p6be7kJrQ/djQ4za71YGtfAp5O+xpkhBg0G8OkwazEhlDE1Jg4Gel8UUI/eJVYO1/Rwttv4yHd/tiXn8EcNJIe6KNeaCuPu95r4HUcw1nNjGUMVc5VDMpZirq7Fnc2xs/V6vnZSYjb1veGDm3H1Y0uNvYX14JuaHD8f6SXah/dHk1zUIIUQQNse/on6LivW9yVPXsEVKIfBt1d3WEfqh32meNnwLwLrGzWQx7jgmU3bLkmUnGMxGcHiF8v0g8jEVyv494HeH/BbQ445ROwv+CwsUfRzYK//iEeV9uymNOv7klL+kZPn3ZcpuUbLsuO8Smq0bqncmg4tCm+Yw/Du7jvqNH4ktHl885rNVF8L4mIs9EB7W1ore4Z5fjr0g/LCAtvRxt7M/rnf+GZgAL3pNf4ct5g3J6ljGLbetVeSzjKwAXl2jrbp+Yr+S5SfIC8giLKzQTpnjVkyIz69gm48bK9gwbGFbEZ7D4M47445VmEhdFxuHRn32jJK2HI5NZI2qcwn+e34Cm2x6B9WzUu0IfBy4ZYwNRY+7gP+kXKYnH0+r0LZ7v1VlbewFpWHtLBty/i5sMi3ULiEuMfvhLsetOv7u/9Votw4x+SCXcf3fHVf7x1+BJ9ds26XN8T1L1z6gbKzRPzar2W7bZG3vcifBqXC9pdXa02ox6jSIO0Zoy5enotMgLa3Wtk6DeOKkrnXaODbAMrEOa7/I8XvyL3+FJLWYqm2/EFsf6yL2juV+j72vuLT5W0lvV+9XPmLR211pbeh2bIhN+z3M09brG2prGIcRvwaDOHWYNJiRyhiakgYDPS+LKUbOEqMG6+I5Wkz9ZTq+2xPL+PMxbLeiIseoHWOmE4cRf9wVY8wF8fR7H5r7HkQx12hiGkMVc5VDMVe9766Ya/oyC9t103c/LxtyfjHwii6MFUJMH55A3vk8WKM+30K3Jlc5T6VFgt/1tNHVDgOj0CLBat8dwi0SXB3L0vC9If/e3+r6PUP+HSybRhlbvpgpO4fhDzCHHQdkyj+vZNkJ6r94NV3ZCcvOMUpQ/hnLgNPPULH9iM/2j1MasHXfnq0PjWn7RmyRz/beWuqzrafNrKjaGfgZJjp99q0Ezsd2Gm2K+VjmlmHXaBWWxWXYlu9FqeMnwHZCLVO+SiaYbUq2Mex4ELgDy/r2W+DL2ETP4wk72bNxBdsWBbBhB+yllFG+4F4sFnlMr8wcbKJ7lG1VXoKahWW2+gq2UKLINbgIy44WasJ9Fpax6WgsK/cDBe2YwDJvfRfLHrVmIHuOKNH+sPutLk/HfNuwl7QmsP5zIfZbuJm8QpKCH4b2x626/u45NduvQ0w+yEeR/r8K61eHYZnAmqCt8d1HVz6gbKwxAdwcqO02ydrf5SLB6XK9UyEVrbYvceg0SCNGaMOXp6DTIC2t1pVOg3jipBh02jh2AI5n/Esd/Xvt78CxwO4t2QfpxFRd+IXY+lgXsXcM93sKfcWljd9KertevxpFDHq7S60N3YwNsWm/FzhtLQc2arC9YaSiwSAeHSYNNkkKY2hKGgz0vAzii5FdYtJgXT1Hi6W/TLd3e2IafxYNacN3NJmcKDVSibv2JY6YC+Lq98PQ3LehmKsYsYyhoJirDIq5qn93xVwCYBdssemohAkLgU+R30lUCCFq4Qve9sW2gs1yG9WyBa6DBc/ZF6ZXYYP4Nd4S9TkLywLSBV/EFq2F4jvAIc65LbDdboTIsj2WIek4TJC4rIcJtq8SNvOpSJdNsUXhW2AC9n5sK+s/Et+Lv2thW69vjk1WzMIyZ9yKZVy5oeH2D8aEZ5YdMCGYZXPsmj4CG/cWYv76AmwRURtsB+wFbIJlO7sPuz4XYtdLCJd1gCdhE7jrY6L0Tmzi8SJswqVttsQmFrbEMj2tiS3aW4zFj5f1/r9JZmA7E+2A3dvr9I4J7L66F4uP/8LUv7fWwXzwZtjLOhNYH7kN6yP3tGBDSn4Yuh+3UiJGH5TF7f8zsZj6WuDi3v+3QZfjeww+QIjpRipaLYbxLqUYQVpNlCW2OCkGnTaKeZh9j8Cu3QxMty0GrsPsu68r41BMVYRY+lgX/jq2+z0VNLaOJvZ+FYPe7roPTeex4fvAQZm/v0OYbPdVSUWDQfc6TBpMTGViHDtjiZF9zCNuDdY0MfaXqUxM488i7P2rIjwD+EWgdqcKqcRdXcdcEFe/H4fiLlGGGMdQxVzxEmN/mcqkNPakxlxs0fcOWF9ehV2rK7C50JXdmSaEmKr4FgnugYmvLNdiAX1ZDgNOcs79kMGJ/9DsSjfZBgFuIr/TXB2+Rf6hyFa9doTI8mzgJ8BbgM8N+cwibLLiKW0ZJcQU4VgsM06fe7EJy4luzBFCiGmH/LAQQgghfChGEEIIIYQQIi12wl5i7O8Qsxx7tn9lZxaJMkiDCSGE6IKYxh8tEhRtEVO/F0IIMT3Q2COEEFOI2Z5zCz3nigrcLDOwLa+zTGADSZNc1nD9bbLKcy7k9uFi6rBN77+jshVdn/mcEKI4uzt/X4LEjxBCtIn8sBBCCCF8KEYQQgghhBAiHVYDvsLkAkGAD6AFgikhDSaEEKILNP6I6Yj6vRBCiLbR2COEEFOImZ5z15Hfwv3h2HanZTgY2+o4y+ewrcRFMXyLBH2/mRBFFwluiT2EE0IU57HO3xd3YoUQQkxf5IeFEEII4UMxghBCCCGEEGkwEzgJ2DNz7kzgw51YI6oiDSaEEKILNP6I6Yj6vRBCiLbR2COEEFOIYQvOzvGce3qJejcFPuucuwb4nxJ1CC0SFMXpLxK8fsRnrsf6z7yGbRFiKrEtsL5z7k9dGCKEENMU+WEhhBBC+FCMIIQQQgghRBrMAU4HXpI59zPgUGBlJxaJKkiDCSGE6AKNP2I6on4vhBCibTT2CCHEFGPYgrPjyS9Qe0PBOtcBTgM2ypy7DXgO8EAp64RvkeCM1q0QKTAfWATcO+Iz1/f+u82IzwghBnG3UQcJICGEaBP5YSGEEEL4UIwghBBCCCFEGiwFrsr8fQKwP7CkG3NERaTBhBBCdIHGHzEdUb8XQgjRNhp7hBBiGnEiMOEcbx1TZjvgIqfMHcCOzZk5pfky+d9gu04tEkKI6cWxDPrgxWixthBCtIn8sBBCCCF8KEYQQgghhBAiLY4Bnte1EaIy0mBCCCG6QOOPmI6o3wshhGgbjT1CCDGNWBP4FflFat8B9gbW7n1u3d7fnwMecj57PrBlq1ZPLXwLNbfv1CIhhJhe/IJBH/yrbs0RQohph/ywEEIIIXwoRhBCCCGEEEKI9pAGE0II0QUaf8R0RP1eCCFE22jsEUKIKcbsEf+2BDgA+ApwcOb8Ib0DYDmwmqfsQuDjwCeAlfXNnLas8Jyb2boVQggxPdgNeIdz7vHO31sBJ2f+/gfwgSaNEkKIaYT8sBBCCCF8KEYQQgghhBBCiPaQBhNCCNEFGn/EdET9XgghRNto7BFCCPF/PB34GbCU/M52/WMFcCHwTiZ3GRT1+DT567xjpxYJIcTU5d0MH+OGHV/sxFIhhJiayA8LIYQQwodiBCGEEEIIIYRoD2kwIYQQXaDxR0xH1O+FEEK0jcYeIYSYBozaSTDLL3rHOsATgc2AjTDnfydwG3ARcE8DNk5nlnnOrd66FUIIMT3YvUKZi4NbIYQQ0xf5YSGEEEL4UIwghBBCCCGEEO0hDSaEEKILNP6I6Yj6vRBCiLbR2COEEEJ0zIfIr8jfs1OLhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCRMPMrg0QI9FOgkIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYaiRYJx41skuFrrVgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhIgSLRKMm6Wec1okKIQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQAtAiwdjx7SS4eutWCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEiBItEowb3yJB7SQohBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBAC0CLB2NEiQSGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEPRIsG48S0SXL11K4QQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQkSJFgnGjXYSFEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIMRQtEoybpZ5zWiQohBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBAC0CLB2PHtJLh661YIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYSIEi0SjBvtJCiEEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEGIoWiQYN0s85+a0boUQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQogo0SLBuHnQc26N1q0QQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEIIIYQQQggRJVokGDe+RYJrtm6FEEIIIYQQQgghhBBCCCGEEEIIIYQQQgghhBBCCCGEEEKIKJndtQFiJFokKJpmNeCNwPeAW4ADgbuA33VplJhSfATYbMS/Lwbe1pItIg5eBOw35jMfBf7egi1CTHU+Daw34t/lg4UQQojpi7SacJFWE0IIIYQQojmkwYSLNJgQ3aPnaKJJjqb4O35fBq5p0JapgGIp4aJYSojuUSwlhBBCRMqMrg0QI1kXC5SyfBl4bQe2iKnJ64ETgD8ATwK+Dvwa62dC1GV14H5sMeowfgU8tR1zRCScATxvzGc2Ae5owZapzHrAC4C1gO8Dt3VrzrRlFrAD8Ghgfex3mQPcB9wL3AT8o/fficBtrw/cPeYz8sFCCCHE9ERaTfiQVmsHabV4mQPsCGyDvXS2Fvb8ZBFwD3AzcBmm5YQQQgghyiANJnxIg7WDNFjcdKnD9BxNNM0iRi+cyPIM4BcN2pI6iqWED8VS7aBYKl66ns9WLCVEceYCewKPAjYAVgB3AlcAfwZWdmeaEEKILpiFvTCePU7u1CIx1TiNyb51LHA9cFCXBokpxe7kfZh7fKwz60RX3MjoPnFjd6blWMj4PlzkWIYJu6uxicr3YgvHmmJX4FYGr+naDbYnBnkY8GrsQc4SivWRB4DzgA8Bz8UmB+rytALtygeLPqH8XZnj5la+mRBCCB/SasJHKlotVZ0G0moxMh94N/Bb4CHG95tVWGb/bwEvwfSfEEIMQ1pbCNFHGkz4kAaTBpuuxKLD9BxNNM0iivvIp3dkYyoolhI+FEsplpqOxBJHgWIpIYqwM3AK8CDD75O7gOMZvWOyEEKIKcgyBgeE73drjphi/B1bHHg7k33skZ1aJKYy25MPcg/p1CIRAxcx2Cd+2K05/8c2hJmoG3WcDWwZ2O6Z2ASP29Z/BG5H5FkTeA+Whatu31gC/Bh4cUD7fH1aPlhAO/7Od5zZxpcTQghRCGk14SNGrZaqTgNptdh4AvAjLDtrnf6yHDgXeCmWuVkIIfpIawshRiENJnxIg4VFGiw+Ytdheo4mQqNFgs2hWEr4UCwVFsVScRF7HAWKpYTIMhP4AHbP+e5D3728CLs3hRAiCLO7NkCM5UFs2+4+a3RliJiSbAB8Htta/BTgJkzgCdEEu3vO/al1K4SPBcC8zN83AF9rod3ZwC7OuVj6xLqYX8zyTGAj59xPgLs95WcC6wCbADthC8hcngNcAuyNLdoOwc7Atp7zCwPVL/w8GnsJy732V/bOX4KNsfcCq2F9YztgD+BFwIZOuTWwHQXvB74dyEb5YDGMov4uNOp/zbKAbsZ2IUSaKE6IlwVIq2VJVaeBtFosbAZ8Bnihc34R9kLN74B/YP1nBTYv/3BgN6xP7AvMyJSbDTy1d3wKOAlLHrOsIftFnCxAsXdKLKCd30tae+qyAN3zoj7SYPGyAGmwLNJgIgSp6DD5ZiHSQfdrvCxAsVQWxVKiLqnEUSDfLESf2cCpwEGZc/djm/mcAlyH+fddgDcAr+n9vR5wMjaOfqg9c4UQQnTFzQyuFv9lt+aIKcYJwFq9/38Lyk4lmuUT5LNfzBhZQrTFrQz+Nl9uqd3HkM+K8pyW2q7CbeTtfViBcrMx4Xelp/wENmE3M5CN84FVTv0XBqxf5NmH/O6Bl2GTakVYHXgf/ixBRwS086PIB4vi+PzdFsDaNY+fZurbv7VvMz3pamwXQqSJtFq8SKuNJwWdBtJqMfBC7GWJ7G9wHfAqimdNfiRwOv4+MwEsRv5zOqLYOy26/L2ktacGuudFCKTB4kUabDzSYKIMKekwPUcTodFOgs2hWCpeFEuNR7GUKEpKcRQolhKiz5cYvBduBh414vMHYAt1s2Ve3bCNQgghIuBqBp3/Bd2aI4QQlTmPQX+mRc9xsAX5SYA3tNT2qz1tb9xS22XxXaeyO6+uDfzVU88EttAsFEdh4nEF8H3ivaZTgW2Auxj8Lc/An8FtHO8h3y+eFsZMAM5BPlgUw+fvrg1U9y2ZOjcLVKfI0+XYLoRIk/NQnBAj0mrjSUmngbRaV8wAPkz+9/0cMLdinR/w1DcB/KqusSI5FHunRZe/l7T21ED3vAjFeUiDxYg02HikwURRUtRheo4mQqNFgs1xHrpfY0Sx1HgUS4kipBhHgWIpIQAOZvA+WAHsVaDcm51yDwI7NGSjEEKISLiMQed/abfmCCFEJWZg2Wey/uzjnVok+jyP/CTA41pq+/NOuze21G4VfNfp1Ar1HOSpZwL4YBgz/485wBqB6xR5fsfg7/hXqk/KrQbc7tS3fgAb+yxEPlgUI5S/c9ksU9/NAeoTw+lybBdhOTRzHNixLWLqIq0WL9Jq40lNp4G0WtvMBL7K4O+6EnhNgLp/RL7PfCJAvSItFHunRZe/l7T21ED3vAiBNFi8SIONRxpMFCFVHabnaCI0WiTYDIql4kWx1HgUS4lxpBpHgWIpIVbHdvvM3gdfKFh2BrYjbLbsaQ3YKISYRmj75/h50Pm7ys40QgjRNY8E1nXO/akLQ0SO3Z2/lwOXt9T2Hs7fMfcJ11aAiyvU8+sh5zeqUNcolgIPBa5TDLI/8ETn3P+Qj92Kshz4Sebva4F7Ktblsg2wgXMu5vtNdIvP34XoL9l61f+apcuxXYTl25njix3bIqYu0mrxIq02ntR0Gkirtc0JwCudc28Gvhyg7vd6zlXpfyJtFHunRUxjK0hrp4jueRECabB4iWmciLVPSIOJIqSow/QcTYh0UCwVL4qlxqNYSowjxTgKFEsJAfB6YF7m7zKLZSeAjznn/gMlJxNC1ECLBOPnAedvLRIUoVkX2BfYqWM7pgpvBR7eQL3zgVc3UG9buJNBIDEYC+4k1F+xSZ6mmQ3s4pyLuU+E6sP3DTmvmCw93uL8fRdwVs06r838f8j7QT5YlKGp/pKtV/2vWboa24WIHWk1P4oT4kVabTzSaWIU/wO81jn3TYpnbh3HZVhm1yyx3iuiORR7p0WXv5e09tRA97wIgTRYvEiDjUcaTIwjVR0m3yxEOuh+jRfFUuNRLCVGkWocBfLNYuqzKZaoYBgzgHc7534H/LNEGz8E7nfO/XeJ8kIIIRLjDAa3kL2zW3PEFKS/lf3vujZkCnAsdi0vJ+zLp/OBG3p1/1fAetvkOAZ92SIsOBbdcxuDv82XWmr3MU67E8BzW2q7Cu51mgAeVqGerTz1TAD/L4yZoiXWwrKlZX/D0wLUe2SmviMC1Nfno8gHi+L4/N36Aep9IvCy3jE/QH1iOF2N7SI82d/xto5tSR1pteFIq8WLtNp4pNPEMPYBVjD4e14JzA3czmcz9S9G/nM6otg7Lbr8vaS1pwa650UIpMHiRRpsPNJgYhQp6zA9RxNNsAi/r/MdT+/IxhRRLBUviqXGo1hKDCPlOAoUS4mpyYbA64BzgZXA/iM++0TyPrnKAr8fOnU8SHg/IIQQIhJOYdDpuyvFhajLf2J969auDUmcjzF4r4Z6+TT70mn/eFeAetvmPAa/wy87tUb02YK8QDm8pbZf7Wl7k5baLovvOl1Tsa5neuqaAA6ub6ZokWeQ/w2PD1Dv3sB7e8f2Aerrcw7ywaIYPn937cgSIja6HNtFeLK/oxYJVkdabTTnoTghRqTVxiOdJoaxFnn/PAEc0EBbb8vU/6sG6hdxo9g7Lbr8vaS1pwa650UozkMaLEakwcYjDSZGkboO03M00QRaJNgM56H7NUYUS41HsZQYRupxFCiWElOH9YDDgJ8Ayxns15uOKPcJ8vfwkyq0/3ZPPf9RoR4hhGB21waIsSx2/p6LbQ2+qgNbQrIesC+wHbA6cBdwKbbNdJHv9kjgCcDm2GB8B/AH4OqANm4I7NSzcT1gTez3uAf4G/Zi4cqA7XXFNr3/bor1rwdbbHt1LIvCzsC6wL3AX4ELgCUFym+CBVPzgdWwnTavAC7CAqS2mEk+CNwZEzxPxfp3FeZjE1xbO+c3q1hfSNbCfrutsN9hOXALcDFwlfPZGcBuzrm2tpSfC+yF+YpNmOwnd2L95PaW7CjCepit22GZoh7EruklhPVtWXb3nGvrt3Hbvpn87zETeBywK/Yi9xLM3/8euK5pAzOEvE6+Cf5VpD1Bsjbwb8AOwAbAOlj/vRu4HrvXivj0EMzAfOeumK9cFxsP7sEm1S7B+lBdHuk5FyJzz296R2ge6/zd1n0O5ncfh41lG2H9ZSF2v18C/KtFW8bRhR/20eXY5fN3FzfYXghi8kEubv/vx7uLtBI5wAAAIABJREFUsHjpCuCBwG12Obb7SMUHPBK7dlsAa2DJeRZhY8e1wE20qy+mOm1eb2k1abUQSKvFqdWk00YTW4zUllYDOIq8f/498KNA9WdZlPn/JuPmFGKqrv1Cm32sTyyxd2z3+zi66isxja0grV2HLrQ2xHPPQxrjAkwfrS0NFh5pMGmwVIlp/Gw7Pk5dh3XxHC2m/jKOqfJezzhieU443VAsFR7FUoqlUiS2cVHz2eVoO5aKrb+MYzrEUinHUWthi3IPBZ4NzPF85hZGJ3V2F/VOAJdVsOWSIXV/v0JdQgghIsfdinkCC2piwbdlu3uckPn8usAnsQd0vs9eD7weE2c+9sJenh/W1uXAcyp+lxnY1t2fAv5e4HvdD5wKPL5EG68pUG/22MMpf0zBcu8tYdNZmXI7liiXZeMCNp2R+fzawPuwFzJ9n12I7cAwrB/sBpxJfpv1/vEv4KCK36UqM4FvemypukuFb1eKCez+6ZInAadjgfyw3/pP2C5bfbb3fObQBm2cBbwMy1Lz0Ag7V2GB9Rt6ZUJxxIg2+8eLM59/JvBThvfnCeBCTIS0Ydu4I9TuKBc69WZ9xFrAezCBNeqa7BXIlnG8z9N+leuwGpMvPmSPMyvaVdb3hmIG8O/AsUwu7h9lwzLgbGyXvKbYDvOPN4+xZQKbfDieahl7+hzjqfcfDB+3umQ+7fpgsD5yEBZj3OdpP3tcCryVsMlLYvbDw+h67Orj83dHlKwj65uaeCAWow9y7XsBNmk/rv+v7H2HOruHxjS29+nKB5QdF1fD7qUrx5RZik3cd0HWjth2EkzpekurTR7SavHGCDH581S0Wqw6DbrRarHGSG1rtc2xh+pu3U+rUeco5gLzekfoOftUYqqu/UKbfSwWXx3L/R57X4nl9wJp7VD2tam1Ia4+BOmMCylo7VBIg41HGqwY0mB2pKbBIM7xs20NBunrsLaeo8XQX6bLez2xjD/aSXA0iqXGE0tfrmrbuEOx1PSOpWIYF31oPrs8bcRSsfSX6RBLxTz2hGQN7NqdyvC1DNnj6yPqmku+T95Q0a5NPG1fWrEuIYQQkXMkeacfQ2b6PmUWCc6j2OK7CWwiwF2R/yZGBxPZ490lv8dzsayVw+p7CH9A3j9OwoTlOGJcJPg3JgOdqtuUP7eATUf1PrsHo6919viq084M7BqsLFj+5RW/T1VmAid77Cj78umwl06PD2lsSTYGvuexadixCnhLr+xLPP/u24UrBAdhC3V8Nj3IcJF4ObBtIBu+O6SN7LE9ljXltAKfzV7TY1uwbdzx1Jo2gL2c4PrUrI+4pqAtS7BJgKb5saftKtfhTZ56VmAZy6pQxveG4lVYJrVh7T2ATbYM+/dPEnYh3Zxenb42V2IvzIwaMy5n8MFCUd47pL4jq3+VxngR7flgsFjiCk+bE9jLP8N+j8uxrFkhiNkP+4hh7Orj83dlJ6Cfkyl7dlDr4vNBLvszuv+Psm0V9rLjniXbjGVs79OlDygzLu6IZW4rcn263Ikxa0dsiwRTu97SaoP+Rlpt+CGtlo5Wi1WnQftaLcYYqSut9mlPXddhc4opkUpM1aVf6KKPxeCrY7rfY+8rMfxefaS169GF1oa4+lAq40IM2q8NpMGKIw02HmkwO1LTYBDf+NmVBoP0dVgbz9Fi6S/T5b2eWMYfLRL0o1iqOLH05aq2jTsUS03fWCqWcTGL5rOr03QsFVN/mQ6xVMxjT11WA/YDvoHt5jjO5muADzF+bm0PT9lf17DTTaCwhGaSyAshhOiYN+MfZGPh37DBMHu4C/lOANbHsmf0zy3DspoMy5IwAXwp087LnX+7H8uEMCpb5n4lvscxnvLfxx68rp/53FzgCcDHgcXO5y9m/ELBfbEXE09meED1s8xn5jvlD8r82w8zZZZkzp8MHFjwe8/Agoqf9+p5W8FyLocz2Ad8GXj2wya27s+cuxf7HUdlhup/l1kMvtS5Ctu2/WZg+ZCyi7GMHG0yC/iWx5aiL5/Ow3bUdMt3+dLpLkNsWgh8DXg78Argv4BTmPyNV2HZco4j/7uEFrNrAF9w2lkGfBG77+b2Prcatrj5OPL95gZg6wC2fITB+zHr+/r9fktsge4E5jPPB47GFhK/rlfHsMmqtwa0zRWTf3X+3XesV6P9Pr4F5vthEybZ7CxLMB9xt+fzWZub5jZPuw8rWcfu+DPPvL+GXc9l8Lc5x1N/mbGwCJc49S/GRPzjgTUzn9ugZ9/pHps+FsiW9YE/OHX/FvNH85ic5JmBZft6BzZuuPa8rkLbvgcQ/eMkLLNPLLi7Ujfhg8EmTT9L/nqcjsUvG/Y+NxubEDyKwZhgAsuEv0MAW2L2w1liGrv6+Pzd+iNL5Mkuov1AQNsgLh+UZVj/PxN4IbARk/fdBtjLfT/3fL5KzBfL2B6DDyiqSfZhUMutxMaHG/FPtJ9Yw6a6ZO2IbZFgitdbWk1aLeYYIRZ/npJWi1WnQftaLbYYqSutthb5+doJLFNvKqQUU3XpF7rqYzH46pju99j7Sgy/Vx9p7Wp0qbUhjj6U0riwD/FovyaRBiuHNNh4pMHsSE2DQVzjZ5fPy6aCDmvjOVos/WW6vNcTy/ijRYJ5FEuVI5a+XMQ2xVLjUSw1SSzjYh/NZ9ej6Vgqpv4yHWKpmMeeKszCfo8vM3oM6B83YvOIZRKOHeap5zs1bL7OU1+TmwEIIYToCHdx3AQW8MfMTQzaewKTL+L9GQvGZmc+vyXwYfwPifYCtmEyaDoJ2DVTdga2Et/34O9aimeBOCZTbgVwSIEyW/W+T7bN7xZsr48vG8hPKBYofzVT5s0l2+2zWa/8e7Dv/amK9bi8lvz3ei62qPMBTJxmMyfNwjLnXuUp18+K+7+9v/8JLGBQKK+DXQPfbo+vCPSdyjAL+LbHlnEvn84jvpdO9yC/GHcpJkjXGFJmS+ACJkXzeU75XwW2cR3yYv3vwKPHlHsq+UwyPw1sG8AvnDb+DPyl9//njrBzBvbCh9sflhMm8N/SU/frA9RbhFd72t4P8/XLsBcfdnPKzMMmXn0Cba8Gbd3C0941Jet4Gf6Jnc+EMxPw71a7acD65zB4z/wSy/Q3jjc6Nq2gfgbr2dj9k633XQXKbYVNnNSNqzZn+OTLBDaxcwL5ftwF7gRuaB8MNtn0O6edOxmfKW0X8vfG1cDqge2L0Q/HOHb5/N21FerJJrJ4fiDbIC4flGVt4Pfk+/8zC5T9EPlr/tIatnQ1tsfqA3ya5NlMZoX7KRZ/ZB8ebEQ+jm8rPvKRtSO2RYIuqVxvaTVptSwxxgggrVaElHQaNKvVYouRutRqC/D3w+1K1tMVKcVU4/zCfCwBYBN+oev5gD5d+OrY7neX2PpKli7HVmntasSktaGbPpTSuBCj9msCabD6SIPlkQZLT4NBXONn1/HxAvx9MRUdBs0/R4upv7hMl/d6uhp/tEhwEMVS9VEslUexVHqxVGzjouaz69NkLBVbf3GZDrFUrGPPKGYAe2PX8naPDe5xB/B54MlUW+D6Pk+dn6th/4We+p5Voz4hhBCRciB5h79PpxaNx10k2M/mcCaDiwNd3kL+u36DyW2JDx9Rdjb+LCZFt2U/JlPmwwXLgD3YWui0+aQS5ecAl5K3+z/HlMtu031mifZcntSr4xDshcc6dWU5gcHvcy8mbv/J6CBvO/I7US7CgtgJ4AcMnxwCyyblXsuuXtqchWWEcO0Z9vLpPPwvnR7XvKlD2Rq41bHnQeyB7zg2ZjJrzlKnjk8EtHEN8hOBV2LZYYrwcfLXfO+A9sHwLCQnUGwrcN+uo18MYJdvfNkjQL1F+LzTbt9H3AI8dkzZM8nb/drGLIXnedo7dcTn18Qmx/YFjmRSGGePmyi2GL0sbka7mwPX/7hM3Rcx+KLHOM52bPtITVsOd+ork4HnsEy5ZVR/QeZE8r+t7/gbljGpiQmnIrhxSkgfDOaHf+m0cQewY8Hy7uTcBJYlMiSx+eFYxy6fv6t7bBXArj4x+aA+a5L/LW9n/MPCPjOBK5zyj6phTxdje8w+wNUki7F440Hg4BHl1mTw4X1b8ZGPrP2xLxJM6XpLq0mr9YktRugjrTaelHQaNKvVYouRutRqPyL/u15dso6uSCmmKuMXzvLYVdcvxDAfAN346tjud5fY+kqWLsdWae3yxKa1of0+lNK4ELP2C4k0WBikwfJIgzWDnpcVI0R8nLIO69P0c7SY+ovLdHmvp6vxR4sEJ1EsFQbFUnkUSzWD5rOLUTeWmgpxFDQbS8XWX1ymQywV69jjY0/sOrjrF3zHPdguxs+i2PcYxSc99ZdZg+DiLsycwNYLCCGEmGI8hbzD379Ti8bjG2RvwzIZjGIm+W2GH8C2TD6lQLu+LeQ/WdDmY3qfX8no3QN8HO20+cOS5R9Ffiv4hxjcMTHL1liQ0hdhZe3N0t+pck8si8cVNerK8kfyv8VC4BEFyvazQGWP+7HME+MCso09Zb9d3vxgzMJEvWuT+/LpPOJ76XQWcLHHpjIZdz/oKT8BvDignd906n6Qchl1dvDY9/mA9m3rqX8C+DHFdzrd2VN+CfUz/77fqXMZtnC5DXwZT+6l2MsaL/aUfU8zZgL+bC9VjruBMzC/G3qXtD4XOW2GWvjdpz85tgrYqWTZ1zNo24U17JgB3ODU9+QS5bOZ7P5Uw461yGcSHHdcDRyLTWS1wXyPDSF9MFhCh2z9qyj2QKfPWpjvztZxS0D7YvTDsY5dofxd/7g9gE1ZYvFBWU5x6l1FsV0NshyZKX8fxfuljy7G9ph9gE+TLKdYIpm+JmkzPvKRtT32RYKpXW9pNb/vllaTVktFq6Wk06BZrRZTjNSlVlsTf/bcL5espytSi6nuo5hfeImnbB2/EMt8AHTjq2O6333E1FdcuhxbpbXLE5vWhvb7UGrjQszaLwTSYGGQBvMjDdYMel5WjLrxceo6DNp5jhZLf/ExHd7r6XL80SJBQ7FUGBRL+VEs1Qyazy7GdJ7P7tN0LBVTf/Ex1WOpmMeePo/BFoD+c4it7vX9Nra4PaQP/ZKnrTrjyRme+l5V00YhhBAR8ljyDv/QTi0aj2+RYNEMlcd7yk5QXHhf55T7ZcFyj8d273tlwc9n6e/G1z8WUz67gG/r6b+Sz34xCzi/9+8rKb5T4jCO7tW1EfBVbLFiXVbDFjlW7be+FzXvo/i29W7b3yxqeEPMBr5H/jv1Xz6dR3wvnQK8jbxNZbLlADzBU8cEsH0gG32Zlv67ZB0zsHvW/W1CcbDHxsWUX9z7L089e9a07cdOfXVfjirKbPwTHQsKln+yp+wRwa2cxL1OVY4bsQw6L2f8gvmq+Hzv0YHb2BsbK8tM2Pdx74Vratjhi42KZvAD2DBT7sQadgCsjWUWqtIvrgTe1aujKV7oaTeUDwa/H/5KhXrO9dQTaufF2PxwzGNXCH+XPc4OYFOWWHxQn+eT/85fqlDPAZny59e0qe2xPWYfMEyTvLtg+fcDJwMfq2lHXbK2x7xIMNXrLa3WXJwQ83jXJ7YYIYu02nhS0WnQvFaLKUbqUqvt62l7AnhZyXq6IMWYqugc+j6esnX8QkzzAV346pjud5fY+opLV2Orr+26h7R2MUJqbWi3D6U4LsSu/eoiDRYGabA80mDNoOdlxakbH+/raX+CNHRYn6afo0E8/cVlurzX0+X4o0WChmKpMCiWyqNYqhk0n12c6TqfnaXpWCqm/uLy/9u783BLivrg498ZdmRxYRNGGUBAIy6Iivq6YMQt4pqoaGJwX7KYN+JLfGMiIL6JGI0mMXF5g5pEEk00ghKiQQWjEYkooiYIqCACI/smyzDLff+oe97pW6fOuaf36nu+n+fpB07P7eq6faur6tenq2oe+lK5tj0PIiwK9INEuvF2F3Aa4e+yY41zTvOJxHlnfVaW8ulEem+smUdJUoYewHiF39bS5k1JDRJcM+OxL08c++0S5z4tOvaKEsdWlZoR4+EV0km9nBjPKvS2wr/VWZJ45G8IMyQA/OFiurN2NCc5lPHf41uEByKz+Ezi+LeXOH+8FPf7Sxzblkkvn36P9EunTS67XsVujD+82ki5WbIgDD5NBQqzloVpdiTMfFtM+zqqdebjQGRTA/kbOZnxa/D7FdL5SiKd19fM28+i9Oq+HDWr1KqvFzL7DDNPSBzfZru4LjrXZuBjU7a/I8zoci7jszUvLO57H7Brw/lMXddnNXyOOuKH/1fWSGs0U1Rxm7T6bso2hOv1cGDPGvkoehLw1US+ZtmuA36zoXzE3hmdq6k6GNL18N2EARVlfYzx6/IbTWSSvOrh3NuuVH13H0I/Ztbt+MLxJzWQp6Y0WQdB+JvF12s9YcXvsopfQM26CvokXbbtudcBqZjkUtqdVbMNxfznPEhwyNfbWK35fkLu7d1ITn2EmLHa8oYSp0HesVrTfaQ+Y7X/nTj3ArPN2NunIfapvsvs9ULqZas69UJOzwP6qquravp+j+VWVmJ9/r2MtWeXa6wN3ZWhIbYLQ4n9qjIGa44x2DhjsPmLwWBlfV821DisqM3v0ZrQZj9+Xt7r6bP9Sb0QP2mrO0grV/almmNfapx9qfnrS/k8Oz8596X6eB660vpSObU9Byye+8JEWvG2Afg8YSxCG/VkLLXy35trpJcaQFp28gJJYuu+M6Bl3ZrY1+ZsIG34CbN3slI/9/US54oHBXbRyG9I7Lsv8J2S6byG8OCn+IXnGwgdls8SZkb6w8X95xEGDNa1P2H1RQr/3Z96L6Aeltj3fkJnZRZ7RJ83MT5YcpJ7M76K46UzHtumjYSl1FcDLyjsTy2D/h7qdRKb8Gpgl2jfpyg/o0rq3vg2s5eFaV5OuM+KPkh4EFLXasKX2nc3kFZ8P9xNtQdiNyT21Vl9bA3jDyi6ms0rVUf8BeEh2Cx2T+xr6z7fh/GB0z9k9pnHtgaeRqivD1/ctwPhQcRzCavBXpY+tLRHJvZ1OSv6ch4afb66RlqpftB7CTP8/Tzxb7ENlG+jl/MVwkPkQwmz5B9Nuqym7EZoJ58OvJDw8lNT4vutqToY0vXwpwkDKsq6JbHvPhXSScmpHn45+bZdqfruR6R/72kOLfz/Sq2DINzn8fX6FNUmKLmIMOMjwDdr5Knrtv3l5F0HpPob76OZ/l0VxxFmo6xjV8rPrgtwFtVWnSgjt+tdhrHaFsZqxmpDidWGFKdB3rFa032kPmO1VL19O91MIFfHyxlen+rP6a9eyOV5QJ91dVVN3++x3MpKUZ9/L2PtcnKMtaHbMvRyhtcuDCX2q8oYzBisTcZg8xeDwcr6vmyocVhRm9+jNaHNfvy8vNfTZ/tzFXC/GdNvOkbLhX0p+1Jtsi81f30pn2fnJ+e+VB/PQ1daXyqXtucw4PxlfmYz8DXC+xT/BFxfIv267kzsi/8+ZaSOTZ1DkqZykGD+Ul/i1AnO+vCDEj97e8PHV71WWwMPIXz5egDhhcydSTfAqdmDqnzRdjNhaexzovOcAjweOHUxX7cSXmLcWOEcsf3ZEsgVBwmWGZgZizuHdxEe8szqgdHnLzH7oMX4WICLS5y7TRsJg0Y+CTx/ws/k8NLpatIzdXy8QlrbJ/Y18eBgFeFhR+zUimmlVs/cjmYe1MUvg59JtSAkVc/UmZ03Faj29aBuPfCPJY4/ILGvTDtRRt3rtJHwNz+LEIQWXzxfC3yB0NY0MSgszuvVtL/i0EGEWbQeBNyL8IB/uwk/e2T0+Sc1zpt6wPlk4L+BdxBmVesrOL5gcftdQtv9AuB5zDbj+bMJK/we3WB+4jqoqft8Uj1cpa2AdH+tqf5uLvVw7m1XU+1CMZ2225W+6qDVNPe3hDAbadV7p6jLtn0IdUDqgfXf10yzjidSf5bN7YEXVzjuZrofJNj39S7LWC0wVjNWG0qsNqQ4DbqP1frqI0G/sVrqmeAl5PNCQsoQ+1R91wu5PA/os64u6vN+j+VWVopyalurnttYu7ymYm3orgwNsV0YWuxXljFYYAzWnpzbzyJjsOXN6/dlQ4zDYm19jzZNLv34eXmvp8/2Z9bJ9DfTfj3VB/tSgX2p9tiXWhl9KZ9nbzG0fhR035fKpR8F89GXyqXtedSUf/tPQt34SfqbdOG2xL46Y3NSx6bOIUlTOUgwf+sJwWKxURzaSoJlZkVNzf5T5vg44Jl1CfmR+xNe7H8p47M1lJF6QDGLrwEnAScU9u1GmGVj1Fl6Pc3MALM9YTakyxc/j/67f8104w7wN5i9k7KGMNNF0b+VOPdDEvsuKHF82zYQlos/irDkfNG1hACzb09gfOn6WwgPFcraL7GviWDwcYSgr2g91ZbV3obxv8VG0gOWyzqAEJAWVbmOMD67GtSbuSy+TzcA362RXp1zf4P0qrmT/EL0+We090CqqQeaGwh19zNYGvgeCPwW4aXzuuK8tvXgZW/gNwkv0tdpL75X49jPA9cwPiPd/YAPAX9CmGH7nwgPUfqYyXoTYXXBrxC+WHgkoW/xEtJfDoy8mPA7nN1AHvZjvE1tqlw8lvF6uGpbAemVn5v4u+VUD+fedjVR3+1B6MtB6Nf8tEZ+JsmhDnosof4uuoVyfdY2dNm2D6EOiK/HecBNNdPUZCvhehurGasZqw0nVhtSnAbdxGo59JGg31ht78S+SxpMvw1D7FOdS7l64cHR57r1Qi7PA/qsq3O532O5lZWinNpWMNaeJNdYG7orQ0NsF4YY+5VhDGYM1jZjsGCIMRjk0X723T8eYhxW1Ob3aLEcyktsHt7r6bv9mXWQ4DU0M0l8buxL2Zdqm32pYIh9qVzaRZ9n19NVXyqX8hJb6X2pnNqeVD0KYeDn3xAG96cWY+pKauXRe9RILzXJl4MEJWmFupYwS8Ro+0C/2VnWlSzNb5klhh8ZHbtAWMJ7Vickjp/VGwkNdnx8le3VJc4b2wr49wnpfqxGurEHLab5u4ufVxFmtKhzjm0W0yjm+cQSxz+X8d952kwQsQ9Hx8760K0r+xE6p5PKzTeBe/aWu+AdjOfrjIppHZNIK37AVsWJiXSb3H7cQB4BXpRIOzWTyyzidqBs3Rj7lyitrmby2powy1LVOgJCXpson7M4g/Hr/uQa6Z2ZSO+8mnmEdN17fAPpFm0NvJ3wELuJ+6zuakpHMFubfTNhNsKjyGNyjG2AlwGXMjnPf93QuX4lkXYTdTCk6+E69+J3E+m9qmYeIa96OPe2K1Xf/WLJNJ5ZOPbMmvmJ5VQHNV3+m9Jl2557HVA3JmlD6h7ravtgy79bjte7CmM1YzVjteHEakOJ06D9WC2nPtLIEfQTq61PnOPkBtJt0xD7VGXL7wU09/uNHEH/zwP6qKtzvN9Hci0rI321rWCsXUausTZ0V4aG2C4MMfYrwxjMGKxNxmBLt6HEYJBX+wn99o+HGIcVtfk92khu5WVkXt7r6bv9eXPimNT2zYp5yp19KftSbbIvtXQbSl8qx3bxCHyeXVXbfakcy8vIPPSlcmp7vp04vrjdDnyUMAFXH1L9ib+okd55ifSeUTOPkqRMjZaSHm0f7zc7y4oHCZZ5KTE1SPCoEsefkDh+Fn+UOG4j4Vo/h7DC4A4Tjl2TOLbOIEEIM5LcmEj3l2umW/SsxTSfV9h3MWGAYlWHUq+D/fbo2PWUW1o6DuBPL3Fs25Z76XS0nc/4LBxdOjeRp+MqpvXeKJ1bCYNR6/p6Io9Nbmc3kEcIwXsx3Zup9vvfK5HHBeCQGnn7WZRWmcHcdTyc8d+jTB2xLeMPStp8EWFddK7NpGdgntVfMv77l5nJbJLUdS3Tdi7nPoT7Ij7H1cD/ITw025PJ9fVvJI6dtprerA4CzkqkPWm7irCqXzyDXx+2Bz5COp9Nze70TsbLWhN1MKTr4aptxWrGH+AvAE+pn82s6uHc2664vlug/GCYNcCRi9vBNfNTlFsd1GT5b1KXbXvudUDdmKQNjyK0zWW34u9wU8U0UjMJNinH612WsZqxmrHasGK1ocRp0G6sllsfqaiPWG1jIt0TaqTXhSH2qZ5Z4vjtCLNrt1Ev9P08oOu6Ouf7HfIuK9Bf2wrG2mXkGmtDd2VoiO3C0GK/sozBjMHaZAw2fk80we/LZtua6h8PMQ4ravN7NMi3vMD8vNfTd/tz9ITj4i2n95qaZF/KvlSb7EsNry+Vc7vo8+xq2uxL5VxeYD76Ujm1PS8EvkyoP5e7P79HWCyoy+/0j0nk4x9qpPfjRHpNT2YiScrEN1ha4X+u3+wsa2iDBH8pccyNwOEznrONQYIAb0ukey3NdVh/ezHNhxX2fZ56M0u8mnod7HiGofNLHJsK4N9W4vg2rQUuZ/zavJcwEDXe/y36efl0tJpknJ+ysxuPxCtinlM/i6wi/eX2kxpIu2lfZGkev1Qxnacy/vveRvWHDak663UV0yrrVYlzl6kjDkscX2dWs2n2SZzr0pppvi+R5mbqPySpe12n2Rb4aiL9DwP3mDGNU6Jjr2oobyOHL+bnpkQ+U9v5hL9v31Yx/uBmAfhhQ+nHDzHPaSjdSfVw1ZeMDkmktQm4d+2c5lMP5952peq7psphXbnVQU2X/6Z02bYPoQ6oG5PkpPg7/KznvEwy9Ou9FmO1pvoJubd3Rbn0EWLGassbUpwG7cVqufWRJukyVrsjkd5bauS9bUPtU+1R4vhHJY5vul7o43lA13X1EO73nMtKn22rsfbsco21obsyNNR2YUixX1nGYM0yBhtnDLZ0yz0Gg/zaz5Su+8dDi8NibX2PBvmXl3l5r6fv9ufxieNS219VzFfO7Es1q++yPIl9qeXZlwpybxdHfJ5dTlt9qSGUl3noS+XY9hxIGLx4TSLNeLsT+DvgiRXzXUZqzMNXaqQX1w93AVvVzKOkObS67wxoJjdEn8vONKrp3p3Y90qaW4q9ir0Jg/hiuxM6L00Edvsv/vfWgmBLAAAgAElEQVSywr7LFs+9XcU0D4s+X025l1nj479V4tiHMD6jRpnj27KWEATtG+1/L/C7hJkkTo3+7RGEjnYTAyTKWEP6b/+DCmltTZg1paiJv8d9CStwxS5uIO2mPSL6fGHFdFIPIc8BNlRML77PoFywWUfTdQS0d5+3ca41iX3XEQK6Oupe12lOInyBUfRR4LXA7TOmEeev6fJ2HiE/exFW3P1nwgz00/LzBcrNwtSGBeCTif23NJR+XAc1da9MqoertBWQruPOJ0zYUFcu9XDubVeXdWtZudVBTZf/pnTZtg+hDmizXdS4IV/vtRirjRirVWOsNvl4aKc/MaQ4DdqrI3PrI03SZay2LrFvU4V0ujLEPtWVhAnsqh4PzdcLfTwP6LquHsL9nnNZyaltBWPtSXKNtaG7MjTEdmFIsV8VxmDNMgZb/tzGYHnHYJBf+5nSdf94aHFYrK3v0SD/8jIv7/X03f7MOkF7GwNd+mZfqll9l+VJ7Ev1c54h9qVybxdHfJ5dTlt9qSGUl3noS+XY9lwK/B6hHnwhWwaqpmwP/BphsN4PgGOB3SqccxYXJfKxtmJaewI7RPsuZnj1g6QMOEhwGOIvbfqYtX6legjwoGjfj4DTesjLyGrCQMBRpyQOCo4EjmvgPPsTylZxyfnLCAMQ96uYZp0O7D6ETk7V41OB9bdLHN+GtaRfOv1T4E2L/7+JfF4+3T+x7w5CIFPWI4Gdon1NBCTxtQT4Ofl9GX0A43X1JRXTSs0WfFbFtGD8XrmbsNR6F+rUEanjr6G9h+ZtPKxLLf3exAzida/rJPsAb4z2XZ/YN832wIOjfW190bOe8JDulwkP7X6bybOwPRj41ZLp70VY3fgo0n/LKlIP/i5L7CtrP8bbj6aue6oevpPq9+KTE/u+UDGtopzq4dzbrj6/wJkmxzoo9be8nf6/wO2ybR9CHdBWu6i0oV7vtRirFRmrVWOsNvn4tmK1IcVp0E4dmWMfaTltx2qQ/pvlsIL8JPPQp+ryGU4XZWyky7p6KPd7zmUlp7YVjLUnyTXWhu7K0Dy0C0NjDNYcY7DZzp1T+zntPDB/MRjk2X5O01X/eGhxWFGb36MNobzMw3s9ObQ/VzHboJ0q/Yvc2ZdqTg5leRL7UuXPA/PXlxpCuxjzefby2upLDaW8rPS+VM5tD4QBhp8CnkbI6x+Rfv9u5GDCQkJXAZ8grGzcxCI9I7czfk/fj9lXviz6hcS+71RIR5IcJDgQ8SBBVxJszqMS+77aeS6WeguhIwJh6etfJDwsKToJeHTN8+wPXB7tu7zwb2VtDTw02le3A1vn+KuZ3vlr277A2aRfOj022rcJ+HXGXz49lLBUd1cvn+6Y2HdrYt8snprY18RLEKnZxm5uIN2mpcrzTyqksxY4PNp3N+nVx2YV5+37TJ/5qCl16wgID4DrHF9G0w/rdgMOSez/Yo00oZnrOskrGJ8978OEh+Ozehghj0VdvEByE/B+QvD8ZmBj4mdSsxVN8zLgc4vbM2rlbov7JPY10Q9p80W0VD1cdfXDnYFfivZtBv62YnpFOdXDubddua5ukGMdlOvfssu2Pfc6oM12UeOGer2N1cYZq5W3FmO1oq5itaHEadBeHZljH6mMNmI1gP9I7KvyfHM5xxFeFhtt36faF73z0KfqazBJW2VspMu6egj3e+5lpa+2NXVuyKOvnGO5yrkf2VUZmod2YWiMwZpjDDbOGGxczjEY5Nl+zqrN/vHQ4rCiNr9Hy728zMt7PTm0PxsIq3stJ4fJMZpmX6o5OZTlSexLLc++VP7t4nJ8np3WVl9qCOVlHvpSObc9scuAtwL3B54PnEl4DpayLfBiwnf8lxBWJYwHbFb1uejzKkJZLCtePTmVtiTNJG4Mlacbos8OEmxOqpEvOytQk4NtDwdOXPz/HxBmwbhj8b9/Xfi5bYB/AB4O3FbxXPsBn4/2XVb4t7IOYfwhSpnOf90ZhnKaxXRfwqoUa6P97yEEjCmbCS+fwtIZZh5O6JgeyXhd0LTUMt53VUzrZdHn25g8q04ZqaCvah4hzPhTfIByPs08+EsFS1Xy+TLGZy75FGEWq6r6ulcezHggX6aO2Jbxh11dDxKsM/POL5GehebMGmlCuCbxdW3qujwrse+MkmmkBuN3WT9vJNS9OwEnRP8Wzzi4nGKZqHMPFj0ise9fG0g3Lr9N1cGQrodvr5jWC4Adon2n084Km9BfPZx725XjasyQZx3UZPlvUpdte+51QN2YROUM8Xobqxmr5dRHiBmrLW8ocRq0F6vl2EeqoslYDcI1ODHal3phpo69gbex9CWKt1GtLzTEPlWZMtL1M5yUpsvYSJd19RDu99zLSp/fGRhrzy7XWBu6K0NDbBdyj/3qMgYzBmuTMdi4nGMwyLP9LKuN/vHQ4rCiNr9Hy728zMt7Pbm0Px8jvWJd0cUl8zQE9qXsS7XJvtS4nPtSubeLs5r359mxtvpSQygv89CXyrntmWQjcNridj/gVcArF/8/5QHAOwmL9XwW+L/AvzHbKtAp/wy8Kdr3BODrJdN5fPT5Tpp5j1CSlKnfIjQ+xS3nAZ5XsjSvHyxx7CMZ/12PKnH8CYnjp3lL4uf/pMT5ILwYGKfx6pJpAOwC/Gjx+LsYn3HiE4nzxKsZzGqPxePfQyhLo22vwv6yXpXI314ljj8jOrZsAL8+Ov74Esc3aV/CYMuq5Wo18HeJ479DesWpJh2eOG+V2WqflkjnnGayyNpE2rPMvjbJZwrpXEF6trAqvsh4Pp9eMo17EH63YhqbGZ/Rqox9Evl6bY30yqhbRxyWOP65DedxJHWd6g5aOi+R5nepv3x96rret2aaEPJ1VyLt1Kx/05weHV9nJsRjCV+k/GmFYx/G+O/yvpJpXFo49hUV8hDbhvF7/DsNpAtwVpTuOQ2lC2EigSbq4VWEeyCu4+JZpKrKqR5em8hLLm1XG/VdE3KsgyBd/q+umNaJwPWL208JMz9W0XXbnnsdULe/kZvi71F2MpsuDO1674uxmrFaXn2EImO15Q0pToN2YrVc+0h9x2oj30mk1VR8sZotXxCPtnOpPnncEPtUZWbUTT3jr1Mv5FLGuqyrc73fY7mVlaI+21Zj7XJyjLWh2zI0xHYh59ivCcZgxmBtMgZbuuUcg0Ge7Wcu/WMYVhxW1Nb3aDmWl9i8vNeTa/szL+xL2Zdqk32p4fSlcm0Xc+lLDbUfBe30pXItL7F56Evl2vaUtRVh4OnphEGE8e8Ub5cBf0AYYFvWakJZK6b3lZJpbEdYebmYxj9XyIskaUBewniDVOeLrbYNaZDgKxI/X7ZhfWUijSqDBE8tHP+biX/flfQLjcdUONdjEukUt89USPOvojTKdrDXRcd/qMSxj2D8d3h2yfM34f7AjxN5KTvwdNLLpxfS7r2/I2FGrzr1zWrCrEdxGlUGnk5yRSL9XSqk80RC8FHnvp3kRsbzmLqvpzkhkcaHa+brGYk0Hz3hZw8g1L9HAU+teV6oX0e8lvG8T5rtpa7nJM5VZ6n7X0mkt7C4v66613WS3RnP7/qSaawhzHhUTOP0Gnka3fvfr3DsYxn/fco86N2VpfXFSRXyEHtDIk9NlAkIqxm1VQfDeF9vgfIP5l6cSOPPG8xjbvVwrm1X0/VdU3Ksg0bi8r+RMOi3jN0JX4aO0vizGvnpo23PuQ5oq13sS/F3yXGQ4JCut7GasdpIbn2EEWO15Q0pToN26shc+0h9xmpFqb/pByqmFTspSvc66pfzIfWprix5/OsS+apzvXIpY13W1bne77HcykpRn22rsXZ5ucXa0H0ZGlK7kHPs1xRjsOYYg40zBlu65RyDQZ7tZy79YxheHDbS1vdoOZaX2Ly815Nr+zMv7Es1J9eybF9qefal8m0Xc+lLDbUfBe30pXItL7F56Evl2vbUsTdhAOBliXzF2wbglArn+J0onc2EicFmlXquN6ltlSStEE9nvPI/sNccTTekQYIPTPz8zcDOJc755UQaZQP+YwrHnjbl5x7D+IOU2yhfHl7KeJ6L24Ul04Px2Wo+W+LYvRN5KDPD0GsSx1eZ0aGOSS+dvqtien29fPqtxDmPKXH8iYnjFwhlrimnJNI/umQa9yLM0DQ6/myamVkJwgOu1DX4lxJpPJrxe/0a4N418/bbiXxNqu8+XviZM2ueF+rVERCC4uLx1zaQp0lS5fi4imk9gJDXOL2zaKbM1b2uk+xKuhzvUSKNv08c/7aK+Sk+DCr7whmL5y3m4wbKvWTz5Oj471Pv73cg4w9VzquZ5khq5vEm62CAjybO8ZwSx+/F+H1xKWEmqSbkWA/n2nY1Wd81Kbc6qChV/o8smUZxcpB11FuBrI+2Pec6oK12sS/F3yXHQYJDud7GaoGxWp59hBFjteUNKU6DdurIHPtIfcdqRasIdUYxvbuBh1RMb+QtUZrrgafUTBOG1acq+yLFh6Pj69QLOZWxLuvqHO/3lJzKSqzPttVYu7xUndhnrA3dl6EhtQtdx35vAN4dbVt3cF5jsPqMwdKMwbZsucdgkF/7mVP/GIYXh0G736PlVl5S5uG9npzbn3liX6q+nMuyfanl2ZfKs13MqS81xH4UtNeXyrG8pKz0vlTObU8TVhPGY3ya8QGldevA7YDLo3T+csZjVzHed3IVQUmaA6mBc4/qNUfTDWmQIMB/JY6ZdTWBoxPHLlBukOCBhIF+C8BPWb4z9PuJ851PWE56Vn8wId+j7bYSaUH4Mu7OKI3jSxx/VCIPh5U4/oPRsetKHNuE1cB3Gf8dTm4g3b9NpHt2zXSn+Y3E+f6b2crXa1g6O1ZxO7jBPD6Y8SXAzyUsET6LnQnLeY+OvZbw4nBTXsT4779+Mc+z1N2HEF4CLx5/J/C4BvJ2fJTupHt9Z5YuX/6rNc9bt46AUM8Vj//Xmnma5gzG/4ZVHpg8jvGl5BcIAWHdl1Sgmes6TWpmoN+Z8dj/lTh2AXhWxbzEM9H9Qolj9yDMilU8/k0lz/9mxn+XN5ZMY+QQxgcqXA/sWzG9WGq2sSbrYAgPJTdF55j1ntwZ+Fp07DrCg+2m5FgP59p2NVXftSGnOqgoVf4/VeL4YwvHbaZcrJPSR9ueax3QdrvYh+LvktsgwaFcb2O1wFgtyLGPMNJHfQ7DitWGEqdBu3Vkbn2kvmO12P0Zn8X4R1SbJfkejNf1dwLPrJnHkZXcp4q/zK5TL+RUxrquq3O732O5lZVYX20rGGtXkVusDd2XoZXcLtT179H5b+/ovMZg9RmDjTMG27JdzjBiMMir/cypfzwypDgM2v8eLafyEpuX93pybn/miX2p+nIuy/allmdfKsitXcytLzW0fhS025fKrbzE5qEvlXPb07Q9CYNqi4P969aBL4nS2cBs1+0NjF+zB1bMgyRpQPZnvBFqYvn1tgxtkOALEscsEDoA02ZbORq4Y8Kxsw4S3IYtwedG4IkzHLMa+FLinGWW7f7I4jE/T2zrF/9t9xLpPSyRnzJ/t/jhwXrKDXr8ZnT8GSWObcoT2DLYcwF4Z0Ppxi+fXgs8tKG0U3ZgvKO+QJg9Y9KMs7uzZaalG4HPRcfeSnMzF43ES7cvAO8jXK9pDgW+VzjmFsJS7E06mfHf/y8W//8nhHouZRXhYedN0fEbCcuJNyEeZHwH6Wv2nsLP/Ij6s/LWrSO2ZUvdNNreUTNP06xjPL/3mvHYrQmrzp1K+sH1hcDahvJZ97ouZ9RWFLdbCKvaTrIj8P7EcaNtr4p5eWuUzn8w26q/9yP9wtmsD/ZH/oHx32UTof3aYcY0diXMFnd7lM6NhDakKX8cpd9GHQzjs/0vsPzAyQcA/xkdcy3hC5gm5VoP59h21anv2pZTHRRLlf/XLHPMdoyXzSZewOirbc+xDmi7XexD8XfJbZDgkK63sdqWPoexWp59BDBWm8VQ4jRot47MrY/Ud6yW8jjCM85i2uuAFzJbnbcDYfbe+OWbdcCTGshf0UrsUzVdL+RUxrquq3O732O5lZVYX20rGGtXlVOsDf2UoZXYLjQhrs8v6ui8xmD1GYONy739LDIG2yKn9jOn/nHRkOKwtr9Hy6m8xOblvZ6c2595Yl+qvpzLsn2p5dmXCnJrF3PsSw2pHwXt9qVyKy+xeehL5dz2tGUVYRD3J9jSRtQZXBqX4yuZPpD2WYy3TWVWmJSkpDZeGFbz7kloPIteBPxTD3lJ+SCwfeHzC1m6jPYlhJl2Rk5b3CAEP+8t/Nt9GO84fYmly3ufQJgNBUJAdEzh3x5O6IwV/U30+XWERrXoA8DrGfdd4KOEL9huJAQFDyPMbHPE4s98FHhFdNzXgUsLnz9CmOkS4M8IAwUgzAby5MX/Xwf82+L/b2D8y8/i77onYWaTogVCR+Xuxc9nM/67j5xDmAkltRz37xAeeDyGsDx2yrOBXy58Lv4eI6cROuks5qnYcXktS2eHeDxhqeqRnxMeDI18k6VLL/8VS8vYS1jaYb6I8Dcb+SzdLL/8OEIA+AHCINOmrAY+Rhgc/BTC7Fpt+kVCWYwD2esJZewiwiCXPYHHAk8j/D1uJizH/S6WBpk3sXQJ7s2E8r2pRh63IwQ6R0b7zyUEJl9my+w9exDK868SBgWPfq8fL36+sEY+Ur7I0tmfvkIYVHwRoT7fBJxFuEevAXYCDgKez/hMQLctHntmQ3l7Llvq35G3EurhOwn38pvYMgvPAuEaf7nkeerWEbsB7y583ilKD8KDmh8WPr8b+H7JfEJ4eHlQ4fNWwK9FP3M3YZDYJFsDuwD3JcyIs33iZzYApxBWpKs60/GxhBmlR5a7rhDanAsqnm8/Qju4U7R/A+GF+M8S2uPNhLJ7BPBKwt/vEkKdUazrNwEfL3y+Bvi9GfPyGeB50b7LCL/fWYQ2d8Pi/t0I/YHnEdrnYntxJuGeKrti7iWElX9TbiDMbH4eoUzeQigzOxG+yDiEMDjhaYS6q+hiwn15ccn8jOxKuAZFT2LpA+G4Do7vt6p2IFzPI6L9nyS02RcQ2vNdCH2nFxMmUSheg68CL2VpP68JudbDfbdddeq7b1Bu4o8m5FQHxSaV/1MJX15+h1B2tiHM7vV0wsxf+y/+3EZCnf7nFc9f1FXbHsuhDijb3xh5F+33p5uyUPj/a2j2S4yyhn69jdWM1SDfPgIYq8WGFKdBt7Fabn2kvmO1SR4JnA7sHe2/hPDM8T8JX2jfsZiPexMGUzyG8Gw6fjHkDMJ1vK6h/I0MsU/Vdb2QUxnruu+d2/2ee1mJdfX3MtZembE29BNvD7FdGGkz9lvH0nj4VMbvs7YYg9VjDDac9tMYbLqc2s+c+sexHOOwPr5Hy6m8zOt7PTm3P/PGvlQ9OZdl+1JL2ZeaLKd2EfLtS+XYj4Lu+1K5lZd57Evl3PZ0YTfCO/p/S/X7Z2vCe4TPLey7jTCR8d8TyvBqQj38ekI5KQ60Px54e8VzS5IGZhXjy9svN3tml+KZLJbbTigcu6bksQssnY3g9RWOjzuREIKzPyE9+8qk7U5CMDvL71BcWTA1U1K83ZXIY9nfddqXy1cQOpUpz108/iVTjk+tqDRt+1Z0/AUljz+xcOw+JY9d7ndp2v1bSnc1oax15RjGl0df7m98IKG+umWZn606GCa2I+HL4Enn2ch43blACBw/QAhc2nBjdL7RKp9PZfLqo6ntPwiDeZu0LWF2rvhcmxmfkWQj8KqK56lbRzyr5PELjAeas7qhwrnKbOsIQft+FfNX9NMK5580sG1Wz2TpyjvLbZsJAe0uhBd3pv3s6SXy8XrCA69p6d1J+p5fIDyUOpbqE2Q8mNBPuHqZPMy6XQ/8T8rNCJXylArnju+3OnYivKQ06Vx3T9h/PeHBW1Mz1MZyrof7bLvq1Hd/WOO8deRSB6UsV/7jdnW0/RezrR4+q67a9pS+64Cy/Y3Rdt+a5+1SMd99ryS4Eq63sZqxWs59BGO1pYYUp0H3sVpOfaS+Y7Vp7k2YuG3SuWfZvs74S2JNG1qfqut6Iacy1kffO6f7PfeyEuvq72WsXa9cxXKJtaG/eHto7cJoayv2u2fiXK9r6VyTHIMxWFXGYMNpP43BlpdL+5lT/zgltzisr+/Rcikv8/peTy7tz7sIKxvNsk1bXWbojsG+VFW5lOUU+1JL2ZeaLpd2EfLuS+XWj4J++lI5lZd57Evl3PYMyVaEVTdT9/PdE/bfAvx6H5mVJPVrNCvNaDuu3+wssRIGCY48jjCjwrTO9i2EmQLWlvgdchokuC1hRodJK1GOlsV+64R/hzDzRpm8fKhw7HZM/hJz0vbswvHPKXnsAvUf+s+rQwgzeUy7H75NmC1nNJvFQVN+drSd2nA+j1jM513LnPenhEE+ByVTacYBifMWA7CHAF9g8oDkTYRVR1/YYh73I8zyMuk6bSbM+DJpefhZ1KkjAN5W8vhrKuZz/5LnmbTdAVxLmCHua8BfEx4KPYbmHgztUSFfNzd0/oMJL6ZMqwtuBf6RMIsWhLp+wzL5K/si1FaEGbBOYba2dIEwY9Kbae7B/FaEmZ2OJ8zKffuM+Vgg9OX+kTDL1A4N5ee4EuefdL814UhC3TbpRa0FQvk5j/D3mNYXq2sI9TB033bVre+eWfP8deRSB00yS/nfTChXxxBmDWtaF237NH3VAWX7GwvAVQ2duyvFvPc9SHAerveQGKuVN4Q+grFaMKQ4DfqL1XLqI+UQq01zMPCnLP/yx+g++wFwMnBYB3krGkqfqo96Iacy1kffO5f7fQhlJdb238tYu365miSHWBv6jbeH0i4s0G7s9/zoXBuA3Vs83yTGYOUZgwVDaD+NwWaXS/uZU/94klzisD6/R8uhvMzjez05tT83TzhHamt7gqK+2ZcqL6eyPIl9qcC+1GxyaBdHcu9L5dKPgv76UrmUl3nrSw2h7RmahxIGm06bMOEG4H2MryQqSbW0NTuUmncR8MDC5z8mLFWuduwMPJYQ0N6L0IG8jrC8+DfYsqz4EB1EmE3pPYTgJbYrIbj7CM2uNKLh2otwP+xDCHZ/Tlj2+pvk9eLvPQgDffcmPNTYijCodx1hZpafdJCHFxGC1KKDCUFj0d6Ea7ovYbDQDYQVys6l+lLlZT0AOBzYkzAz2m2Ea3Qe4ZpJsZ2B/8GWtvFOQnn9MeGB2MaO87OG8ABiDWFGqB0Ig/ZuAX4IXLj4/21aRViV6GDCfb3z4rZAuKduJTxU/B7zcV/tTKiH70t4WWeBUEZ+RigjN3WQhyHVw5BH2zUUudVBsbj8ryb0qX8EnL/4/23ru23PoQ6Q5o2x2uyG1Efouz7XsOTYR8ohVptk7WLe9iVcu1WEuO0WwnPfCwn3XJ/sUy0vhzLWR12d4/0+FLatk+VernKItaHfMjTv7cKngRcUPn+C5lYZqsIYbHbGYFrJcms/c+gfT7OW/OOwNuVWXla6nNqfmwnvX83iqcAXGzpvzuxLzS6nsrwc+1IqI8d2Mee+1FrsR+VWXlayIbU9Q7MjYdD3wYSyvJlwrb5PeMa5qb+sSZL6Fs+8MmmVOGk5zyCUod+a8jM3A2d3kx1pRTmZpXX1LTggX5K6ZD0sSZJS7CNIkiRJw3II4SWpUR/+buBBveZIZRiDSZL6kFP740qCqiOnsixJmg+2PZK0gqxe/keUiWujz7v1kgutBPsv/nfazEaXF35O0uwOiz5fQAiaJEndsB6WJEkp9hEkSZKk4dgGOIWl7zKcBFzUT3ZUgTGYJKkPtj9aKSzLkqSu2fZI0griIMHhuCb67CBBVTXrIME1hC/hJM3uEdHn83vJhSTNL+thSZKUYh9BkiRJGobVwMeARxf2fRb4o15yo6qMwSRJfbD90UphWZYkdc22R5JWEAcJDocrCaopo0GCl0/5mcsJ9cPalvMirSQHAPeK9n2rj4xI0pyyHpYkSSn2ESRJkqRh2A44DXhpYd8XgKOBTb3kSFUYg0mS+mD7o5XCsixJ6pptjyStMA4SHA4HCaop+wE3A7dO+ZnLF/+7/5SfkbRUvOQ6GCxJUpeshyVJUop9BEmSJGkY1gOXFD5/EDgKuLOf7KgiYzBJUh9sf7RSWJYlSV2z7ZEkqSfPBxYK24Z+syNJipzM0nr6FmBVrzmSpPliPSxJklLsI0iSJEnDcgLwnL4zocqMwSRJfbD90UphWZYkdc22R5JWmK37zoBmFq8kuDVwT8KKcJKk/sUzqnybEDRJkrphPSxJklLsI0iSJEnDckLfGVAtxmCSpD7Y/milsCxLkrpm2yNJK4yDBIcjHiQIsBsOEpSkPhwKHBvte0z0+X7AxwufLwZOajNTkjRHrIclSVKKfQRJkiRJ6o4xmCSpD7Y/Wiksy5Kkrtn2SJKUkV1YupzvAnB4rzmSpPn1e4zXycttH+olp5K0MlkPS5KkFPsIkiRJktQdYzBJUh9sf7RSWJYlSV2z7ZGkObC67wxoZrcCd0X7dusjI5KksSXWZ3F+47mQpPllPSxJklLsI0iSJElSd4zBJEl9sP3RSmFZliR1zbZHkqTMXMHS0fnH9JsdSZIkSZIkSZIkSZIkSZIkSZIkSVKfXElwWK6JPruSoCRJkiRJkiRJkiRJkiRJkiRJkiTNMQcJDsu10WcHCUqSJEmSJEmSJEmSJEmSJEmSJEnSHHOQ4LC4kqAkSZIkSZIkSZIkSZIkSZIkSZIk6f9zkOCwrIs+795LLiRJkiRJkiRJkiRJkiRJkiRJkiRJWXCQ4LBcHX3es5dcSJIkSZIkSZIkSZIkSZIkSZIkSZKy4CDBYYkHCe7VSy4kSZIkSZIkSZIkSZIkSZIkSZIkSVlwkOCwuJKgJEmSJEmSJEmSJEmSJEmSJEmSJEkDtQZYiLZdes2RJEmSJEmSJEmSJEmSJEmSJEmSJEmaydbAJpYOEjyw1xxJkiRJkiRJkiRJkiRJkiRJkiRJklgSYrkAAAKiSURBVHqzuu8MqJSNwHXRvr36yIgkSZIkSZIkSZIkSZIkSZIkSZIkqX8OEhyeq6PPDhKUJEmSJEmSJEmSJEmSJEmSJEmSpDnlIMHhiQcJ7tlLLiRJkiRJkiRJkiRJkiRJkiRJkiRJvXOQ4PC4kqAkSZIkSZIkSZIkSZIkSZIkSZIkCXCQ4BBdFX12JUFJkiRJkiRJkiRJkiRJkiRJkiRJmlMOEhweVxKUJEmSJEmSJEmSJEmSJEmSJEmSJAEOEhyieJCgKwlKkiRJkiRJkiRJkiRJkiRJkiRJ0pxykODwuJKgJEmSJEmSJEmSJEmSJEmSJEmSJEkDtTuwUNjW95sdSZIkSZIkSZIkSZIkSZIkSZIkSZJUxh0sHSi4W7/ZkSRJkiRJkiRJkiRJkiRJkiRJkiT1YXXfGVAlV0af9+klF5IkSZIkSZIkSZIkSZIkSZIkSZKkXjlIcJiuiD6v6SUXkiRJkiRJkiRJkiRJkiRJkiRJkqReOUhwmOJBgq4kKEmSJEmSJEmSJEmSJEmSJEmSJElzyEGCw+QgQUmSJEmSJEmSJEmSJEmSJEmSJEmSgwQHykGCkiRJkiRJkiRJkiRJkiRJkiRJkiQHCQ5UPEhwTS+5kCRJkiRJkiRJkiRJkiRJkiRJkiT1ykGCw+RKgpIkSZIkSZIkSZIkSZIkSZIkSZIkDdT2wEJhu7Hf7EiSJEmSJEmSJEmSJEmSJEmSJEmSpDKuZelAwR37zY4kSZIkSZIkSZIkSZIkSZIkSZIkqWur+86AKrsi+rx3L7mQJEmSJEmSJEmSJEmSJEmSJEmSJPXGQYLDFQ8SXNNLLiRJkiRJkiRJkiRJkiRJkiRJkiRJvXGQ4HDFgwT36SUXkiRJkiRJkiRJkiRJkiRJkiRJkqTe/D/SkJdV5hoUkwAAAABJRU5ErkJggg== $$o = \\begin{cases} m \\times depthBiasSlopeFactor + r \\times depthBiasConstantFactor & depthBiasClamp = 0\\ or\\ NaN \\\\ \\min(m \\times depthBiasSlopeFactor + r \\times depthBiasConstantFactor, depthBiasClamp) & depthBiasClamp > 0 \\\\ \\max(m \\times depthBiasSlopeFactor + r \\times depthBiasConstantFactor, depthBiasClamp) & depthBiasClamp \< 0 \\\\ \\end{cases}$$>>
---
--- 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.
--- Fragment depth values are clamped even when the depth buffer uses a
--- floating-point representation.
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_DEPTH_BIAS@ dynamic state enabled
---
--- -   If the
---     <{html_spec_relative}#features-features-depthBiasClamp depth bias clamping>
---     feature is not enabled, @depthBiasClamp@ /must/ be @0.0@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdSetDepthBias" vkCmdSetDepthBias :: ("commandBuffer" ::: VkCommandBuffer) -> ("depthBiasConstantFactor" ::: CFloat) -> ("depthBiasClamp" ::: CFloat) -> ("depthBiasSlopeFactor" ::: CFloat) -> IO ()
--- | vkCmdSetBlendConstants - Set the values of blend constants
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @blendConstants@ is an array of four values specifying the R, G, B,
---     and A components of the blend constant color used in blending,
---     depending on the
---     <{html_spec_relative}#framebuffer-blendfactors blend factor>.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_BLEND_CONSTANTS@ dynamic state enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdSetBlendConstants" vkCmdSetBlendConstants :: ("commandBuffer" ::: VkCommandBuffer) -> ("blendConstants" ::: Ptr CFloat) -> IO ()
--- | vkCmdSetDepthBounds - Set the depth bounds test values for a command
--- buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @minDepthBounds@ is the lower bound of the range of depth values
---     used in the depth bounds test.
---
--- -   @maxDepthBounds@ is the upper bound of the range.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_DEPTH_BOUNDS@ dynamic state enabled
---
--- -   @minDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- -   @maxDepthBounds@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdSetDepthBounds" vkCmdSetDepthBounds :: ("commandBuffer" ::: VkCommandBuffer) -> ("minDepthBounds" ::: CFloat) -> ("maxDepthBounds" ::: CFloat) -> IO ()
--- | vkCmdSetStencilCompareMask - Set the stencil compare mask dynamic state
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
---     set of stencil state for which to update the compare mask.
---
--- -   @compareMask@ is the new value to use as the stencil compare mask.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK@ dynamic state enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
---     values
---
--- -   @faceMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
-foreign import ccall "vkCmdSetStencilCompareMask" vkCmdSetStencilCompareMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("compareMask" ::: Word32) -> IO ()
--- | vkCmdSetStencilWriteMask - Set the stencil write mask dynamic state
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
---     set of stencil state for which to update the write mask, as
---     described above for 'vkCmdSetStencilCompareMask'.
---
--- -   @writeMask@ is the new value to use as the stencil write mask.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_STENCIL_WRITE_MASK@ dynamic state enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
---     values
---
--- -   @faceMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
-foreign import ccall "vkCmdSetStencilWriteMask" vkCmdSetStencilWriteMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("writeMask" ::: Word32) -> IO ()
--- | vkCmdSetStencilReference - Set the stencil reference dynamic state
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
---     set of stencil state for which to update the reference value, as
---     described above for 'vkCmdSetStencilCompareMask'.
---
--- -   @reference@ is the new value to use as the stencil reference value.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   The bound graphics pipeline /must/ have been created with the
---     @VK_DYNAMIC_STATE_STENCIL_REFERENCE@ dynamic state enabled
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
---     values
---
--- -   @faceMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
-foreign import ccall "vkCmdSetStencilReference" vkCmdSetStencilReference :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("reference" ::: Word32) -> IO ()
--- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer that the descriptor sets will
---     be bound to.
---
--- -   @pipelineBindPoint@ is a
---     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' indicating whether
---     the descriptors will be used by graphics pipelines or compute
---     pipelines. There is a separate set of bind points for each of
---     graphics and compute, so binding one does not disturb the other.
---
--- -   @layout@ is a @VkPipelineLayout@ object used to program the
---     bindings.
---
--- -   @firstSet@ is the set number of the first descriptor set to be
---     bound.
---
--- -   @descriptorSetCount@ is the number of elements in the
---     @pDescriptorSets@ array.
---
--- -   @pDescriptorSets@ is an array of handles to @VkDescriptorSet@
---     objects describing the descriptor sets to write to.
---
--- -   @dynamicOffsetCount@ is the number of dynamic offsets in the
---     @pDynamicOffsets@ array.
---
--- -   @pDynamicOffsets@ is a pointer to an array of @uint32_t@ values
---     specifying dynamic offsets.
---
--- = Description
--- #_description#
---
--- @vkCmdBindDescriptorSets@ causes the sets numbered [@firstSet@..
--- @firstSet@+@descriptorSetCount@-1] to use the bindings stored in
--- @pDescriptorSets@[0..@descriptorSetCount@-1] for subsequent rendering
--- commands (either compute or graphics, according to the
--- @pipelineBindPoint@). Any bindings that were previously applied via
--- these sets are no longer valid.
---
--- Once bound, a descriptor set affects rendering of subsequent graphics or
--- compute commands in the command buffer until a different set is bound to
--- the same set number, or else until the set is disturbed as described in
--- <{html_spec_relative}#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 length 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 graphics
--- or compute commands, as defined in the
--- <{html_spec_relative}#descriptorsets-compatibility Pipeline Layout Compatibility>
--- section.
---
--- The descriptor set contents bound by a call to @vkCmdBindDescriptorSets@
--- /may/ be consumed at the following times:
---
--- -   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 and when the command completes
--- executing on the queue.
---
--- The contents of @pDynamicOffsets@ are consumed immediately during
--- execution of @vkCmdBindDescriptorSets@. 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
---     @VkDescriptorSetLayout@ that matches (is the same as, or identically
---     defined as) the @VkDescriptorSetLayout@ 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 @VkPipelineLayoutCreateInfo@::@setLayoutCount@ provided
---     when @layout@ was created
---
--- -   @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s
---     parent @VkCommandPool@’s queue family
---
--- -   Each element of @pDynamicOffsets@ /must/ satisfy the required
---     alignment for the corresponding descriptor binding’s descriptor type
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pipelineBindPoint@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
---
--- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
---
--- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
---     @descriptorSetCount@ valid @VkDescriptorSet@ 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
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSet',
--- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint',
--- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'
-foreign import ccall "vkCmdBindDescriptorSets" vkCmdBindDescriptorSets :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("layout" ::: VkPipelineLayout) -> ("firstSet" ::: Word32) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr VkDescriptorSet) -> ("dynamicOffsetCount" ::: Word32) -> ("pDynamicOffsets" ::: Ptr Word32) -> IO ()
--- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @buffer@ is the buffer being bound.
---
--- -   @offset@ is the starting offset in bytes within @buffer@ used in
---     index buffer address calculations.
---
--- -   @indexType@ is a 'VkIndexType' value specifying whether indices are
---     treated as 16 bits or 32 bits.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @offset@ /must/ be less than the size of @buffer@
---
--- -   The sum of @offset@ and the address of the range of @VkDeviceMemory@
---     object that is backing @buffer@, /must/ be a multiple of the type
---     indicated by @indexType@
---
--- -   @buffer@ /must/ have been created with the
---     @VK_BUFFER_USAGE_INDEX_BUFFER_BIT@ flag
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @buffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @indexType@ /must/ be a valid 'VkIndexType' value
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
---     allocated, or retrieved from the same @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
--- 'VkIndexType'
-foreign import ccall "vkCmdBindIndexBuffer" vkCmdBindIndexBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("indexType" ::: VkIndexType) -> IO ()
--- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @firstBinding@ is the index of the first vertex input binding whose
---     state is updated by the command.
---
--- -   @bindingCount@ is the number of vertex input bindings whose state is
---     updated by the command.
---
--- -   @pBuffers@ is a pointer to an array of buffer handles.
---
--- -   @pOffsets@ is a pointer to an array of buffer offsets.
---
--- = Description
--- #_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.
---
--- == Valid Usage
---
--- -   @firstBinding@ /must/ be less than
---     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
---
--- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or
---     equal to @VkPhysicalDeviceLimits@::@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
---     @VK_BUFFER_USAGE_VERTEX_BUFFER_BIT@ flag
---
--- -   Each element of @pBuffers@ that is non-sparse /must/ be bound
---     completely and contiguously to a single @VkDeviceMemory@ object
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@
---     valid @VkBuffer@ handles
---
--- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@
---     @VkDeviceSize@ values
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- -   @bindingCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and the elements of @pBuffers@ /must/ have
---     been created, allocated, or retrieved from the same @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
-foreign import ccall "vkCmdBindVertexBuffers" vkCmdBindVertexBuffers :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr VkBuffer) -> ("pOffsets" ::: Ptr VkDeviceSize) -> IO ()
--- | vkCmdDraw - Draw primitives
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @vertexCount@ is the number of vertices to draw.
---
--- -   @instanceCount@ is the number of instances to draw.
---
--- -   @firstVertex@ is the index of the first vertex to draw.
---
--- -   @firstInstance@ is the instance ID of the first instance to draw.
---
--- = Description
--- #_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
---
--- -   The current render pass /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   For each set /n/ that is statically used by the @VkPipeline@ bound
---     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
---     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for set /n/, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   For each push constant that is statically used by the @VkPipeline@
---     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
---     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for push constants, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   Descriptors in each bound descriptor set, specified via
---     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
---     used by the bound @VkPipeline@ object, specified via
---     @vkCmdBindPipeline@
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     valid buffers bound
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>
---
--- -   A valid graphics pipeline /must/ be bound to the current command
---     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
---
--- -   If the @VkPipeline@ object bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
---     state /must/ have been set on the current command buffer
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /must/ not be used to sample from any
---     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
---     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
---     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
---     any shader stage
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
---     of this command /must/ be of a format which supports linear
---     filtering, as specified by the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
---     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
---     image) returned by @vkGetPhysicalDeviceFormatProperties@
---
--- -   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.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdDraw" vkCmdDraw :: ("commandBuffer" ::: VkCommandBuffer) -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()
--- | vkCmdDrawIndexed - Issue an indexed draw into a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @indexCount@ is the number of vertices to draw.
---
--- -   @instanceCount@ is the number of instances to draw.
---
--- -   @firstIndex@ is the base index within the index buffer.
---
--- -   @vertexOffset@ is the value added to the vertex index before
---     indexing into the vertex buffer.
---
--- -   @firstInstance@ is the instance ID of the first instance to draw.
---
--- = Description
--- #_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
--- 'vkCmdBindIndexBuffer'::@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 @vkCmdBindIndexBuffer@ 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 @VK_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
---
--- -   The current render pass /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   For each set /n/ that is statically used by the @VkPipeline@ bound
---     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
---     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for set /n/, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   For each push constant that is statically used by the @VkPipeline@
---     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
---     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for push constants, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   Descriptors in each bound descriptor set, specified via
---     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
---     used by the bound @VkPipeline@ object, specified via
---     @vkCmdBindPipeline@
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     valid buffers bound
---
--- -   For a given vertex buffer binding, any attribute data fetched /must/
---     be entirely contained within the corresponding vertex buffer
---     binding, as described in
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>
---
--- -   A valid graphics pipeline /must/ be bound to the current command
---     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
---
--- -   If the @VkPipeline@ object bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
---     state /must/ have been set on the current command buffer
---
--- -   (@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
---     @vkCmdBindIndexBuffer@
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /must/ not be used to sample from any
---     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
---     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
---     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
---     any shader stage
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
---     of this command /must/ be of a format which supports linear
---     filtering, as specified by the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
---     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
---     image) returned by @vkGetPhysicalDeviceFormatProperties@
---
--- -   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.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdDrawIndexed" vkCmdDrawIndexed :: ("commandBuffer" ::: VkCommandBuffer) -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()
--- | vkCmdDrawIndirect - Issue an indirect draw into a command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @buffer@ is the buffer containing draw parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- -   @drawCount@ is the number of draws to execute, and /can/ be zero.
---
--- -   @stride@ is the byte stride between successive sets of draw
---     parameters.
---
--- = Description
--- #_description#
---
--- @vkCmdDrawIndirect@ behaves similarly to 'vkCmdDraw' 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 'VkDrawIndirectCommand' structures. If @drawCount@ is less than
--- or equal to one, @stride@ is ignored.
---
--- == Valid Usage
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @buffer@ /must/ have been created with the
---     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
---     @4@ and /must/ be greater than or equal to
---     @sizeof@(@VkDrawIndirectCommand@)
---
--- -   If the
---     <{html_spec_relative}#features-features-multiDrawIndirect multi-draw indirect>
---     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
---
--- -   If the
---     <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, all the @firstInstance@ members of the
---     @VkDrawIndirectCommand@ structures accessed by this command /must/
---     be @0@
---
--- -   The current render pass /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   For each set /n/ that is statically used by the @VkPipeline@ bound
---     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
---     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for set /n/, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   For each push constant that is statically used by the @VkPipeline@
---     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
---     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for push constants, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   Descriptors in each bound descriptor set, specified via
---     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
---     used by the bound @VkPipeline@ object, specified via
---     @vkCmdBindPipeline@
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     valid buffers bound
---
--- -   A valid graphics pipeline /must/ be bound to the current command
---     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
---
--- -   If the @VkPipeline@ object bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
---     state /must/ have been set on the current command buffer
---
--- -   If @drawCount@ is equal to @1@, (@offset@ +
---     @sizeof@('VkDrawIndirectCommand')) /must/ be less than or equal to
---     the size of @buffer@
---
--- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
---     @offset@ + @sizeof@('VkDrawIndirectCommand')) /must/ be less than or
---     equal to the size of @buffer@
---
--- -   @drawCount@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxDrawIndirectCount@
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /must/ not be used to sample from any
---     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
---     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
---     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
---     any shader stage
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
---     of this command /must/ be of a format which supports linear
---     filtering, as specified by the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
---     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
---     image) returned by @vkGetPhysicalDeviceFormatProperties@
---
--- -   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.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @buffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
-foreign import ccall "vkCmdDrawIndirect" vkCmdDrawIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
--- | vkCmdDrawIndexedIndirect - Perform an indexed indirect draw
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @buffer@ is the buffer containing draw parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- -   @drawCount@ is the number of draws to execute, and /can/ be zero.
---
--- -   @stride@ is the byte stride between successive sets of draw
---     parameters.
---
--- = Description
--- #_description#
---
--- @vkCmdDrawIndexedIndirect@ behaves similarly to 'vkCmdDrawIndexed'
--- 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 'VkDrawIndexedIndirectCommand' structures. If
--- @drawCount@ is less than or equal to one, @stride@ is ignored.
---
--- == Valid Usage
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @buffer@ /must/ have been created with the
---     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
---     @4@ and /must/ be greater than or equal to
---     @sizeof@(@VkDrawIndexedIndirectCommand@)
---
--- -   If the
---     <{html_spec_relative}#features-features-multiDrawIndirect multi-draw indirect>
---     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
---
--- -   If the
---     <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, all the @firstInstance@ members of the
---     @VkDrawIndexedIndirectCommand@ structures accessed by this command
---     /must/ be @0@
---
--- -   The current render pass /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   The subpass index of the current render pass /must/ be equal to the
---     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
---
--- -   For each set /n/ that is statically used by the @VkPipeline@ bound
---     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
---     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for set /n/, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   For each push constant that is statically used by the @VkPipeline@
---     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
---     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
---     @VkPipelineLayout@ that is compatible for push constants, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   Descriptors in each bound descriptor set, specified via
---     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
---     used by the bound @VkPipeline@ object, specified via
---     @vkCmdBindPipeline@
---
--- -   All vertex input bindings accessed via vertex input variables
---     declared in the vertex shader entry point’s interface /must/ have
---     valid buffers bound
---
--- -   A valid graphics pipeline /must/ be bound to the current command
---     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
---
--- -   If the @VkPipeline@ object bound to
---     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
---     state /must/ have been set on the current command buffer
---
--- -   If @drawCount@ is equal to @1@, (@offset@ +
---     @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less than or
---     equal to the size of @buffer@
---
--- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
---     @offset@ + @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less
---     than or equal to the size of @buffer@
---
--- -   @drawCount@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxDrawIndirectCount@
---
--- -   Every input attachment used by the current subpass /must/ be bound
---     to the pipeline via a descriptor set
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /must/ not be used to sample from any
---     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
---     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
---     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
---     any shader stage
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
---     unnormalized coordinates, it /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
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
---     of this command /must/ be of a format which supports linear
---     filtering, as specified by the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
---     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
---     image) returned by @vkGetPhysicalDeviceFormatProperties@
---
--- -   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.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @buffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
-foreign import ccall "vkCmdDrawIndexedIndirect" vkCmdDrawIndexedIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
--- | vkCmdDispatch - Dispatch compute work items
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @groupCountX@ is the number of local workgroups to dispatch in the X
---     dimension.
---
--- -   @groupCountY@ is the number of local workgroups to dispatch in the Y
---     dimension.
---
--- -   @groupCountZ@ is the number of local workgroups to dispatch in the Z
---     dimension.
---
--- = Description
--- #_description#
---
--- When the command is executed, a global workgroup consisting of
--- groupCountX × groupCountY × groupCountZ local workgroups is assembled.
---
--- == Valid Usage
---
--- -   @groupCountX@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0]
---
--- -   @groupCountY@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1]
---
--- -   @groupCountZ@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[2]
---
--- -   For each set /n/ that is statically used by the @VkPipeline@ bound
---     to @VK_PIPELINE_BIND_POINT_COMPUTE@, a descriptor set /must/ have
---     been bound to /n/ at @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
---     @VkPipelineLayout@ that is compatible for set /n/, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   Descriptors in each bound descriptor set, specified via
---     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
---     used by the bound @VkPipeline@ object, specified via
---     @vkCmdBindPipeline@
---
--- -   A valid compute pipeline /must/ be bound to the current command
---     buffer with @VK_PIPELINE_BIND_POINT_COMPUTE@
---
--- -   For each push constant that is statically used by the @VkPipeline@
---     bound to @VK_PIPELINE_BIND_POINT_COMPUTE@, a push constant value
---     /must/ have been set for @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
---     @VkPipelineLayout@ that is compatible for push constants with the
---     one used to create the current @VkPipeline@, as described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
---     unnormalized coordinates, it /must/ not be used to sample from any
---     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
---     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
---     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
---     any shader stage
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
---     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
---     unnormalized coordinates, it /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
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a uniform
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a storage
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
---     of this command /must/ be of a format which supports linear
---     filtering, as specified by the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
---     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
---     image) returned by @vkGetPhysicalDeviceFormatProperties@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Compute         | Compute         |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdDispatch" vkCmdDispatch :: ("commandBuffer" ::: VkCommandBuffer) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()
--- | vkCmdDispatchIndirect - Dispatch compute work items using indirect
--- parameters
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @buffer@ is the buffer containing dispatch parameters.
---
--- -   @offset@ is the byte offset into @buffer@ where parameters begin.
---
--- = Description
--- #_description#
---
--- @vkCmdDispatchIndirect@ behaves similarly to 'vkCmdDispatch' except that
--- the parameters are read by the device from a buffer during execution.
--- The parameters of the dispatch are encoded in a
--- 'VkDispatchIndirectCommand' structure taken from @buffer@ starting at
--- @offset@.
---
--- == Valid Usage
---
--- -   If @buffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   For each set /n/ that is statically used by the @VkPipeline@ bound
---     to @VK_PIPELINE_BIND_POINT_COMPUTE@, a descriptor set /must/ have
---     been bound to /n/ at @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
---     @VkPipelineLayout@ that is compatible for set /n/, with the
---     @VkPipelineLayout@ used to create the current @VkPipeline@, as
---     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   Descriptors in each bound descriptor set, specified via
---     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
---     used by the bound @VkPipeline@ object, specified via
---     @vkCmdBindPipeline@
---
--- -   A valid compute pipeline /must/ be bound to the current command
---     buffer with @VK_PIPELINE_BIND_POINT_COMPUTE@
---
--- -   @buffer@ /must/ have been created with the
---     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   The sum of @offset@ and the size of @VkDispatchIndirectCommand@
---     /must/ be less than or equal to the size of @buffer@
---
--- -   For each push constant that is statically used by the @VkPipeline@
---     bound to @VK_PIPELINE_BIND_POINT_COMPUTE@, a push constant value
---     /must/ have been set for @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
---     @VkPipelineLayout@ that is compatible for push constants with the
---     one used to create the current @VkPipeline@, as described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
---     unnormalized coordinates, it /must/ not be used to sample from any
---     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
---     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
---     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
---     any shader stage
---
--- -   If any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
---     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
---     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
---     unnormalized coordinates, it /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
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a uniform
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
---     feature is not enabled, and any shader stage in the @VkPipeline@
---     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a storage
---     buffer, it /must/ not access values outside of the range of that
---     buffer specified in the bound descriptor set
---
--- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
---     of this command /must/ be of a format which supports linear
---     filtering, as specified by the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
---     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
---     image) returned by @vkGetPhysicalDeviceFormatProperties@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @buffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Compute         | Compute         |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
-foreign import ccall "vkCmdDispatchIndirect" vkCmdDispatchIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> IO ()
--- | vkCmdCopyBuffer - Copy data between buffer regions
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @srcBuffer@ is the source buffer.
---
--- -   @dstBuffer@ is the destination buffer.
---
--- -   @regionCount@ is the number of regions to copy.
---
--- -   @pRegions@ is a pointer to an array of 'VkBufferCopy' structures
---     specifying the regions to copy.
---
--- = Description
--- #_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 result is undefined if
--- the copy regions overlap in memory.
---
--- == Valid Usage
---
--- -   The @size@ member of each element of @pRegions@ /must/ be greater
---     than @0@
---
--- -   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
---     @VK_BUFFER_USAGE_TRANSFER_SRC_BIT@ usage flag
---
--- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @dstBuffer@ /must/ have been created with
---     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @srcBuffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     @VkBufferCopy@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferCopy',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdCopyBuffer" vkCmdCopyBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcBuffer" ::: VkBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferCopy) -> IO ()
--- | vkCmdCopyImage - Copy data between images
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @srcImage@ is the source image.
---
--- -   @srcImageLayout@ is the current layout of the source image
---     subresource.
---
--- -   @dstImage@ is the destination image.
---
--- -   @dstImageLayout@ is the current layout of the destination image
---     subresource.
---
--- -   @regionCount@ is the number of regions to copy.
---
--- -   @pRegions@ is a pointer to an array of 'VkImageCopy' structures
---     specifying the regions to copy.
---
--- = Description
--- #_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 considered compatible if their element size is the same between both
--- formats. For example, @VK_FORMAT_R8G8B8A8_UNORM@ is compatible with
--- @VK_FORMAT_R32_UINT@ because both texels are 4 bytes in size.
--- Depth\/stencil formats /must/ match exactly.
---
--- @vkCmdCopyImage@ allows copying between /size-compatible/ compressed and
--- uncompressed internal formats. Formats are size-compatible if the
--- element size of the uncompressed format is equal to the element size
--- (compressed 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.
---
--- @vkCmdCopyImage@ /can/ be used to copy image data between multisample
--- images, but both images /must/ have the same number of samples.
---
--- == Valid Usage
---
--- -   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 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
---     @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
---
--- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @srcImageLayout@ /must/ specify the layout of the image subresources
---     of @srcImage@ specified in @pRegions@ at the time this command is
---     executed on a @VkDevice@
---
--- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   @dstImage@ /must/ have been created with
---     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @dstImageLayout@ /must/ specify the layout of the image subresources
---     of @dstImage@ specified in @pRegions@ at the time this command is
---     executed on a @VkDevice@
---
--- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   The 'Graphics.Vulkan.Core10.Core.VkFormat' of each of @srcImage@ and
---     @dstImage@ /must/ be compatible, as defined
---     <{html_spec_relative}#copies-images-format-compatibility below>
---
--- -   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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @srcOffset@ and 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
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
---
--- -   The @dstOffset@ and 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
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @srcImage@ /must/ be a valid @VkImage@ handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @dstImage@ /must/ be a valid @VkImage@ handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid @VkImageCopy@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkImageCopy',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
-foreign import ccall "vkCmdCopyImage" vkCmdCopyImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageCopy) -> IO ()
--- | vkCmdBlitImage - Copy regions of an image, potentially performing format
--- conversion,
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @srcImage@ is the source image.
---
--- -   @srcImageLayout@ is the layout of the source image subresources for
---     the blit.
---
--- -   @dstImage@ is the destination image.
---
--- -   @dstImageLayout@ is the layout of the destination image subresources
---     for the blit.
---
--- -   @regionCount@ is the number of regions to blit.
---
--- -   @pRegions@ is a pointer to an array of 'VkImageBlit' structures
---     specifying the regions to blit.
---
--- -   @filter@ is a 'Graphics.Vulkan.Core10.Sampler.VkFilter' specifying
---     the filter to apply if the blits require scaling.
---
--- = Description
--- #_description#
---
--- @vkCmdBlitImage@ /must/ not be used for multisampled source or
--- destination images. Use 'vkCmdResolveImage' 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
---     <{html_spec_relative}#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:
---
---     []
---         scale_u = (xsrc1 - xsrc0) \/ (xdst1 - xdst0)
---
---     []
---         scale_v = (ysrc1 - ysrc0) \/ (ydst1 - ydst0)
---
---     []
---         scale_w = (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 <{html_spec_relative}#textures Image Operations chapter>, with the
--- filter mode equal to that of @filter@, a mipmap mode of
--- @VK_SAMPLER_MIPMAP_MODE_NEAREST@ and an address mode of
--- @VK_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.
---
--- 3D textures are blitted slice by slice. Slices in the source region
--- bounded by @srcOffsets@[0].@z@ and @srcOffsets@[1].@z@ are copied to
--- slices in the destination region bounded by @dstOffsets@[0].@z@ and
--- @dstOffsets@[1].@z@. For each destination slice, a source __z__
--- coordinate is linearly interpolated between @srcOffsets@[0].@z@ and
--- @srcOffsets@[1].@z@. If the @filter@ parameter is @VK_FILTER_LINEAR@
--- then the value sampled from the source image is taken by doing linear
--- filtering using the interpolated __z__ coordinate. If @filter@ parameter
--- is @VK_FILTER_NEAREST@ then value sampled from the source image is taken
--- from the single nearest slice (with undefined 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
---
--- -   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
---
--- -   @srcImage@ /must/ use a format that supports
---     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@, which is indicated by
---     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
---     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
---     optimally tiled images) - as returned by
---     @vkGetPhysicalDeviceFormatProperties@
---
--- -   @srcImage@ /must/ have been created with
---     @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
---
--- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @srcImageLayout@ /must/ specify the layout of the image subresources
---     of @srcImage@ specified in @pRegions@ at the time this command is
---     executed on a @VkDevice@
---
--- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   @dstImage@ /must/ use a format that supports
---     @VK_FORMAT_FEATURE_BLIT_DST_BIT@, which is indicated by
---     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
---     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
---     optimally tiled images) - as returned by
---     @vkGetPhysicalDeviceFormatProperties@
---
--- -   @dstImage@ /must/ have been created with
---     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @dstImageLayout@ /must/ specify the layout of the image subresources
---     of @dstImage@ specified in @pRegions@ at the time this command is
---     executed on a @VkDevice@
---
--- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   The sample count of @srcImage@ and @dstImage@ /must/ both be equal
---     to @VK_SAMPLE_COUNT_1_BIT@
---
--- -   If either of @srcImage@ or @dstImage@ was created with a signed
---     integer 'Graphics.Vulkan.Core10.Core.VkFormat', the other /must/
---     also have been created with a signed integer
---     'Graphics.Vulkan.Core10.Core.VkFormat'
---
--- -   If either of @srcImage@ or @dstImage@ was created with an unsigned
---     integer 'Graphics.Vulkan.Core10.Core.VkFormat', the other /must/
---     also have been created with an unsigned integer
---     'Graphics.Vulkan.Core10.Core.VkFormat'
---
--- -   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 @VK_FILTER_NEAREST@
---
--- -   @srcImage@ /must/ have been created with a @samples@ value of
---     @VK_SAMPLE_COUNT_1_BIT@
---
--- -   @dstImage@ /must/ have been created with a @samples@ value of
---     @VK_SAMPLE_COUNT_1_BIT@
---
--- -   If @filter@ is @VK_FILTER_LINEAR@, @srcImage@ /must/ be of a format
---     which supports linear filtering, as specified by the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
---     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
---     image) returned by @vkGetPhysicalDeviceFormatProperties@
---
--- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
---     created
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @srcImage@ /must/ be a valid @VkImage@ handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @dstImage@ /must/ be a valid @VkImage@ handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid @VkImageBlit@ structures
---
--- -   @filter@ /must/ be a valid 'Graphics.Vulkan.Core10.Sampler.VkFilter'
---     value
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        | Transfer        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Sampler.VkFilter',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkImageBlit',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
-foreign import ccall "vkCmdBlitImage" vkCmdBlitImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageBlit) -> ("filter" ::: VkFilter) -> IO ()
--- | vkCmdCopyBufferToImage - Copy data from a buffer into an image
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @srcBuffer@ is the source buffer.
---
--- -   @dstImage@ is the destination image.
---
--- -   @dstImageLayout@ is the layout of the destination image subresources
---     for the copy.
---
--- -   @regionCount@ is the number of regions to copy.
---
--- -   @pRegions@ is a pointer to an array of 'VkBufferImageCopy'
---     structures specifying the regions to copy.
---
--- = Description
--- #_description#
---
--- Each region in @pRegions@ is copied from the specified region of the
--- source buffer to the specified region of the destination image.
---
--- == Valid Usage
---
--- -   The buffer region specified by each element of @pRegions@ /must/ be
---     a region that is contained within @srcBuffer@
---
--- -   The image region specified by each element of @pRegions@ /must/ be a
---     region that is contained within @dstImage@
---
--- -   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
---     @VK_BUFFER_USAGE_TRANSFER_SRC_BIT@ usage flag
---
--- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @dstImage@ /must/ have been created with
---     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @dstImage@ /must/ have a sample count equal to
---     @VK_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 @VkDevice@
---
--- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
---     created
---
--- -   The @imageOffset@ and 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
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @srcBuffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @dstImage@ /must/ be a valid @VkImage@ handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid @VkBufferImageCopy@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferImageCopy',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
-foreign import ccall "vkCmdCopyBufferToImage" vkCmdCopyBufferToImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcBuffer" ::: VkBuffer) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferImageCopy) -> IO ()
--- | vkCmdCopyImageToBuffer - Copy image data into a buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @srcImage@ is the source image.
---
--- -   @srcImageLayout@ is the layout of the source image subresources for
---     the copy.
---
--- -   @dstBuffer@ is the destination buffer.
---
--- -   @regionCount@ is the number of regions to copy.
---
--- -   @pRegions@ is a pointer to an array of 'VkBufferImageCopy'
---     structures specifying the regions to copy.
---
--- = Description
--- #_description#
---
--- Each region in @pRegions@ is copied from the specified region of the
--- source image to the specified region of the destination buffer.
---
--- == Valid Usage
---
--- -   The image region specified by each element of @pRegions@ /must/ be a
---     region that is contained within @srcImage@
---
--- -   The buffer region specified by each element of @pRegions@ /must/ be
---     a region that is contained within @dstBuffer@
---
--- -   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
---     @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
---
--- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @srcImage@ /must/ have a sample count equal to
---     @VK_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 @VkDevice@
---
--- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   @dstBuffer@ /must/ have been created with
---     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @imageOffset@ and 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
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @srcImage@ /must/ be a valid @VkImage@ handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid @VkBufferImageCopy@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferImageCopy',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
-foreign import ccall "vkCmdCopyImageToBuffer" vkCmdCopyImageToBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstBuffer" ::: VkBuffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferImageCopy) -> IO ()
--- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @dstBuffer@ is a handle to the buffer to be updated.
---
--- -   @dstOffset@ is the byte offset into the buffer to start updating,
---     and /must/ be a multiple of 4.
---
--- -   @dataSize@ is the number of bytes to update, and /must/ be a
---     multiple of 4.
---
--- -   @pData@ is a pointer to the source data for the buffer update, and
---     /must/ be at least @dataSize@ bytes in size.
---
--- = Description
--- #_description#
---
--- @dataSize@ /must/ be less than or equal to 65536 bytes. For larger
--- updates, applications /can/ use buffer to buffer
--- <{html_spec_relative}#copies-buffers copies>.
---
--- __Note__
---
--- Buffer updates performed with @vkCmdUpdateBuffer@ 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
--- <{html_spec_relative}#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
--- @vkCmdUpdateBuffer@ 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.
---
--- @vkCmdUpdateBuffer@ is only allowed outside of a render pass. This
--- command is treated as “transfer” operation, for the purposes of
--- synchronization barriers. The @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ /must/
--- be specified in @usage@ of
--- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo' in order for the
--- buffer to be compatible with @vkCmdUpdateBuffer@.
---
--- == 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
---     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @dstOffset@ /must/ be a multiple of @4@
---
--- -   @dataSize@ /must/ be less than or equal to @65536@
---
--- -   @dataSize@ /must/ be a multiple of @4@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
-foreign import ccall "vkCmdUpdateBuffer" vkCmdUpdateBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("dataSize" ::: VkDeviceSize) -> ("pData" ::: Ptr ()) -> IO ()
--- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @dstBuffer@ is the buffer to be filled.
---
--- -   @dstOffset@ is the byte offset into the buffer at which to start
---     filling, and /must/ be a multiple of 4.
---
--- -   @size@ is the number of bytes to fill, and /must/ be either a
---     multiple of 4, or @VK_WHOLE_SIZE@ to fill the range from @offset@ to
---     the end of the buffer. If @VK_WHOLE_SIZE@ is used and the remaining
---     size of the buffer is not a multiple of 4, then the nearest smaller
---     multiple is used.
---
--- -   @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.
---
--- = Description
--- #_description#
---
--- @vkCmdFillBuffer@ is treated as “transfer” operation for the purposes of
--- synchronization barriers. The @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ /must/
--- be specified in @usage@ of @VkBufferCreateInfo@ in order for the buffer
--- to be compatible with @vkCmdFillBuffer@.
---
--- == Valid Usage
---
--- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
---
--- -   @dstOffset@ /must/ be a multiple of @4@
---
--- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be greater
---     than @0@
---
--- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be less
---     than or equal to the size of @dstBuffer@ minus @dstOffset@
---
--- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be a
---     multiple of @4@
---
--- -   @dstBuffer@ /must/ have been created with
---     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics or compute operations
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
-foreign import ccall "vkCmdFillBuffer" vkCmdFillBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("size" ::: VkDeviceSize) -> ("data" ::: Word32) -> IO ()
--- | vkCmdClearColorImage - Clear regions of a color image
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @image@ is the image to be cleared.
---
--- -   @imageLayout@ specifies the current layout of the image subresource
---     ranges to be cleared, and /must/ be @VK_IMAGE_LAYOUT_GENERAL@ or
---     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@.
---
--- -   @pColor@ is a pointer to a 'VkClearColorValue' structure that
---     contains the values the image subresource ranges will be cleared to
---     (see
---     <{html_spec_relative}#clears-values {html_spec_relative}#clears-values>
---     below).
---
--- -   @rangeCount@ is the number of image subresource range structures in
---     @pRanges@.
---
--- -   @pRanges@ points to an array of
---     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
---     structures that describe a range of mipmap levels, array layers, and
---     aspects to be cleared, as described in
---     <{html_spec_relative}#resources-image-views Image Views>. The
---     @aspectMask@ of all image subresource ranges /must/ only include
---     @VK_IMAGE_ASPECT_COLOR_BIT@.
---
--- = Description
--- #_description#
---
--- Each specified range in @pRanges@ is cleared to the value specified by
--- @pColor@.
---
--- == Valid Usage
---
--- -   @image@ /must/ have been created with
---     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @image@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ 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 @VkDevice@
---
--- -   @imageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   The
---     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseMipLevel@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
---     element of @pRanges@, if the @levelCount@ member is not
---     @VK_REMAINING_MIP_LEVELS@, then @baseMipLevel@ + @levelCount@ /must/
---     be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   The
---     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseArrayLayer@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
---     element of @pRanges@, if the @layerCount@ member is not
---     @VK_REMAINING_ARRAY_LAYERS@, then @baseArrayLayer@ + @layerCount@
---     /must/ be less than the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   @image@ /must/ not have a compressed or depth\/stencil format
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @image@ /must/ be a valid @VkImage@ handle
---
--- -   @imageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @pColor@ /must/ be a valid pointer to a valid @VkClearColorValue@
---     union
---
--- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
---     valid @VkImageSubresourceRange@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        | Transfer        |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'VkClearColorValue', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
--- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-foreign import ccall "vkCmdClearColorImage" vkCmdClearColorImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("image" ::: VkImage) -> ("imageLayout" ::: VkImageLayout) -> ("pColor" ::: Ptr VkClearColorValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr VkImageSubresourceRange) -> IO ()
--- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil
--- image
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @image@ is the image to be cleared.
---
--- -   @imageLayout@ specifies the current layout of the image subresource
---     ranges to be cleared, and /must/ be @VK_IMAGE_LAYOUT_GENERAL@ or
---     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@.
---
--- -   @pDepthStencil@ is a pointer to a 'VkClearDepthStencilValue'
---     structure that contains the values the depth and stencil image
---     subresource ranges will be cleared to (see
---     <{html_spec_relative}#clears-values {html_spec_relative}#clears-values>
---     below).
---
--- -   @rangeCount@ is the number of image subresource range structures in
---     @pRanges@.
---
--- -   @pRanges@ points to an array of
---     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
---     structures that describe a range of mipmap levels, array layers, and
---     aspects to be cleared, as described in
---     <{html_spec_relative}#resources-image-views Image Views>. The
---     @aspectMask@ of each image subresource range in @pRanges@ /can/
---     include @VK_IMAGE_ASPECT_DEPTH_BIT@ if the image format has a depth
---     component, and @VK_IMAGE_ASPECT_STENCIL_BIT@ if the image format has
---     a stencil component. @pDepthStencil@ is a pointer to a
---     @VkClearDepthStencilValue@ structure that contains the values the
---     image subresource ranges will be cleared to (see
---     <{html_spec_relative}#clears-values {html_spec_relative}#clears-values>
---     below).
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @image@ /must/ have been created with
---     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @image@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ 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 @VkDevice@
---
--- -   @imageLayout@ /must/ be either of
---     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   The
---     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseMipLevel@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
---     element of @pRanges@, if the @levelCount@ member is not
---     @VK_REMAINING_MIP_LEVELS@, then @baseMipLevel@ + @levelCount@ /must/
---     be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   The
---     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseArrayLayer@
---     members of the elements of the @pRanges@ array /must/ each be less
---     than the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
---     element of @pRanges@, if the @layerCount@ member is not
---     @VK_REMAINING_ARRAY_LAYERS@, then @baseArrayLayer@ + @layerCount@
---     /must/ be less than the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   @image@ /must/ have a depth\/stencil format
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @image@ /must/ be a valid @VkImage@ handle
---
--- -   @imageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @pDepthStencil@ /must/ be a valid pointer to a valid
---     @VkClearDepthStencilValue@ structure
---
--- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
---     valid @VkImageSubresourceRange@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        | Transfer        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'VkClearDepthStencilValue',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
--- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
-foreign import ccall "vkCmdClearDepthStencilImage" vkCmdClearDepthStencilImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("image" ::: VkImage) -> ("imageLayout" ::: VkImageLayout) -> ("pDepthStencil" ::: Ptr VkClearDepthStencilValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr VkImageSubresourceRange) -> IO ()
--- | vkCmdClearAttachments - Clear regions within bound framebuffer
--- attachments
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @attachmentCount@ is the number of entries in the @pAttachments@
---     array.
---
--- -   @pAttachments@ is a pointer to an array of 'VkClearAttachment'
---     structures defining the attachments to clear and the clear values to
---     use.
---
--- -   @rectCount@ is the number of entries in the @pRects@ array.
---
--- -   @pRects@ points to an array of 'VkClearRect' structures defining
---     regions within each selected attachment to clear.
---
--- = Description
--- #_description#
---
--- @vkCmdClearAttachments@ /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.
---
--- == Valid Usage
---
--- -   If the @aspectMask@ member of any element of @pAttachments@ contains
---     @VK_IMAGE_ASPECT_COLOR_BIT@, the @colorAttachment@ member of that
---     element /must/ refer to a valid color attachment in the current
---     subpass
---
--- -   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
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pAttachments@ /must/ be a valid pointer to an array of
---     @attachmentCount@ valid @VkClearAttachment@ structures
---
--- -   @pRects@ /must/ be a valid pointer to an array of @rectCount@
---     @VkClearRect@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'VkClearAttachment', 'VkClearRect',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdClearAttachments" vkCmdClearAttachments :: ("commandBuffer" ::: VkCommandBuffer) -> ("attachmentCount" ::: Word32) -> ("pAttachments" ::: Ptr VkClearAttachment) -> ("rectCount" ::: Word32) -> ("pRects" ::: Ptr VkClearRect) -> IO ()
--- | vkCmdResolveImage - Resolve regions of an image
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @srcImage@ is the source image.
---
--- -   @srcImageLayout@ is the layout of the source image subresources for
---     the resolve.
---
--- -   @dstImage@ is the destination image.
---
--- -   @dstImageLayout@ is the layout of the destination image subresources
---     for the resolve.
---
--- -   @regionCount@ is the number of regions to resolve.
---
--- -   @pRegions@ is a pointer to an array of 'VkImageResolve' structures
---     specifying the regions to resolve.
---
--- = Description
--- #_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@.
---
--- 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
---
--- -   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 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 @VkDeviceMemory@ object
---
--- -   @srcImage@ /must/ have a sample count equal to any valid sample
---     count value other than @VK_SAMPLE_COUNT_1_BIT@
---
--- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   @dstImage@ /must/ have a sample count equal to
---     @VK_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 @VkDevice@
---
--- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or
---     @VK_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 @VkDevice@
---
--- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or
---     @VK_IMAGE_LAYOUT_GENERAL@
---
--- -   If @dstImage@ was created with @tiling@ equal to
---     @VK_IMAGE_TILING_LINEAR@, @dstImage@ /must/ have been created with a
---     @format@ that supports being a color attachment, as specified by the
---     @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ returned by
---     @vkGetPhysicalDeviceFormatProperties@
---
--- -   If @dstImage@ was created with @tiling@ equal to
---     @VK_IMAGE_TILING_OPTIMAL@, @dstImage@ /must/ have been created with
---     a @format@ that supports being a color attachment, as specified by
---     the @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
---     @VkFormatProperties@::@optimalTilingFeatures@ returned by
---     @vkGetPhysicalDeviceFormatProperties@
---
--- -   @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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
---     created
---
--- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
---     /must/ be less than the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
---     created
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @srcImage@ /must/ be a valid @VkImage@ handle
---
--- -   @srcImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @dstImage@ /must/ be a valid @VkImage@ handle
---
--- -   @dstImageLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
---     valid @VkImageResolve@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        | Transfer        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout', 'VkImageResolve'
-foreign import ccall "vkCmdResolveImage" vkCmdResolveImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageResolve) -> IO ()
--- | vkCmdSetEvent - Set an event object to signaled state
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @event@ is the event that will be signaled.
---
--- -   @stageMask@ specifies the
---     <{html_spec_relative}#synchronization-pipeline-stages source stage mask>
---     used to determine when the @event@ is signaled.
---
--- = Description
--- #_description#
---
--- When 'vkCmdSetEvent' 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
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur earlier in
--- <{html_spec_relative}#synchronization-submission-order submission order>.
--- The synchronization scope is limited to operations on the pipeline
--- stages determined by the
--- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
--- specified by @stageMask@.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes only the event signal operation.
---
--- If @event@ is already in the signaled state when 'vkCmdSetEvent' is
--- executed on the device, then 'vkCmdSetEvent' has no effect, no event
--- signal operation occurs, and no execution dependency is generated.
---
--- == Valid Usage
---
--- -   @stageMask@ /must/ not include @VK_PIPELINE_STAGE_HOST_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
---     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @event@ /must/ be a valid @VkEvent@ handle
---
--- -   @stageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
---
--- -   @stageMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Event.VkEvent',
--- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
-foreign import ccall "vkCmdSetEvent" vkCmdSetEvent :: ("commandBuffer" ::: VkCommandBuffer) -> ("event" ::: VkEvent) -> ("stageMask" ::: VkPipelineStageFlags) -> IO ()
--- | vkCmdResetEvent - Reset an event object to non-signaled state
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @event@ is the event that will be unsignaled.
---
--- -   @stageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
---     the
---     <{html_spec_relative}#synchronization-pipeline-stages source stage mask>
---     used to determine when the @event@ is unsignaled.
---
--- = Description
--- #_description#
---
--- When 'vkCmdResetEvent' 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
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur earlier in
--- <{html_spec_relative}#synchronization-submission-order submission order>.
--- The synchronization scope is limited to operations on the pipeline
--- stages determined by the
--- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
--- specified by @stageMask@.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes only the event unsignal operation.
---
--- If @event@ is already in the unsignaled state when 'vkCmdResetEvent' is
--- executed on the device, then 'vkCmdResetEvent' has no effect, no event
--- unsignal operation occurs, and no execution dependency is generated.
---
--- == Valid Usage
---
--- -   @stageMask@ /must/ not include @VK_PIPELINE_STAGE_HOST_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @stageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
---     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
---
--- -   When this command executes, @event@ /must/ not be waited on by a
---     @vkCmdWaitEvents@ command that is currently executing
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @event@ /must/ be a valid @VkEvent@ handle
---
--- -   @stageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
---
--- -   @stageMask@ /must/ not be @0@
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Event.VkEvent',
--- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
-foreign import ccall "vkCmdResetEvent" vkCmdResetEvent :: ("commandBuffer" ::: VkCommandBuffer) -> ("event" ::: VkEvent) -> ("stageMask" ::: VkPipelineStageFlags) -> IO ()
--- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @eventCount@ is the length of the @pEvents@ array.
---
--- -   @pEvents@ is an array of event object handles to wait on.
---
--- -   @srcStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
---     the
---     <{html_spec_relative}#synchronization-pipeline-stages source stage mask>.
---
--- -   @dstStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
---     the
---     <{html_spec_relative}#synchronization-pipeline-stages destination stage mask>.
---
--- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
---
--- -   @pMemoryBarriers@ is a pointer to an array of 'VkMemoryBarrier'
---     structures.
---
--- -   @bufferMemoryBarrierCount@ is the length of the
---     @pBufferMemoryBarriers@ array.
---
--- -   @pBufferMemoryBarriers@ is a pointer to an array of
---     'VkBufferMemoryBarrier' structures.
---
--- -   @imageMemoryBarrierCount@ is the length of the
---     @pImageMemoryBarriers@ array.
---
--- -   @pImageMemoryBarriers@ is a pointer to an array of
---     'VkImageMemoryBarrier' structures.
---
--- = Description
--- #_description#
---
--- When @vkCmdWaitEvents@ 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. @vkCmdWaitEvents@ /must/ not be used
--- to wait on event signal operations occuring 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 'vkCmdSetEvent' that occur earlier in
--- <{html_spec_relative}#synchronization-submission-order submission order>
--- are included in the first synchronization scope, if the
--- <{html_spec_relative}#synchronization-pipeline-stages-order logically latest>
--- pipeline stage in their @stageMask@ parameter is
--- <{html_spec_relative}#synchronization-pipeline-stages-order logically earlier>
--- than or equal to the
--- <{html_spec_relative}#synchronization-pipeline-stages-order logically latest>
--- pipeline stage in @srcStageMask@. Event signal operations performed by
--- 'Graphics.Vulkan.Core10.Event.vkSetEvent' are only included in the first
--- synchronization scope if @VK_PIPELINE_STAGE_HOST_BIT@ is included in
--- @srcStageMask@.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur later in
--- <{html_spec_relative}#synchronization-submission-order submission order>.
--- The second synchronization scope is limited to operations on the
--- pipeline stages determined by the
--- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@.
---
--- The first
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <{html_spec_relative}#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
--- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the first access scope
--- includes no accesses.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <{html_spec_relative}#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
--- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the second access scope
--- includes no accesses.
---
--- __Note__
---
--- 'vkCmdWaitEvents' is used with 'vkCmdSetEvent' 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.
---
--- __Note__
---
--- Applications /should/ be careful to avoid race conditions when using
--- events. There is no direct ordering guarantee between a
--- 'vkCmdResetEvent' command and a 'vkCmdWaitEvents' command submitted
--- after it, so some other execution dependency /must/ be included between
--- these commands (e.g. a semaphore).
---
--- == Valid Usage
---
--- -   @srcStageMask@ /must/ be the bitwise OR of the @stageMask@ parameter
---     used in previous calls to @vkCmdSetEvent@ with any of the members of
---     @pEvents@ and @VK_PIPELINE_STAGE_HOST_BIT@ if any of the members of
---     @pEvents@ was set using @vkSetEvent@
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
---     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
---     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
---
--- -   If @pEvents@ includes one or more events that will be signaled by
---     @vkSetEvent@ after @commandBuffer@ has been submitted to a queue,
---     then @vkCmdWaitEvents@ /must/ not be called inside a render pass
---     instance
---
--- -   Any pipeline stage included in @srcStageMask@ or @dstStageMask@
---     /must/ be supported by the capabilities of the queue family
---     specified by the @queueFamilyIndex@ member of the
---     'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo'
---     structure that was used to create the @VkCommandPool@ that
---     @commandBuffer@ was allocated from, as specified in the
---     <{html_spec_relative}#synchronization-pipeline-stages-supported table of supported pipeline stages>.
---
--- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ or
---     @pImageMemoryBarriers@ /must/ not have any access flag included in
---     its @srcAccessMask@ member if that bit is not supported by any of
---     the pipeline stages in @srcStageMask@, as specified in the
---     <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
---
--- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ or
---     @pImageMemoryBarriers@ /must/ not have any access flag included in
---     its @dstAccessMask@ member if that bit is not supported by any of
---     the pipeline stages in @dstStageMask@, as specified in the
---     <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pEvents@ /must/ be a valid pointer to an array of @eventCount@
---     valid @VkEvent@ handles
---
--- -   @srcStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
---
--- -   @srcStageMask@ /must/ not be @0@
---
--- -   @dstStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
---
--- -   @dstStageMask@ /must/ not be @0@
---
--- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
---     valid pointer to an array of @memoryBarrierCount@ valid
---     @VkMemoryBarrier@ structures
---
--- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
---     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
---     valid @VkBufferMemoryBarrier@ structures
---
--- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
---     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
---     valid @VkImageMemoryBarrier@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'VkBufferMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Event.VkEvent', 'VkImageMemoryBarrier',
--- 'VkMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
-foreign import ccall "vkCmdWaitEvents" vkCmdWaitEvents :: ("commandBuffer" ::: VkCommandBuffer) -> ("eventCount" ::: Word32) -> ("pEvents" ::: Ptr VkEvent) -> ("srcStageMask" ::: VkPipelineStageFlags) -> ("dstStageMask" ::: VkPipelineStageFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr VkMemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr VkBufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr VkImageMemoryBarrier) -> IO ()
--- | vkCmdPipelineBarrier - Insert a memory dependency
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command is
---     recorded.
---
--- -   @srcStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
---     the
---     <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>.
---
--- -   @dstStageMask@ is a bitmask of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
---     the
---     <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>.
---
--- -   @dependencyFlags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Pass.VkDependencyFlagBits' specifying how
---     execution and memory dependencies are formed.
---
--- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
---
--- -   @pMemoryBarriers@ is a pointer to an array of 'VkMemoryBarrier'
---     structures.
---
--- -   @bufferMemoryBarrierCount@ is the length of the
---     @pBufferMemoryBarriers@ array.
---
--- -   @pBufferMemoryBarriers@ is a pointer to an array of
---     'VkBufferMemoryBarrier' structures.
---
--- -   @imageMemoryBarrierCount@ is the length of the
---     @pImageMemoryBarriers@ array.
---
--- -   @pImageMemoryBarriers@ is a pointer to an array of
---     'VkImageMemoryBarrier' structures.
---
--- = Description
--- #_description#
---
--- When 'vkCmdPipelineBarrier' is submitted to a queue, it defines a memory
--- dependency between commands that were submitted before it, and those
--- submitted after it.
---
--- If 'vkCmdPipelineBarrier' was recorded outside a render pass instance,
--- the first
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur earlier in
--- <{html_spec_relative}#synchronization-submission-order submission order>.
--- If 'vkCmdPipelineBarrier' was recorded inside a render pass instance,
--- the first synchronization scope includes only commands that occur
--- earlier in
--- <{html_spec_relative}#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
--- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
--- specified by @srcStageMask@.
---
--- If 'vkCmdPipelineBarrier' was recorded outside a render pass instance,
--- the second
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes all commands that occur later in
--- <{html_spec_relative}#synchronization-submission-order submission order>.
--- If 'vkCmdPipelineBarrier' was recorded inside a render pass instance,
--- the second synchronization scope includes only commands that occur later
--- in
--- <{html_spec_relative}#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
--- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
--- specified by @dstStageMask@.
---
--- The first
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <{html_spec_relative}#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
--- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the first access scope
--- includes no accesses.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <{html_spec_relative}#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
--- <{html_spec_relative}#synchronization-memory-barriers memory barriers>.
--- If no memory barriers are specified, then the second access scope
--- includes no accesses.
---
--- If @dependencyFlags@ includes @VK_DEPENDENCY_BY_REGION_BIT@, then any
--- dependency between
--- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-space>
--- pipeline stages is
--- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-local>
--- - otherwise it is
--- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-global>.
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @srcStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
---     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @dstStageMask@ /must/ not contain
---     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
---     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     the render pass /must/ have been created with a
---     @VkSubpassDependency@ instance in @pDependencies@ that expresses a
---     dependency from the current subpass to itself.
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     @srcStageMask@ /must/ contain a subset of the bit values in the
---     @srcStageMask@ member of that instance of @VkSubpassDependency@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     @dstStageMask@ /must/ contain a subset of the bit values in the
---     @dstStageMask@ member of that instance of @VkSubpassDependency@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     the @srcAccessMask@ of any element of @pMemoryBarriers@ or
---     @pImageMemoryBarriers@ /must/ contain a subset of the bit values the
---     @srcAccessMask@ member of that instance of @VkSubpassDependency@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     the @dstAccessMask@ of any element of @pMemoryBarriers@ or
---     @pImageMemoryBarriers@ /must/ contain a subset of the bit values the
---     @dstAccessMask@ member of that instance of @VkSubpassDependency@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     @dependencyFlags@ /must/ be equal to the @dependencyFlags@ member of
---     that instance of @VkSubpassDependency@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     @bufferMemoryBarrierCount@ /must/ be @0@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     the @image@ member of any element of @pImageMemoryBarriers@ /must/
---     be equal to one of the elements of @pAttachments@ that the current
---     @framebuffer@ was created with, that is also referred to by one of
---     the elements of the @pColorAttachments@, @pResolveAttachments@ or
---     @pDepthStencilAttachment@ members of the @VkSubpassDescription@
---     instance that the current subpass was created with
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     the @oldLayout@ and @newLayout@ members of any element of
---     @pImageMemoryBarriers@ /must/ be equal to the @layout@ member of an
---     element of the @pColorAttachments@, @pResolveAttachments@ or
---     @pDepthStencilAttachment@ members of the @VkSubpassDescription@
---     instance that the current subpass was created with, that refers to
---     the same @image@
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     the @oldLayout@ and @newLayout@ members of an element of
---     @pImageMemoryBarriers@ /must/ be equal
---
--- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
---     the @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
---     element of @pImageMemoryBarriers@ /must/ be
---     @VK_QUEUE_FAMILY_IGNORED@
---
--- -   Any pipeline stage included in @srcStageMask@ or @dstStageMask@
---     /must/ be supported by the capabilities of the queue family
---     specified by the @queueFamilyIndex@ member of the
---     'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo'
---     structure that was used to create the @VkCommandPool@ that
---     @commandBuffer@ was allocated from, as specified in the
---     <{html_spec_relative}#synchronization-pipeline-stages-supported table of supported pipeline stages>.
---
--- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ and
---     @pImageMemoryBarriers@ /must/ not have any access flag included in
---     its @srcAccessMask@ member if that bit is not supported by any of
---     the pipeline stages in @srcStageMask@, as specified in the
---     <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
---
--- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ and
---     @pImageMemoryBarriers@ /must/ not have any access flag included in
---     its @dstAccessMask@ member if that bit is not supported by any of
---     the pipeline stages in @dstStageMask@, as specified in the
---     <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @srcStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
---
--- -   @srcStageMask@ /must/ not be @0@
---
--- -   @dstStageMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
---
--- -   @dstStageMask@ /must/ not be @0@
---
--- -   @dependencyFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pass.VkDependencyFlagBits' values
---
--- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
---     valid pointer to an array of @memoryBarrierCount@ valid
---     @VkMemoryBarrier@ structures
---
--- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
---     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
---     valid @VkBufferMemoryBarrier@ structures
---
--- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
---     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
---     valid @VkImageMemoryBarrier@ structures
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Transfer        |                 |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'VkBufferMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Pass.VkDependencyFlags', 'VkImageMemoryBarrier',
--- 'VkMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
-foreign import ccall "vkCmdPipelineBarrier" vkCmdPipelineBarrier :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcStageMask" ::: VkPipelineStageFlags) -> ("dstStageMask" ::: VkPipelineStageFlags) -> ("dependencyFlags" ::: VkDependencyFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr VkMemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr VkBufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr VkImageMemoryBarrier) -> IO ()
--- | vkCmdBeginQuery - Begin a query
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @queryPool@ is the query pool that will manage the results of the
---     query.
---
--- -   @query@ is the query index within the query pool that will contain
---     the results.
---
--- -   @flags@ is a bitmask of
---     'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlagBits'
---     specifying constraints on the types of queries that /can/ be
---     performed.
---
--- = Description
--- #_description#
---
--- If the @queryType@ of the pool is @VK_QUERY_TYPE_OCCLUSION@ and @flags@
--- contains @VK_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
--- <{html_spec_relative}#queries-occlusion Occlusion Queries>.
---
--- 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
---     <{html_spec_relative}#queries-operation-active active> within
---     @commandBuffer@
---
--- -   All queries used by the command /must/ be unavailable
---
--- -   If the
---     <{html_spec_relative}#features-features-occlusionQueryPrecise precise occlusion queries>
---     feature is not enabled, or the @queryType@ used to create
---     @queryPool@ was not @VK_QUERY_TYPE_OCCLUSION@, @flags@ /must/ not
---     contain @VK_QUERY_CONTROL_PRECISE_BIT@
---
--- -   @query@ /must/ be less than the number of queries in @queryPool@
---
--- -   If the @queryType@ used to create @queryPool@ was
---     @VK_QUERY_TYPE_OCCLUSION@, the @VkCommandPool@ that @commandBuffer@
---     was allocated from /must/ support graphics operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     @VK_QUERY_TYPE_PIPELINE_STATISTICS@ and any of the
---     @pipelineStatistics@ indicate graphics operations, the
---     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support graphics operations
---
--- -   If the @queryType@ used to create @queryPool@ was
---     @VK_QUERY_TYPE_PIPELINE_STATISTICS@ and any of the
---     @pipelineStatistics@ indicate compute operations, the
---     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support compute operations
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlagBits' values
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlags',
--- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
-foreign import ccall "vkCmdBeginQuery" vkCmdBeginQuery :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> ("flags" ::: VkQueryControlFlags) -> IO ()
--- | vkCmdEndQuery - Ends a query
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @queryPool@ is the query pool that is managing the results of the
---     query.
---
--- -   @query@ is the query index within the query pool where the result is
---     stored.
---
--- = Description
--- #_description#
---
--- 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
--- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults' and
--- 'vkCmdCopyQueryPoolResults', 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
---     <{html_spec_relative}#queries-operation-active active>
---
--- -   @query@ /must/ be less than the number of queries in @queryPool@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
-foreign import ccall "vkCmdEndQuery" vkCmdEndQuery :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> IO ()
--- | vkCmdResetQueryPool - Reset queries in a query pool
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @queryPool@ is the handle of the query pool managing the queries
---     being reset.
---
--- -   @firstQuery@ is the initial query index to reset.
---
--- -   @queryCount@ is the number of queries to reset.
---
--- = Description
--- #_description#
---
--- When executed on a queue, this command sets the status of query indices
--- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.
---
--- == 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@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
-foreign import ccall "vkCmdResetQueryPool" vkCmdResetQueryPool :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ()
--- | vkCmdWriteTimestamp - Write a device timestamp into a query object
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which the command will be
---     recorded.
---
--- -   @pipelineStage@ is one of the
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits', specifying a
---     stage of the pipeline.
---
--- -   @queryPool@ is the query pool that will manage the timestamp.
---
--- -   @query@ is the query within the query pool that will contain the
---     timestamp.
---
--- = Description
--- #_description#
---
--- @vkCmdWriteTimestamp@ 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.
---
--- 'vkCmdCopyQueryPoolResults' /can/ then be called to copy the timestamp
--- value from the query pool into buffer memory, with ordering and
--- synchronization behavior equivalent to how other queries operate.
--- Timestamp values /can/ also be retrieved from the query pool using
--- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'. As with other
--- queries, the query /must/ be reset using 'vkCmdResetQueryPool' before
--- requesting the timestamp value be written to it.
---
--- While @vkCmdWriteTimestamp@ /can/ be called inside or outside of a
--- render pass instance, 'vkCmdCopyQueryPoolResults' /must/ only be called
--- outside of a render pass instance.
---
--- 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.
---
--- == Valid Usage
---
--- -   @queryPool@ /must/ have been created with a @queryType@ of
---     @VK_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@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pipelineStage@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' value
---
--- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits',
--- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
-foreign import ccall "vkCmdWriteTimestamp" vkCmdWriteTimestamp :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineStage" ::: VkPipelineStageFlagBits) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> IO ()
--- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool
--- to a buffer object
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer into which this command will
---     be recorded.
---
--- -   @queryPool@ is the query pool managing the queries containing the
---     desired results.
---
--- -   @firstQuery@ is the initial query index.
---
--- -   @queryCount@ is the number of queries. @firstQuery@ and @queryCount@
---     together define a range of queries.
---
--- -   @dstBuffer@ is a @VkBuffer@ object that will receive the results of
---     the copy command.
---
--- -   @dstOffset@ is an offset into @dstBuffer@.
---
--- -   @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
---     'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'.
---
--- -   @flags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Query.VkQueryResultFlagBits' specifying how
---     and when results are returned.
---
--- = Description
--- #_description#
---
--- @vkCmdCopyQueryPoolResults@ is guaranteed to see the effect of previous
--- uses of @vkCmdResetQueryPool@ 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 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults', but
--- the different style of execution causes some subtle behavioral
--- differences. Because @vkCmdCopyQueryPoolResults@ executes in order with
--- respect to other query commands, there is less ambiguity about which use
--- of a query is being requested.
---
--- If no bits are set in @flags@, results for all requested queries in the
--- available state are written as 32-bit unsigned integer values, and
--- nothing is written for queries in the unavailable state.
---
--- If @VK_QUERY_RESULT_64_BIT@ is set, the results are written as an array
--- of 64-bit unsigned integer values as described for
--- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'.
---
--- If @VK_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 @VK_ERROR_DEVICE_LOST@ error /may/ occur.
---
--- Similarly, if @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@ is set and
--- @VK_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
--- @vkGetQueryPoolResults@, implementations /must/ guarantee that if they
--- return a non-zero availability value, then the numerical results are
--- valid.
---
--- If @VK_QUERY_RESULT_PARTIAL_BIT@ is set, @VK_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.
---
--- @VK_QUERY_RESULT_PARTIAL_BIT@ /must/ not be used if the pool’s
--- @queryType@ is @VK_QUERY_TYPE_TIMESTAMP@.
---
--- @vkCmdCopyQueryPoolResults@ is considered to be a transfer operation,
--- and its writes to buffer memory /must/ be synchronized using
--- @VK_PIPELINE_STAGE_TRANSFER_BIT@ and @VK_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 @VK_QUERY_RESULT_64_BIT@ is not set in @flags@ then @dstOffset@
---     and @stride@ /must/ be multiples of @4@
---
--- -   If @VK_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
---     <{html_spec_relative}#queries-operation-memorylayout here>
---
--- -   @dstBuffer@ /must/ have been created with
---     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
---
--- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
---     contiguously to a single @VkDeviceMemory@ object
---
--- -   If the @queryType@ used to create @queryPool@ was
---     @VK_QUERY_TYPE_TIMESTAMP@, @flags@ /must/ not contain
---     @VK_QUERY_RESULT_PARTIAL_BIT@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
---
--- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
---
--- -   @flags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Query.VkQueryResultFlagBits' values
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        | Transfer        |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
--- 'Graphics.Vulkan.Core10.Query.VkQueryPool',
--- 'Graphics.Vulkan.Core10.Query.VkQueryResultFlags'
-foreign import ccall "vkCmdCopyQueryPoolResults" vkCmdCopyQueryPoolResults :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("stride" ::: VkDeviceSize) -> ("flags" ::: VkQueryResultFlags) -> IO ()
--- | vkCmdPushConstants - Update the values of push constants
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer in which the push constant
---     update will be recorded.
---
--- -   @layout@ is the pipeline layout used to program the push constant
---     updates.
---
--- -   @stageFlags@ is a bitmask of
---     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' specifying
---     the shader stages that will use the push constants in the updated
---     range.
---
--- -   @offset@ is the start offset of the push constant range to update,
---     in units of bytes.
---
--- -   @size@ is the size of the push constant range to update, in units of
---     bytes.
---
--- -   @pValues@ is an array of @size@ bytes containing the new push
---     constant values.
---
--- = Description
--- #_description#
---
--- == 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
---     'Graphics.Vulkan.Core10.PipelineLayout.VkPushConstantRange'::@stageFlags@
---
--- -   @offset@ /must/ be a multiple of @4@
---
--- -   @size@ /must/ be a multiple of @4@
---
--- -   @offset@ /must/ be less than
---     @VkPhysicalDeviceLimits@::@maxPushConstantsSize@
---
--- -   @size@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxPushConstantsSize@ minus @offset@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
---
--- -   @stageFlags@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' values
---
--- -   @stageFlags@ /must/ not be @0@
---
--- -   @pValues@ /must/ be a valid pointer to an array of @size@ bytes
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout',
--- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags'
-foreign import ccall "vkCmdPushConstants" vkCmdPushConstants :: ("commandBuffer" ::: VkCommandBuffer) -> ("layout" ::: VkPipelineLayout) -> ("stageFlags" ::: VkShaderStageFlags) -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("pValues" ::: Ptr ()) -> IO ()
--- | vkCmdBeginRenderPass - Begin a new render pass
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer in which to record the
---     command.
---
--- -   @pRenderPassBegin@ is a pointer to a 'VkRenderPassBeginInfo'
---     structure (defined below) which specifies the render pass to begin
---     an instance of, and the framebuffer the instance uses.
---
--- -   @contents@ is a 'VkSubpassContents' value specifying how the
---     commands in the first subpass will be provided.
---
--- = Description
--- #_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
---     @VkAttachmentDescription@ structures or the @layout@ member of the
---     @VkAttachmentReference@ structures specified when creating the
---     render pass specified in the @renderPass@ member of
---     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL@
---     then the corresponding attachment image subresource of the
---     framebuffer specified in the @framebuffer@ member of
---     @pRenderPassBegin@ /must/ have been created with
---     @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ set
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     @VkAttachmentDescription@ structures or the @layout@ member of the
---     @VkAttachmentReference@ structures specified when creating the
---     render pass specified in the @renderPass@ member of
---     @pRenderPassBegin@ is
---     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL@, or
---     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ then the
---     corresponding attachment image subresource of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@
---     set
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     @VkAttachmentDescription@ structures or the @layout@ member of the
---     @VkAttachmentReference@ structures specified when creating the
---     render pass specified in the @renderPass@ member of
---     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@
---     then the corresponding attachment image subresource of the
---     framebuffer specified in the @framebuffer@ member of
---     @pRenderPassBegin@ /must/ have been created with
---     @VK_IMAGE_USAGE_SAMPLED_BIT@ or
---     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ set
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     @VkAttachmentDescription@ structures or the @layout@ member of the
---     @VkAttachmentReference@ structures specified when creating the
---     render pass specified in the @renderPass@ member of
---     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ then
---     the corresponding attachment image subresource of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ set
---
--- -   If any of the @initialLayout@ or @finalLayout@ member of the
---     @VkAttachmentDescription@ structures or the @layout@ member of the
---     @VkAttachmentReference@ structures specified when creating the
---     render pass specified in the @renderPass@ member of
---     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ then
---     the corresponding attachment image subresource of the framebuffer
---     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
---     have been created with @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ set
---
--- -   If any of the @initialLayout@ members of the
---     @VkAttachmentDescription@ structures specified when creating the
---     render pass specified in the @renderPass@ member of
---     @pRenderPassBegin@ is not @VK_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
---     'Graphics.Vulkan.Core10.Pass.VkRenderPassCreateInfo' used to create
---     @renderPass@ /must/ be supported by the capabilities of the queue
---     family identified by the @queueFamilyIndex@ member of the
---     'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo' used to
---     create the command pool which @commandBuffer@ was allocated from.
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pRenderPassBegin@ /must/ be a valid pointer to a valid
---     @VkRenderPassBeginInfo@ structure
---
--- -   @contents@ /must/ be a valid 'VkSubpassContents' value
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandBuffer@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Outside         | Graphics        | Graphics        |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkRenderPassBeginInfo',
--- 'VkSubpassContents'
-foreign import ccall "vkCmdBeginRenderPass" vkCmdBeginRenderPass :: ("commandBuffer" ::: VkCommandBuffer) -> ("pRenderPassBegin" ::: Ptr VkRenderPassBeginInfo) -> ("contents" ::: VkSubpassContents) -> IO ()
--- | vkCmdNextSubpass - Transition to the next subpass of a render pass
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer in which to record the
---     command.
---
--- -   @contents@ specifies how the commands in the next subpass will be
---     provided, in the same fashion as the corresponding parameter of
---     'vkCmdBeginRenderPass'.
---
--- = Description
--- #_description#
---
--- The subpass index for a render pass begins at zero when
--- @vkCmdBeginRenderPass@ is recorded, and increments each time
--- @vkCmdNextSubpass@ 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. That is, they are considered to execute in
--- the @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@ pipeline stage and
--- their writes are synchronized with
--- @VK_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
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @contents@ /must/ be a valid 'VkSubpassContents' value
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandBuffer@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkSubpassContents'
-foreign import ccall "vkCmdNextSubpass" vkCmdNextSubpass :: ("commandBuffer" ::: VkCommandBuffer) -> ("contents" ::: VkSubpassContents) -> IO ()
--- | vkCmdEndRenderPass - End the current render pass
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is the command buffer in which to end the current
---     render pass instance.
---
--- = Description
--- #_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
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ 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 @VkCommandBuffer@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdEndRenderPass" vkCmdEndRenderPass :: ("commandBuffer" ::: VkCommandBuffer) -> IO ()
--- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary
--- command buffer
---
--- = Parameters
--- #_parameters#
---
--- -   @commandBuffer@ is a handle to a primary command buffer that the
---     secondary command buffers are executed in.
---
--- -   @commandBufferCount@ is the length of the @pCommandBuffers@ array.
---
--- -   @pCommandBuffers@ is an array of secondary command buffer handles,
---     which are recorded to execute in the primary command buffer in the
---     order they are listed in the array.
---
--- = Description
--- #_description#
---
--- If any element of @pCommandBuffers@ was not recorded with the
--- @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, and it was recorded
--- into any other primary command buffer which is currently in the
--- <{html_spec_relative}#commandbuffers-lifecycle executable or recording state>,
--- that primary command buffer becomes
--- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
---
--- == Valid Usage
---
--- -   @commandBuffer@ /must/ have been allocated with a @level@ of
---     @VK_COMMAND_BUFFER_LEVEL_PRIMARY@
---
--- -   Each element of @pCommandBuffers@ /must/ have been allocated with a
---     @level@ of @VK_COMMAND_BUFFER_LEVEL_SECONDARY@
---
--- -   Each element of @pCommandBuffers@ /must/ be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending or executable state>.
---
--- -   If any element of @pCommandBuffers@ was not recorded with the
---     @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, and it was
---     recorded into any other primary command buffer, that primary command
---     buffer /must/ not be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending state>
---
--- -   If any element of @pCommandBuffers@ was not recorded with the
---     @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, it /must/ not
---     be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending state>.
---
--- -   If any element of @pCommandBuffers@ was not recorded with the
---     @VK_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
---     @VK_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
---     @VkCommandPool@ that was created for the same queue family as the
---     @VkCommandPool@ from which @commandBuffer@ was allocated
---
--- -   If @vkCmdExecuteCommands@ is being called within a render pass
---     instance, that render pass instance /must/ have been begun with the
---     @contents@ parameter of @vkCmdBeginRenderPass@ set to
---     @VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS@
---
--- -   If @vkCmdExecuteCommands@ is being called within a render pass
---     instance, each element of @pCommandBuffers@ /must/ have been
---     recorded with the @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@
---
--- -   If @vkCmdExecuteCommands@ is being called within a render pass
---     instance, each element of @pCommandBuffers@ /must/ have been
---     recorded with @VkCommandBufferInheritanceInfo@::@subpass@ set to the
---     index of the subpass which the given command buffer will be executed
---     in
---
--- -   If @vkCmdExecuteCommands@ is being called within a render pass
---     instance, the render passes specified in the
---     pname::pBeginInfo::@pInheritanceInfo@::@renderPass@ members of the
---     'Graphics.Vulkan.Core10.CommandBuffer.vkBeginCommandBuffer' commands
---     used to begin recording each element of @pCommandBuffers@ /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     current render pass.
---
--- -   If @vkCmdExecuteCommands@ is being called within a render pass
---     instance, and any element of @pCommandBuffers@ was recorded with
---     @VkCommandBufferInheritanceInfo@::@framebuffer@ not equal to
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', that
---     @VkFramebuffer@ /must/ match the @VkFramebuffer@ used in the current
---     render pass instance
---
--- -   If @vkCmdExecuteCommands@ is not being called within a render pass
---     instance, each element of @pCommandBuffers@ /must/ not have been
---     recorded with the @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-inheritedQueries inherited queries>
---     feature is not enabled, @commandBuffer@ /must/ not have any queries
---     <{html_spec_relative}#queries-operation-active active>
---
--- -   If @commandBuffer@ has a @VK_QUERY_TYPE_OCCLUSION@ query
---     <{html_spec_relative}#queries-operation-active active>, then each
---     element of @pCommandBuffers@ /must/ have been recorded with
---     @VkCommandBufferInheritanceInfo@::@occlusionQueryEnable@ set to
---     @VK_TRUE@
---
--- -   If @commandBuffer@ has a @VK_QUERY_TYPE_OCCLUSION@ query
---     <{html_spec_relative}#queries-operation-active active>, then each
---     element of @pCommandBuffers@ /must/ have been recorded with
---     @VkCommandBufferInheritanceInfo@::@queryFlags@ having all bits set
---     that are set for the query
---
--- -   If @commandBuffer@ has a @VK_QUERY_TYPE_PIPELINE_STATISTICS@ query
---     <{html_spec_relative}#queries-operation-active active>, then each
---     element of @pCommandBuffers@ /must/ have been recorded with
---     @VkCommandBufferInheritanceInfo@::@pipelineStatistics@ having all
---     bits set that are set in the @VkQueryPool@ the query uses
---
--- -   Each element of @pCommandBuffers@ /must/ not begin any query types
---     that are <{html_spec_relative}#queries-operation-active active> in
---     @commandBuffer@
---
--- == Valid Usage (Implicit)
---
--- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
---
--- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
---     @commandBufferCount@ valid @VkCommandBuffer@ handles
---
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
---
--- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
---     support transfer, graphics, or compute operations
---
--- -   @commandBuffer@ /must/ be a primary @VkCommandBuffer@
---
--- -   @commandBufferCount@ /must/ be greater than @0@
---
--- -   Both of @commandBuffer@, and the elements of @pCommandBuffers@
---     /must/ have been created, allocated, or retrieved from the same
---     @VkDevice@
---
--- == Host Synchronization
---
--- -   Host access to @commandBuffer@ /must/ be externally synchronized
---
--- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
---     allocated from /must/ be externally synchronized
---
--- == Command Properties
---
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Transfer        |                 |
--- > |                 |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
-foreign import ccall "vkCmdExecuteCommands" vkCmdExecuteCommands :: ("commandBuffer" ::: VkCommandBuffer) -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr VkCommandBuffer) -> IO ()
--- | VkClearRect - Structure specifying a clear rectangle
---
--- = Description
--- #_description#
---
--- The layers [@baseArrayLayer@, @baseArrayLayer@ + @layerCount@) counting
--- from the base layer of the attachment image view are cleared.
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D', 'vkCmdClearAttachments'
-data VkClearRect = VkClearRect
-  { -- No documentation found for Nested "VkClearRect" "vkRect"
-  vkRect :: VkRect2D
-  , -- No documentation found for Nested "VkClearRect" "vkBaseArrayLayer"
-  vkBaseArrayLayer :: Word32
-  , -- No documentation found for Nested "VkClearRect" "vkLayerCount"
-  vkLayerCount :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkClearRect where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek ptr = VkClearRect <$> peek (ptr `plusPtr` 0)
-                         <*> peek (ptr `plusPtr` 16)
-                         <*> peek (ptr `plusPtr` 20)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkRect (poked :: VkClearRect))
-                *> poke (ptr `plusPtr` 16) (vkBaseArrayLayer (poked :: VkClearRect))
-                *> poke (ptr `plusPtr` 20) (vkLayerCount (poked :: VkClearRect))
--- | VkImageSubresourceLayers - Structure specifying a image subresource
--- layers
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If @aspectMask@ contains @VK_IMAGE_ASPECT_COLOR_BIT@, it /must/ not
---     contain either of @VK_IMAGE_ASPECT_DEPTH_BIT@ or
---     @VK_IMAGE_ASPECT_STENCIL_BIT@
---
--- -   @aspectMask@ /must/ not contain @VK_IMAGE_ASPECT_METADATA_BIT@
---
--- -   @layerCount@ /must/ be greater than 0
---
--- == Valid Usage (Implicit)
---
--- -   @aspectMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
---     values
---
--- -   @aspectMask@ /must/ not be @0@
---
--- = See Also
--- #_see_also#
---
--- 'VkBufferImageCopy',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
--- 'VkImageBlit', 'VkImageCopy', 'VkImageResolve'
-data VkImageSubresourceLayers = VkImageSubresourceLayers
-  { -- No documentation found for Nested "VkImageSubresourceLayers" "vkAspectMask"
-  vkAspectMask :: VkImageAspectFlags
-  , -- No documentation found for Nested "VkImageSubresourceLayers" "vkMipLevel"
-  vkMipLevel :: Word32
-  , -- No documentation found for Nested "VkImageSubresourceLayers" "vkBaseArrayLayer"
-  vkBaseArrayLayer :: Word32
-  , -- No documentation found for Nested "VkImageSubresourceLayers" "vkLayerCount"
-  vkLayerCount :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkImageSubresourceLayers where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek ptr = VkImageSubresourceLayers <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 4)
-                                      <*> peek (ptr `plusPtr` 8)
-                                      <*> peek (ptr `plusPtr` 12)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceLayers))
-                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresourceLayers))
-                *> poke (ptr `plusPtr` 8) (vkBaseArrayLayer (poked :: VkImageSubresourceLayers))
-                *> poke (ptr `plusPtr` 12) (vkLayerCount (poked :: VkImageSubresourceLayers))
--- | VkMemoryBarrier - Structure specifying a global memory barrier
---
--- = Description
--- #_description#
---
--- The first
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access types in the
--- <{html_spec_relative}#synchronization-access-masks source access mask>
--- specified by @srcAccessMask@.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access types in the
--- <{html_spec_relative}#synchronization-access-masks destination access mask>
--- specified by @dstAccessMask@.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_BARRIER@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @srcAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
---
--- -   @dstAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
--- 'vkCmdWaitEvents'
-data VkMemoryBarrier = VkMemoryBarrier
-  { -- No documentation found for Nested "VkMemoryBarrier" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryBarrier" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryBarrier" "vkSrcAccessMask"
-  vkSrcAccessMask :: VkAccessFlags
-  , -- No documentation found for Nested "VkMemoryBarrier" "vkDstAccessMask"
-  vkDstAccessMask :: VkAccessFlags
-  }
-  deriving (Eq, Show)
-
-instance Storable VkMemoryBarrier where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkMemoryBarrier <$> peek (ptr `plusPtr` 0)
-                             <*> peek (ptr `plusPtr` 8)
-                             <*> peek (ptr `plusPtr` 16)
-                             <*> peek (ptr `plusPtr` 20)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryBarrier))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryBarrier))
-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkMemoryBarrier))
-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkMemoryBarrier))
--- | VkBufferMemoryBarrier - Structure specifying a buffer memory barrier
---
--- = Description
--- #_description#
---
--- The first
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified buffer range, via
--- access types in the
--- <{html_spec_relative}#synchronization-access-masks source access mask>
--- specified by @srcAccessMask@. If @srcAccessMask@ includes
--- @VK_ACCESS_HOST_WRITE_BIT@, memory writes performed by that access type
--- are also made visible, as that access type is not performed through a
--- resource.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified buffer range, via
--- access types in the
--- <{html_spec_relative}#synchronization-access-masks destination access mask>.
--- specified by @dstAccessMask@. If @dstAccessMask@ includes
--- @VK_ACCESS_HOST_WRITE_BIT@ or @VK_ACCESS_HOST_READ_BIT@, available
--- memory writes are also made visible to accesses of those types, as those
--- access types are not performed through a resource.
---
--- If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, and
--- @srcQueueFamilyIndex@ is equal to the current queue family, then the
--- memory barrier defines a
--- <{html_spec_relative}#synchronization-queue-transfers-release queue family release operation>
--- for the specified buffer range, and the second access scope includes no
--- access, as if @dstAccessMask@ was @0@.
---
--- If @dstQueueFamilyIndex@ is not equal to @srcQueueFamilyIndex@, and
--- @dstQueueFamilyIndex@ is equal to the current queue family, then the
--- memory barrier defines a
--- <{html_spec_relative}#synchronization-queue-transfers-acquire queue family acquire operation>
--- for the specified buffer range, and the first access scope includes no
--- access, as if @srcAccessMask@ was @0@.
---
--- == Valid Usage
---
--- -   @offset@ /must/ be less than the size of @buffer@
---
--- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be greater
---     than @0@
---
--- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be less
---     than or equal to than the size of @buffer@ minus @offset@
---
--- -   If @buffer@ was created with a sharing mode of
---     @VK_SHARING_MODE_CONCURRENT@, @srcQueueFamilyIndex@ and
---     @dstQueueFamilyIndex@ /must/ both be @VK_QUEUE_FAMILY_IGNORED@
---
--- -   If @buffer@ was created with a sharing mode of
---     @VK_SHARING_MODE_EXCLUSIVE@, @srcQueueFamilyIndex@ and
---     @dstQueueFamilyIndex@ /must/ either both be
---     @VK_QUEUE_FAMILY_IGNORED@, or both be a valid queue family (see
---     <{html_spec_relative}#devsandqueues-queueprops {html_spec_relative}#devsandqueues-queueprops>)
---
--- -   If @buffer@ was created with a sharing mode of
---     @VK_SHARING_MODE_EXCLUSIVE@, and @srcQueueFamilyIndex@ and
---     @dstQueueFamilyIndex@ are not @VK_QUEUE_FAMILY_IGNORED@, at least
---     one of them /must/ be the same as the family of the queue that will
---     execute this barrier
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @srcAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
---
--- -   @dstAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
---
--- -   @buffer@ /must/ be a valid @VkBuffer@ handle
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', @VkDeviceSize@,
--- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
--- 'vkCmdWaitEvents'
-data VkBufferMemoryBarrier = VkBufferMemoryBarrier
-  { -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSrcAccessMask"
-  vkSrcAccessMask :: VkAccessFlags
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkDstAccessMask"
-  vkDstAccessMask :: VkAccessFlags
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSrcQueueFamilyIndex"
-  vkSrcQueueFamilyIndex :: Word32
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkDstQueueFamilyIndex"
-  vkDstQueueFamilyIndex :: Word32
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkBuffer"
-  vkBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkOffset"
-  vkOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkBufferMemoryBarrier" "vkSize"
-  vkSize :: VkDeviceSize
-  }
-  deriving (Eq, Show)
-
-instance Storable VkBufferMemoryBarrier where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkBufferMemoryBarrier <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 16)
-                                   <*> peek (ptr `plusPtr` 20)
-                                   <*> peek (ptr `plusPtr` 24)
-                                   <*> peek (ptr `plusPtr` 28)
-                                   <*> peek (ptr `plusPtr` 32)
-                                   <*> peek (ptr `plusPtr` 40)
-                                   <*> peek (ptr `plusPtr` 48)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 24) (vkSrcQueueFamilyIndex (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 28) (vkDstQueueFamilyIndex (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 32) (vkBuffer (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferMemoryBarrier))
-                *> poke (ptr `plusPtr` 48) (vkSize (poked :: VkBufferMemoryBarrier))
--- | VkImageMemoryBarrier - Structure specifying the parameters of an image
--- memory barrier
---
--- = Description
--- #_description#
---
--- The first
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified image subresource
--- range, via access types in the
--- <{html_spec_relative}#synchronization-access-masks source access mask>
--- specified by @srcAccessMask@. If @srcAccessMask@ includes
--- @VK_ACCESS_HOST_WRITE_BIT@, memory writes performed by that access type
--- are also made visible, as that access type is not performed through a
--- resource.
---
--- The second
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access to memory through the specified image subresource
--- range, via access types in the
--- <{html_spec_relative}#synchronization-access-masks destination access mask>
--- specified by @dstAccessMask@. If @dstAccessMask@ includes
--- @VK_ACCESS_HOST_WRITE_BIT@ or @VK_ACCESS_HOST_READ_BIT@, available
--- memory writes are also made visible to accesses of those types, as those
--- access types are not performed through a resource.
---
--- If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, and
--- @srcQueueFamilyIndex@ is equal to the current queue family, then the
--- memory barrier defines a
--- <{html_spec_relative}#synchronization-queue-transfers-release queue family release operation>
--- for the specified image subresource range, and the second access scope
--- includes no access, as if @dstAccessMask@ was @0@.
---
--- If @dstQueueFamilyIndex@ is not equal to @srcQueueFamilyIndex@, and
--- @dstQueueFamilyIndex@ is equal to the current queue family, then the
--- memory barrier defines a
--- <{html_spec_relative}#synchronization-queue-transfers-acquire queue family acquire operation>
--- for the specified image subresource range, and the first access scope
--- includes no access, as if @srcAccessMask@ was @0@.
---
--- If @oldLayout@ is not equal to @newLayout@, then the memory barrier
--- defines an
--- <{html_spec_relative}#synchronization-image-layout-transitions image layout transition>
--- for the specified image subresource range.
---
--- Layout transitions that are performed via image memory barriers execute
--- in their entirety in
--- <{html_spec_relative}#synchronization-submission-order submission order>,
--- relative to other image layout transitions submitted to the same queue,
--- including those performed by
--- <{html_spec_relative}#renderpass render passes>. In effect there is an
--- implicit execution dependency from each such layout transition to all
--- layout transitions previously submitted to the same queue.
---
--- == Valid Usage
---
--- -   @oldLayout@ /must/ be @VK_IMAGE_LAYOUT_UNDEFINED@ or the current
---     layout of the image subresources affected by the barrier
---
--- -   @newLayout@ /must/ not be @VK_IMAGE_LAYOUT_UNDEFINED@ or
---     @VK_IMAGE_LAYOUT_PREINITIALIZED@
---
--- -   If @image@ was created with a sharing mode of
---     @VK_SHARING_MODE_CONCURRENT@, @srcQueueFamilyIndex@ and
---     @dstQueueFamilyIndex@ /must/ both be @VK_QUEUE_FAMILY_IGNORED@
---
--- -   If @image@ was created with a sharing mode of
---     @VK_SHARING_MODE_EXCLUSIVE@, @srcQueueFamilyIndex@ and
---     @dstQueueFamilyIndex@ /must/ either both be
---     @VK_QUEUE_FAMILY_IGNORED@, or both be a valid queue family (see
---     <{html_spec_relative}#devsandqueues-queueprops {html_spec_relative}#devsandqueues-queueprops>).
---
--- -   If @image@ was created with a sharing mode of
---     @VK_SHARING_MODE_EXCLUSIVE@, and @srcQueueFamilyIndex@ and
---     @dstQueueFamilyIndex@ are not @VK_QUEUE_FAMILY_IGNORED@, at least
---     one of them /must/ be the same as the family of the queue that will
---     execute this barrier
---
--- -   @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@
---     specified in 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when
---     @image@ was created
---
--- -   If @subresourceRange.levelCount@ is not @VK_REMAINING_MIP_LEVELS@,
---     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
---     /must/ be less than or equal to the @mipLevels@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   @subresourceRange.baseArrayLayer@ /must/ be less than the
---     @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   If @subresourceRange.layerCount@ is not @VK_REMAINING_ARRAY_LAYERS@,
---     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
---     /must/ be less than or equal to the @arrayLayers@ specified in
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
---     created
---
--- -   If @image@ has a depth\/stencil format with both depth and stencil
---     components, then the @aspectMask@ member of @subresourceRange@
---     /must/ include both @VK_IMAGE_ASPECT_DEPTH_BIT@ and
---     @VK_IMAGE_ASPECT_STENCIL_BIT@
---
--- -   If either @oldLayout@ or @newLayout@ is
---     @VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL@ then @image@ /must/ have
---     been created with @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL@ then @image@
---     /must/ have been created with
---     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ then @image@
---     /must/ have been created with
---     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@ then @image@ /must/ have
---     been created with @VK_IMAGE_USAGE_SAMPLED_BIT@ or
---     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ then @image@ /must/ have been
---     created with @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ set
---
--- -   If either @oldLayout@ or @newLayout@ is
---     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ then @image@ /must/ have been
---     created with @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ set
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER@
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT'
---
--- -   @srcAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
---
--- -   @dstAccessMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
---
--- -   @oldLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @newLayout@ /must/ be a valid
---     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
---
--- -   @image@ /must/ be a valid @VkImage@ handle
---
--- -   @subresourceRange@ /must/ be a valid @VkImageSubresourceRange@
---     structure
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
--- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
--- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
--- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
--- 'vkCmdWaitEvents'
-data VkImageMemoryBarrier = VkImageMemoryBarrier
-  { -- No documentation found for Nested "VkImageMemoryBarrier" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkSrcAccessMask"
-  vkSrcAccessMask :: VkAccessFlags
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkDstAccessMask"
-  vkDstAccessMask :: VkAccessFlags
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkOldLayout"
-  vkOldLayout :: VkImageLayout
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkNewLayout"
-  vkNewLayout :: VkImageLayout
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkSrcQueueFamilyIndex"
-  vkSrcQueueFamilyIndex :: Word32
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkDstQueueFamilyIndex"
-  vkDstQueueFamilyIndex :: Word32
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkImage"
-  vkImage :: VkImage
-  , -- No documentation found for Nested "VkImageMemoryBarrier" "vkSubresourceRange"
-  vkSubresourceRange :: VkImageSubresourceRange
-  }
-  deriving (Eq, Show)
-
-instance Storable VkImageMemoryBarrier where
-  sizeOf ~_ = 72
-  alignment ~_ = 8
-  peek ptr = VkImageMemoryBarrier <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 8)
-                                  <*> peek (ptr `plusPtr` 16)
-                                  <*> peek (ptr `plusPtr` 20)
-                                  <*> peek (ptr `plusPtr` 24)
-                                  <*> peek (ptr `plusPtr` 28)
-                                  <*> peek (ptr `plusPtr` 32)
-                                  <*> peek (ptr `plusPtr` 36)
-                                  <*> peek (ptr `plusPtr` 40)
-                                  <*> peek (ptr `plusPtr` 48)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 24) (vkOldLayout (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 28) (vkNewLayout (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 32) (vkSrcQueueFamilyIndex (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 36) (vkDstQueueFamilyIndex (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 40) (vkImage (poked :: VkImageMemoryBarrier))
-                *> poke (ptr `plusPtr` 48) (vkSubresourceRange (poked :: VkImageMemoryBarrier))
--- | VkBufferCopy - Structure specifying a buffer copy operation
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- @VkDeviceSize@, 'vkCmdCopyBuffer'
-data VkBufferCopy = VkBufferCopy
-  { -- No documentation found for Nested "VkBufferCopy" "vkSrcOffset"
-  vkSrcOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkBufferCopy" "vkDstOffset"
-  vkDstOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkBufferCopy" "vkSize"
-  vkSize :: VkDeviceSize
-  }
-  deriving (Eq, Show)
-
-instance Storable VkBufferCopy where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkBufferCopy <$> peek (ptr `plusPtr` 0)
-                          <*> peek (ptr `plusPtr` 8)
-                          <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcOffset (poked :: VkBufferCopy))
-                *> poke (ptr `plusPtr` 8) (vkDstOffset (poked :: VkBufferCopy))
-                *> poke (ptr `plusPtr` 16) (vkSize (poked :: VkBufferCopy))
--- | VkImageCopy - Structure specifying an image copy operation
---
--- = Description
--- #_description#
---
--- Copies are done layer by layer starting with @baseArrayLayer@ member of
--- @srcSubresource@ for the source and @dstSubresource@ for the
--- destination. @layerCount@ layers are copied to the destination image.
---
--- == Valid Usage
---
--- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
---     /must/ match
---
--- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
---     /must/ match
---
--- -   If either of the calling command’s @srcImage@ or @dstImage@
---     parameters are of
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
---     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
---     both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
---     respectively
---
--- -   The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
---     present in the calling command’s @srcImage@
---
--- -   The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
---     present in the calling command’s @dstImage@
---
--- -   @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource width
---
--- -   @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource height
---
--- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @srcOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
---
--- -   @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource depth
---
--- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@.
---
--- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@.
---
--- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_2D@,
---     then @srcOffset.z@ /must/ be @0@.
---
--- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_2D@,
---     then @dstOffset.z@ /must/ be @0@.
---
--- -   If the calling command’s @srcImage@ or @dstImage@ is of type
---     @VK_IMAGE_TYPE_2D@, then @extent.depth@ /must/ be @1@.
---
--- -   @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource width
---
--- -   @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource height
---
--- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @dstOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
---
--- -   @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource depth
---
--- -   If the calling command’s @srcImage@ is a compressed image, all
---     members of @srcOffset@ /must/ be a multiple of the corresponding
---     dimensions of the compressed texel block
---
--- -   If the calling command’s @srcImage@ is a compressed image,
---     @extent.width@ /must/ be a multiple of the compressed texel block
---     width or (@extent.width@ + @srcOffset.x@) /must/ equal the source
---     image subresource width
---
--- -   If the calling command’s @srcImage@ is a compressed image,
---     @extent.height@ /must/ be a multiple of the compressed texel block
---     height or (@extent.height@ + @srcOffset.y@) /must/ equal the source
---     image subresource height
---
--- -   If the calling command’s @srcImage@ is a compressed image,
---     @extent.depth@ /must/ be a multiple of the compressed texel block
---     depth or (@extent.depth@ + @srcOffset.z@) /must/ equal the source
---     image subresource depth
---
--- -   If the calling command’s @dstImage@ is a compressed format image,
---     all members of @dstOffset@ /must/ be a multiple of the corresponding
---     dimensions of the compressed texel block
---
--- -   If the calling command’s @dstImage@ is a compressed format image,
---     @extent.width@ /must/ be a multiple of the compressed texel block
---     width or (@extent.width@ + @dstOffset.x@) /must/ equal the
---     destination image subresource width
---
--- -   If the calling command’s @dstImage@ is a compressed format image,
---     @extent.height@ /must/ be a multiple of the compressed texel block
---     height or (@extent.height@ + @dstOffset.y@) /must/ equal the
---     destination image subresource height
---
--- -   If the calling command’s @dstImage@ is a compressed format image,
---     @extent.depth@ /must/ be a multiple of the compressed texel block
---     depth or (@extent.depth@ + @dstOffset.z@) /must/ equal the
---     destination image subresource depth
---
--- == Valid Usage (Implicit)
---
--- -   @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
---     structure
---
--- -   @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
---     structure
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
--- 'VkImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
--- 'vkCmdCopyImage'
-data VkImageCopy = VkImageCopy
-  { -- No documentation found for Nested "VkImageCopy" "vkSrcSubresource"
-  vkSrcSubresource :: VkImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageCopy" "vkSrcOffset"
-  vkSrcOffset :: VkOffset3D
-  , -- No documentation found for Nested "VkImageCopy" "vkDstSubresource"
-  vkDstSubresource :: VkImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageCopy" "vkDstOffset"
-  vkDstOffset :: VkOffset3D
-  , -- No documentation found for Nested "VkImageCopy" "vkExtent"
-  vkExtent :: VkExtent3D
-  }
-  deriving (Eq, Show)
-
-instance Storable VkImageCopy where
-  sizeOf ~_ = 68
-  alignment ~_ = 4
-  peek ptr = VkImageCopy <$> peek (ptr `plusPtr` 0)
-                         <*> peek (ptr `plusPtr` 16)
-                         <*> peek (ptr `plusPtr` 28)
-                         <*> peek (ptr `plusPtr` 44)
-                         <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageCopy))
-                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageCopy))
-                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageCopy))
-                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageCopy))
-                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageCopy))
--- | VkImageBlit - Structure specifying an image blit operation
---
--- = Description
--- #_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
---
--- -   If either of the calling command’s @srcImage@ or @dstImage@
---     parameters are of
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
---     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
---     both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
---     respectively
---
--- -   The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
---     present in the calling command’s @srcImage@
---
--- -   The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
---     present in the calling command’s @dstImage@
---
--- -   @srcOffset@[0].@x@ and @srcOffset@[1].@x@ /must/ both be greater
---     than or equal to @0@ and less than or equal to the source image
---     subresource width
---
--- -   @srcOffset@[0].@y@ and @srcOffset@[1].@y@ /must/ both be greater
---     than or equal to @0@ and less than or equal to the source image
---     subresource height
---
--- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y /must/ be
---     @1@.
---
--- -   @srcOffset@[0].@z@ and @srcOffset@[1].@z@ /must/ both be greater
---     than or equal to @0@ and less than or equal to the source image
---     subresource depth
---
--- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@ or
---     @VK_IMAGE_TYPE_2D@, then @srcOffset@[0].z /must/ be @0@ and
---     @srcOffset@[1].z /must/ be @1@.
---
--- -   @dstOffset@[0].@x@ and @dstOffset@[1].@x@ /must/ both be greater
---     than or equal to @0@ and less than or equal to the destination image
---     subresource width
---
--- -   @dstOffset@[0].@y@ and @dstOffset@[1].@y@ /must/ both be greater
---     than or equal to @0@ and less than or equal to the destination image
---     subresource height
---
--- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y /must/ be
---     @1@.
---
--- -   @dstOffset@[0].@z@ and @dstOffset@[1].@z@ /must/ both be greater
---     than or equal to @0@ and less than or equal to the destination image
---     subresource depth
---
--- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@ or
---     @VK_IMAGE_TYPE_2D@, then @dstOffset@[0].z /must/ be @0@ and
---     @dstOffset@[1].z /must/ be @1@.
---
--- == Valid Usage (Implicit)
---
--- -   @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
---     structure
---
--- -   @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
---     structure
---
--- = See Also
--- #_see_also#
---
--- 'VkImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
--- 'vkCmdBlitImage'
-data VkImageBlit = VkImageBlit
-  { -- No documentation found for Nested "VkImageBlit" "vkSrcSubresource"
-  vkSrcSubresource :: VkImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageBlit" "vkSrcOffsets"
-  vkSrcOffsets :: Vector 2 VkOffset3D
-  , -- No documentation found for Nested "VkImageBlit" "vkDstSubresource"
-  vkDstSubresource :: VkImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageBlit" "vkDstOffsets"
-  vkDstOffsets :: Vector 2 VkOffset3D
-  }
-  deriving (Eq, Show)
-
-instance Storable VkImageBlit where
-  sizeOf ~_ = 80
-  alignment ~_ = 4
-  peek ptr = VkImageBlit <$> peek (ptr `plusPtr` 0)
-                         <*> peek (ptr `plusPtr` 16)
-                         <*> peek (ptr `plusPtr` 40)
-                         <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageBlit))
-                *> poke (ptr `plusPtr` 16) (vkSrcOffsets (poked :: VkImageBlit))
-                *> poke (ptr `plusPtr` 40) (vkDstSubresource (poked :: VkImageBlit))
-                *> poke (ptr `plusPtr` 56) (vkDstOffsets (poked :: VkImageBlit))
--- | VkBufferImageCopy - Structure specifying a buffer image copy operation
---
--- = Description
--- #_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 @VK_FORMAT_S8_UINT@ value per
---     texel.
---
--- -   data copied to or from the depth aspect of a @VK_FORMAT_D16_UNORM@
---     or @VK_FORMAT_D16_UNORM_S8_UINT@ format is tightly packed with one
---     @VK_FORMAT_D16_UNORM@ value per texel.
---
--- -   data copied to or from the depth aspect of a @VK_FORMAT_D32_SFLOAT@
---     or @VK_FORMAT_D32_SFLOAT_S8_UINT@ format is tightly packed with one
---     @VK_FORMAT_D32_SFLOAT@ value per texel.
---
--- -   data copied to or from the depth aspect of a
---     @VK_FORMAT_X8_D24_UNORM_PACK32@ or @VK_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, the
--- data in buffer memory /must/ be in the the range [0,1] or undefined
--- results occur.
---
--- 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.
---
--- == Valid Usage
---
--- -   If the calling command’s @VkImage@ parameter’s format is not a
---     depth\/stencil format, then @bufferOffset@ /must/ be a multiple of
---     the format’s element size
---
--- -   @bufferOffset@ /must/ be a multiple of @4@
---
--- -   @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@
---
--- -   @imageOffset.x@ and (@imageExtent.width@ + @imageOffset.x@) /must/
---     both be greater than or equal to @0@ and less than or equal to the
---     image subresource width
---
--- -   @imageOffset.y@ and (imageExtent.height + @imageOffset.y@) /must/
---     both be greater than or equal to @0@ and less than or equal to the
---     image subresource height
---
--- -   If the calling command’s @srcImage@ ('vkCmdCopyImageToBuffer') or
---     @dstImage@ ('vkCmdCopyBufferToImage') is of type @VK_IMAGE_TYPE_1D@,
---     then @imageOffset.y@ /must/ be @0@ and @imageExtent.height@ /must/
---     be @1@.
---
--- -   @imageOffset.z@ and (imageExtent.depth + @imageOffset.z@) /must/
---     both be greater than or equal to @0@ and less than or equal to the
---     image subresource depth
---
--- -   If the calling command’s @srcImage@ ('vkCmdCopyImageToBuffer') or
---     @dstImage@ ('vkCmdCopyBufferToImage') is of type @VK_IMAGE_TYPE_1D@
---     or @VK_IMAGE_TYPE_2D@, then @imageOffset.z@ /must/ be @0@ and
---     @imageExtent.depth@ /must/ be @1@
---
--- -   If the calling command’s @VkImage@ parameter is a compressed image,
---     @bufferRowLength@ /must/ be a multiple of the compressed texel block
---     width
---
--- -   If the calling command’s @VkImage@ parameter is a compressed image,
---     @bufferImageHeight@ /must/ be a multiple of the compressed texel
---     block height
---
--- -   If the calling command’s @VkImage@ parameter is a compressed image,
---     all members of @imageOffset@ /must/ be a multiple of the
---     corresponding dimensions of the compressed texel block
---
--- -   If the calling command’s @VkImage@ parameter is a compressed image,
---     @bufferOffset@ /must/ be a multiple of the compressed texel block
---     size in bytes
---
--- -   If the calling command’s @VkImage@ parameter is a compressed image,
---     @imageExtent.width@ /must/ be a multiple of the compressed texel
---     block width or (@imageExtent.width@ + @imageOffset.x@) /must/ equal
---     the image subresource width
---
--- -   If the calling command’s @VkImage@ parameter is a compressed image,
---     @imageExtent.height@ /must/ be a multiple of the compressed texel
---     block height or (@imageExtent.height@ + @imageOffset.y@) /must/
---     equal the image subresource height
---
--- -   If the calling command’s @VkImage@ parameter is a compressed image,
---     @imageExtent.depth@ /must/ be a multiple of the compressed texel
---     block depth or (@imageExtent.depth@ + @imageOffset.z@) /must/ equal
---     the image subresource depth
---
--- -   The @aspectMask@ member of @imageSubresource@ /must/ specify aspects
---     present in the calling command’s @VkImage@ parameter
---
--- -   The @aspectMask@ member of @imageSubresource@ /must/ only have a
---     single bit set
---
--- -   If the calling command’s @VkImage@ parameter is of
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
---     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
---     @imageSubresource@ /must/ be @0@ and @1@, respectively
---
--- -   When copying to the depth aspect of an image subresource, the data
---     in the source buffer /must/ be in the range [0,1]
---
--- == Valid Usage (Implicit)
---
--- -   @imageSubresource@ /must/ be a valid @VkImageSubresourceLayers@
---     structure
---
--- = See Also
--- #_see_also#
---
--- @VkDeviceSize@,
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
--- 'VkImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
--- 'vkCmdCopyBufferToImage', 'vkCmdCopyImageToBuffer'
-data VkBufferImageCopy = VkBufferImageCopy
-  { -- No documentation found for Nested "VkBufferImageCopy" "vkBufferOffset"
-  vkBufferOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkBufferImageCopy" "vkBufferRowLength"
-  vkBufferRowLength :: Word32
-  , -- No documentation found for Nested "VkBufferImageCopy" "vkBufferImageHeight"
-  vkBufferImageHeight :: Word32
-  , -- No documentation found for Nested "VkBufferImageCopy" "vkImageSubresource"
-  vkImageSubresource :: VkImageSubresourceLayers
-  , -- No documentation found for Nested "VkBufferImageCopy" "vkImageOffset"
-  vkImageOffset :: VkOffset3D
-  , -- No documentation found for Nested "VkBufferImageCopy" "vkImageExtent"
-  vkImageExtent :: VkExtent3D
-  }
-  deriving (Eq, Show)
-
-instance Storable VkBufferImageCopy where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkBufferImageCopy <$> peek (ptr `plusPtr` 0)
-                               <*> peek (ptr `plusPtr` 8)
-                               <*> peek (ptr `plusPtr` 12)
-                               <*> peek (ptr `plusPtr` 16)
-                               <*> peek (ptr `plusPtr` 32)
-                               <*> peek (ptr `plusPtr` 44)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBufferOffset (poked :: VkBufferImageCopy))
-                *> poke (ptr `plusPtr` 8) (vkBufferRowLength (poked :: VkBufferImageCopy))
-                *> poke (ptr `plusPtr` 12) (vkBufferImageHeight (poked :: VkBufferImageCopy))
-                *> poke (ptr `plusPtr` 16) (vkImageSubresource (poked :: VkBufferImageCopy))
-                *> poke (ptr `plusPtr` 32) (vkImageOffset (poked :: VkBufferImageCopy))
-                *> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkBufferImageCopy))
--- | VkImageResolve - Structure specifying an image resolve operation
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
---     /must/ only contain @VK_IMAGE_ASPECT_COLOR_BIT@
---
--- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
---     /must/ match
---
--- -   If either of the calling command’s @srcImage@ or @dstImage@
---     parameters are of
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
---     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
---     both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
---     respectively
---
--- -   @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource width
---
--- -   @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource height
---
--- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @srcOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
---
--- -   @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the source
---     image subresource depth
---
--- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@ or
---     @VK_IMAGE_TYPE_2D@, then @srcOffset.z@ /must/ be @0@ and
---     @extent.depth@ /must/ be @1@.
---
--- -   @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource width
---
--- -   @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource height
---
--- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
---     then @dstOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
---
--- -   @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
---     greater than or equal to @0@ and less than or equal to the
---     destination image subresource depth
---
--- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@ or
---     @VK_IMAGE_TYPE_2D@, then @dstOffset.z@ /must/ be @0@ and
---     @extent.depth@ /must/ be @1@.
---
--- == Valid Usage (Implicit)
---
--- -   @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
---     structure
---
--- -   @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
---     structure
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
--- 'VkImageSubresourceLayers',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
--- 'vkCmdResolveImage'
-data VkImageResolve = VkImageResolve
-  { -- No documentation found for Nested "VkImageResolve" "vkSrcSubresource"
-  vkSrcSubresource :: VkImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageResolve" "vkSrcOffset"
-  vkSrcOffset :: VkOffset3D
-  , -- No documentation found for Nested "VkImageResolve" "vkDstSubresource"
-  vkDstSubresource :: VkImageSubresourceLayers
-  , -- No documentation found for Nested "VkImageResolve" "vkDstOffset"
-  vkDstOffset :: VkOffset3D
-  , -- No documentation found for Nested "VkImageResolve" "vkExtent"
-  vkExtent :: VkExtent3D
-  }
-  deriving (Eq, Show)
-
-instance Storable VkImageResolve where
-  sizeOf ~_ = 68
-  alignment ~_ = 4
-  peek ptr = VkImageResolve <$> peek (ptr `plusPtr` 0)
-                            <*> peek (ptr `plusPtr` 16)
-                            <*> peek (ptr `plusPtr` 28)
-                            <*> peek (ptr `plusPtr` 44)
-                            <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageResolve))
-                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageResolve))
-                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageResolve))
-                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageResolve))
-                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageResolve))
--- | VkRenderPassBeginInfo - Structure specifying render pass begin info
---
--- = Description
--- #_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, otherwise the pixels outside of the render area become undefined
--- and shader side effects /may/ occur for fragments outside the render
--- area. The render area /must/ be contained within the framebuffer
--- dimensions.
---
--- __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
---     @VK_ATTACHMENT_LOAD_OP_CLEAR@
---
--- -   If @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid
---     pointer to an array of @clearValueCount@ valid @VkClearValue@ unions
---
--- -   @renderPass@ /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     @renderPass@ member of the @VkFramebufferCreateInfo@ structure
---     specified when creating @framebuffer@.
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_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
---     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupRenderPassBeginInfo'
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkRenderPassSampleLocationsBeginInfoEXT'
---
--- -   Each @sType@ member in the @pNext@ chain /must/ be unique
---
--- -   @renderPass@ /must/ be a valid @VkRenderPass@ handle
---
--- -   @framebuffer@ /must/ be a valid @VkFramebuffer@ handle
---
--- -   Both of @framebuffer@, and @renderPass@ /must/ have been created,
---     allocated, or retrieved from the same @VkDevice@
---
--- = See Also
--- #_see_also#
---
--- 'VkClearValue', 'Graphics.Vulkan.Core10.Pass.VkFramebuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
--- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdBeginRenderPass'
-data VkRenderPassBeginInfo = VkRenderPassBeginInfo
-  { -- No documentation found for Nested "VkRenderPassBeginInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkRenderPassBeginInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkRenderPassBeginInfo" "vkRenderPass"
-  vkRenderPass :: VkRenderPass
-  , -- No documentation found for Nested "VkRenderPassBeginInfo" "vkFramebuffer"
-  vkFramebuffer :: VkFramebuffer
-  , -- No documentation found for Nested "VkRenderPassBeginInfo" "vkRenderArea"
-  vkRenderArea :: VkRect2D
-  , -- No documentation found for Nested "VkRenderPassBeginInfo" "vkClearValueCount"
-  vkClearValueCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassBeginInfo" "vkPClearValues"
-  vkPClearValues :: Ptr VkClearValue
-  }
-  deriving (Eq, Show)
-
-instance Storable VkRenderPassBeginInfo where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkRenderPassBeginInfo <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 16)
-                                   <*> peek (ptr `plusPtr` 24)
-                                   <*> peek (ptr `plusPtr` 32)
-                                   <*> peek (ptr `plusPtr` 48)
-                                   <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassBeginInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassBeginInfo))
-                *> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkRenderPassBeginInfo))
-                *> poke (ptr `plusPtr` 24) (vkFramebuffer (poked :: VkRenderPassBeginInfo))
-                *> poke (ptr `plusPtr` 32) (vkRenderArea (poked :: VkRenderPassBeginInfo))
-                *> poke (ptr `plusPtr` 48) (vkClearValueCount (poked :: VkRenderPassBeginInfo))
-                *> poke (ptr `plusPtr` 56) (vkPClearValues (poked :: VkRenderPassBeginInfo))
--- | VkClearDepthStencilValue - Structure specifying a clear depth stencil
--- value
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @depth@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- = See Also
--- #_see_also#
---
--- 'VkClearValue', 'vkCmdClearDepthStencilImage'
-data VkClearDepthStencilValue = VkClearDepthStencilValue
-  { -- No documentation found for Nested "VkClearDepthStencilValue" "vkDepth"
-  vkDepth :: CFloat
-  , -- No documentation found for Nested "VkClearDepthStencilValue" "vkStencil"
-  vkStencil :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkClearDepthStencilValue where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek ptr = VkClearDepthStencilValue <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 4)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkDepth (poked :: VkClearDepthStencilValue))
-                *> poke (ptr `plusPtr` 4) (vkStencil (poked :: VkClearDepthStencilValue))
--- | VkClearAttachment - Structure specifying a clear attachment
---
--- = Description
--- #_description#
---
--- No memory barriers are needed between @vkCmdClearAttachments@ and
--- preceding or subsequent draw or attachment clear commands in the same
--- subpass.
---
--- The @vkCmdClearAttachments@ 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
--- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription' to
--- @VK_ATTACHMENT_LOAD_OP_CLEAR@, as described for
--- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass'.
---
--- == Valid Usage
---
--- -   If @aspectMask@ includes @VK_IMAGE_ASPECT_COLOR_BIT@, it /must/ not
---     include @VK_IMAGE_ASPECT_DEPTH_BIT@ or @VK_IMAGE_ASPECT_STENCIL_BIT@
---
--- -   @aspectMask@ /must/ not include @VK_IMAGE_ASPECT_METADATA_BIT@
---
--- -   @clearValue@ /must/ be a valid @VkClearValue@ union
---
--- == Valid Usage (Implicit)
---
--- -   @aspectMask@ /must/ be a valid combination of
---     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
---     values
---
--- -   @aspectMask@ /must/ not be @0@
---
--- = See Also
--- #_see_also#
---
--- 'VkClearValue',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
--- 'vkCmdClearAttachments'
-data VkClearAttachment = VkClearAttachment
-  { -- No documentation found for Nested "VkClearAttachment" "vkAspectMask"
-  vkAspectMask :: VkImageAspectFlags
-  , -- No documentation found for Nested "VkClearAttachment" "vkColorAttachment"
-  vkColorAttachment :: Word32
-  , -- No documentation found for Nested "VkClearAttachment" "vkClearValue"
-  vkClearValue :: VkClearValue
-  }
-  deriving (Eq, Show)
-
-instance Storable VkClearAttachment where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek ptr = VkClearAttachment <$> peek (ptr `plusPtr` 0)
-                               <*> peek (ptr `plusPtr` 4)
-                               <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkClearAttachment))
-                *> poke (ptr `plusPtr` 4) (vkColorAttachment (poked :: VkClearAttachment))
-                *> poke (ptr `plusPtr` 8) (vkClearValue (poked :: VkClearAttachment))
--- | VkDrawIndirectCommand - Structure specifying a draw indirect command
---
--- = Description
--- #_description#
---
--- The members of @VkDrawIndirectCommand@ have the same meaning as the
--- similarly named parameters of 'vkCmdDraw'.
---
--- == 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
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>
---
--- -   If the
---     <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, @firstInstance@ /must/ be @0@
---
--- = See Also
--- #_see_also#
---
--- 'vkCmdDrawIndirect'
-data VkDrawIndirectCommand = VkDrawIndirectCommand
-  { -- No documentation found for Nested "VkDrawIndirectCommand" "vkVertexCount"
-  vkVertexCount :: Word32
-  , -- No documentation found for Nested "VkDrawIndirectCommand" "vkInstanceCount"
-  vkInstanceCount :: Word32
-  , -- No documentation found for Nested "VkDrawIndirectCommand" "vkFirstVertex"
-  vkFirstVertex :: Word32
-  , -- No documentation found for Nested "VkDrawIndirectCommand" "vkFirstInstance"
-  vkFirstInstance :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkDrawIndirectCommand where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek ptr = VkDrawIndirectCommand <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 4)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 12)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkVertexCount (poked :: VkDrawIndirectCommand))
-                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndirectCommand))
-                *> poke (ptr `plusPtr` 8) (vkFirstVertex (poked :: VkDrawIndirectCommand))
-                *> poke (ptr `plusPtr` 12) (vkFirstInstance (poked :: VkDrawIndirectCommand))
--- | VkDrawIndexedIndirectCommand - Structure specifying a draw indexed
--- indirect command
---
--- = Description
--- #_description#
---
--- The members of @VkDrawIndexedIndirectCommand@ have the same meaning as
--- the similarly named parameters of 'vkCmdDrawIndexed'.
---
--- == 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
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#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
---     @vkCmdBindIndexBuffer@
---
--- -   If the
---     <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
---     feature is not enabled, @firstInstance@ /must/ be @0@
---
--- = See Also
--- #_see_also#
---
--- 'vkCmdDrawIndexedIndirect'
-data VkDrawIndexedIndirectCommand = VkDrawIndexedIndirectCommand
-  { -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkIndexCount"
-  vkIndexCount :: Word32
-  , -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkInstanceCount"
-  vkInstanceCount :: Word32
-  , -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkFirstIndex"
-  vkFirstIndex :: Word32
-  , -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkVertexOffset"
-  vkVertexOffset :: Int32
-  , -- No documentation found for Nested "VkDrawIndexedIndirectCommand" "vkFirstInstance"
-  vkFirstInstance :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkDrawIndexedIndirectCommand where
-  sizeOf ~_ = 20
-  alignment ~_ = 4
-  peek ptr = VkDrawIndexedIndirectCommand <$> peek (ptr `plusPtr` 0)
-                                          <*> peek (ptr `plusPtr` 4)
-                                          <*> peek (ptr `plusPtr` 8)
-                                          <*> peek (ptr `plusPtr` 12)
-                                          <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkIndexCount (poked :: VkDrawIndexedIndirectCommand))
-                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndexedIndirectCommand))
-                *> poke (ptr `plusPtr` 8) (vkFirstIndex (poked :: VkDrawIndexedIndirectCommand))
-                *> poke (ptr `plusPtr` 12) (vkVertexOffset (poked :: VkDrawIndexedIndirectCommand))
-                *> poke (ptr `plusPtr` 16) (vkFirstInstance (poked :: VkDrawIndexedIndirectCommand))
--- | VkDispatchIndirectCommand - Structure specifying a dispatch indirect
--- command
---
--- = Description
--- #_description#
---
--- The members of @VkDispatchIndirectCommand@ have the same meaning as the
--- corresponding parameters of 'vkCmdDispatch'.
---
--- == Valid Usage
---
--- -   @x@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0]
---
--- -   @y@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1]
---
--- -   @z@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[2]
---
--- = See Also
--- #_see_also#
---
--- 'vkCmdDispatchIndirect'
-data VkDispatchIndirectCommand = VkDispatchIndirectCommand
-  { -- No documentation found for Nested "VkDispatchIndirectCommand" "vkX"
-  vkX :: Word32
-  , -- No documentation found for Nested "VkDispatchIndirectCommand" "vkY"
-  vkY :: Word32
-  , -- No documentation found for Nested "VkDispatchIndirectCommand" "vkZ"
-  vkZ :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkDispatchIndirectCommand where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkDispatchIndirectCommand <$> peek (ptr `plusPtr` 0)
-                                       <*> peek (ptr `plusPtr` 4)
-                                       <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkDispatchIndirectCommand))
-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkDispatchIndirectCommand))
-                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkDispatchIndirectCommand))
--- | VkClearColorValue - Structure specifying a clear color value
---
--- = Description
--- #_description#
---
--- The four array elements of the clear color map to R, G, B, and A
--- components of image formats, in order.
---
--- If the image has more than one sample, the same value is written to all
--- samples for any pixels being cleared.
---
--- = See Also
--- #_see_also#
---
--- 'VkClearValue', 'vkCmdClearColorImage'
-data VkClearColorValue
-  = -- No documentation found for Nested "VkClearColorValue" "VkFloat32"
-  VkFloat32 (Vector 4 CFloat)
-  | -- No documentation found for Nested "VkClearColorValue" "VkInt32"
-  VkInt32 (Vector 4 Int32)
-  | -- No documentation found for Nested "VkClearColorValue" "VkUint32"
-  VkUint32 (Vector 4 Word32)
-  deriving (Eq, Show)
-
--- | _Note_: peek is undefined as we wouldn't know which constructor to use
-instance Storable VkClearColorValue where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek _   = error "peek @VkClearColorValue"
-  poke ptr = \case
-    VkFloat32 e -> poke (castPtr ptr) e
-    VkInt32 e -> poke (castPtr ptr) e
-    VkUint32 e -> poke (castPtr ptr) e
--- | VkClearValue - Structure specifying a clear value
---
--- = Description
--- #_description#
---
--- This union is used where part of the API requires either color or
--- depth\/stencil clear values, depending on the attachment, and defines
--- the initial clear values in the 'VkRenderPassBeginInfo' structure.
---
--- == Valid Usage
---
--- -   @depthStencil@ /must/ be a valid @VkClearDepthStencilValue@
---     structure
---
--- = See Also
--- #_see_also#
---
--- 'VkClearAttachment', 'VkClearColorValue', 'VkClearDepthStencilValue',
--- 'VkRenderPassBeginInfo'
-data VkClearValue
-  = -- No documentation found for Nested "VkClearValue" "VkColor"
-  VkColor VkClearColorValue
-  | -- No documentation found for Nested "VkClearValue" "VkDepthStencil"
-  VkDepthStencil VkClearDepthStencilValue
-  deriving (Eq, Show)
-
--- | _Note_: peek is undefined as we wouldn't know which constructor to use
-instance Storable VkClearValue where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek _   = error "peek @VkClearValue"
-  poke ptr = \case
-    VkColor e -> poke (castPtr ptr) e
-    VkDepthStencil e -> poke (castPtr ptr) e
--- | VkStencilFaceFlags - Bitmask of VkStencilFaceFlagBits
---
--- = Description
--- #_description#
---
--- @VkStencilFaceFlags@ is a bitmask type for setting a mask of zero or
--- more 'VkStencilFaceFlagBits'.
---
--- = See Also
--- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableIndexBufferEntryNVX',
+-- 'vkCmdBindIndexBuffer'
+newtype VkIndexType = VkIndexType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkIndexType where
+  showsPrec _ VK_INDEX_TYPE_UINT16 = showString "VK_INDEX_TYPE_UINT16"
+  showsPrec _ VK_INDEX_TYPE_UINT32 = showString "VK_INDEX_TYPE_UINT32"
+  showsPrec p (VkIndexType x) = showParen (p >= 11) (showString "VkIndexType " . showsPrec 11 x)
+
+instance Read VkIndexType where
+  readPrec = parens ( choose [ ("VK_INDEX_TYPE_UINT16", pure VK_INDEX_TYPE_UINT16)
+                             , ("VK_INDEX_TYPE_UINT32", pure VK_INDEX_TYPE_UINT32)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkIndexType")
+                        v <- step readPrec
+                        pure (VkIndexType v)
+                        )
+                    )
+
+-- | @VK_INDEX_TYPE_UINT16@ specifies that indices are 16-bit unsigned
+-- integer values.
+pattern VK_INDEX_TYPE_UINT16 :: VkIndexType
+pattern VK_INDEX_TYPE_UINT16 = VkIndexType 0
+
+-- | @VK_INDEX_TYPE_UINT32@ specifies that indices are 32-bit unsigned
+-- integer values.
+pattern VK_INDEX_TYPE_UINT32 :: VkIndexType
+pattern VK_INDEX_TYPE_UINT32 = VkIndexType 1
+-- ** VkSubpassContents
+
+-- | VkSubpassContents - Specify how commands in the first subpass of a
+-- render pass are provided
+--
+-- = See Also
+--
+-- 'vkCmdBeginRenderPass', 'vkCmdNextSubpass'
+newtype VkSubpassContents = VkSubpassContents Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSubpassContents where
+  showsPrec _ VK_SUBPASS_CONTENTS_INLINE = showString "VK_SUBPASS_CONTENTS_INLINE"
+  showsPrec _ VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = showString "VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS"
+  showsPrec p (VkSubpassContents x) = showParen (p >= 11) (showString "VkSubpassContents " . showsPrec 11 x)
+
+instance Read VkSubpassContents where
+  readPrec = parens ( choose [ ("VK_SUBPASS_CONTENTS_INLINE",                    pure VK_SUBPASS_CONTENTS_INLINE)
+                             , ("VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS", pure VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSubpassContents")
+                        v <- step readPrec
+                        pure (VkSubpassContents v)
+                        )
+                    )
+
+-- | @VK_SUBPASS_CONTENTS_INLINE@ specifies that the contents of the subpass
+-- will be recorded inline in the primary command buffer, and secondary
+-- command buffers /must/ not be executed within the subpass.
+pattern VK_SUBPASS_CONTENTS_INLINE :: VkSubpassContents
+pattern VK_SUBPASS_CONTENTS_INLINE = VkSubpassContents 0
+
+-- | @VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS@ specifies that the
+-- contents are recorded in secondary command buffers that will be called
+-- from the primary command buffer, and 'vkCmdExecuteCommands' is the only
+-- valid command on the command buffer until 'vkCmdNextSubpass' or
+-- 'vkCmdEndRenderPass'.
+pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS :: VkSubpassContents
+pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = VkSubpassContents 1
+-- ** VkStencilFaceFlagBits
+
+-- | VkStencilFaceFlagBits - Bitmask specifying sets of stencil state for
+-- which to update the compare mask
+--
+-- = See Also
+--
+-- 'VkStencilFaceFlags'
+newtype VkStencilFaceFlagBits = VkStencilFaceFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkStencilFaceFlagBits where
+  showsPrec _ VK_STENCIL_FACE_FRONT_BIT = showString "VK_STENCIL_FACE_FRONT_BIT"
+  showsPrec _ VK_STENCIL_FACE_BACK_BIT = showString "VK_STENCIL_FACE_BACK_BIT"
+  showsPrec _ VK_STENCIL_FRONT_AND_BACK = showString "VK_STENCIL_FRONT_AND_BACK"
+  showsPrec p (VkStencilFaceFlagBits x) = showParen (p >= 11) (showString "VkStencilFaceFlagBits " . showsPrec 11 x)
+
+instance Read VkStencilFaceFlagBits where
+  readPrec = parens ( choose [ ("VK_STENCIL_FACE_FRONT_BIT", pure VK_STENCIL_FACE_FRONT_BIT)
+                             , ("VK_STENCIL_FACE_BACK_BIT",  pure VK_STENCIL_FACE_BACK_BIT)
+                             , ("VK_STENCIL_FRONT_AND_BACK", pure VK_STENCIL_FRONT_AND_BACK)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkStencilFaceFlagBits")
+                        v <- step readPrec
+                        pure (VkStencilFaceFlagBits v)
+                        )
+                    )
+
+-- | @VK_STENCIL_FACE_FRONT_BIT@ specifies that only the front set of stencil
+-- state is updated.
+pattern VK_STENCIL_FACE_FRONT_BIT :: VkStencilFaceFlagBits
+pattern VK_STENCIL_FACE_FRONT_BIT = VkStencilFaceFlagBits 0x00000001
+
+-- | @VK_STENCIL_FACE_BACK_BIT@ specifies that only the back set of stencil
+-- state is updated.
+pattern VK_STENCIL_FACE_BACK_BIT :: VkStencilFaceFlagBits
+pattern VK_STENCIL_FACE_BACK_BIT = VkStencilFaceFlagBits 0x00000002
+
+-- | @VK_STENCIL_FRONT_AND_BACK@ is the combination of
+-- @VK_STENCIL_FACE_FRONT_BIT@ and @VK_STENCIL_FACE_BACK_BIT@, and
+-- specifies that both sets of stencil state are updated.
+pattern VK_STENCIL_FRONT_AND_BACK :: VkStencilFaceFlagBits
+pattern VK_STENCIL_FRONT_AND_BACK = VkStencilFaceFlagBits 0x00000003
+-- | vkCmdBindPipeline - Bind a pipeline object to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that the pipeline will be
+--     bound to.
+--
+-- -   @pipelineBindPoint@ is a
+--     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value specifying
+--     whether to bind to the compute or graphics bind point. Binding one
+--     does not disturb the other.
+--
+-- -   @pipeline@ is the pipeline to be bound.
+--
+-- = Description
+--
+-- Once bound, a pipeline binding affects subsequent graphics or compute
+-- commands in the command buffer until a different pipeline is bound to
+-- the bind point. The pipeline bound to @VK_PIPELINE_BIND_POINT_COMPUTE@
+-- controls the behavior of 'vkCmdDispatch' and 'vkCmdDispatchIndirect'.
+-- The pipeline bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ controls the
+-- behavior of all [drawing
+-- commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#drawing).
+-- No other commands are affected by the pipeline state.
+--
+-- == Valid Usage
+--
+-- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_COMPUTE@, the
+--     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support compute operations
+--
+-- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_GRAPHICS@, the
+--     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_COMPUTE@,
+--     @pipeline@ /must/ be a compute pipeline
+--
+-- -   If @pipelineBindPoint@ is @VK_PIPELINE_BIND_POINT_GRAPHICS@,
+--     @pipeline@ /must/ be a graphics pipeline
+--
+-- -   If the [variable multisample
+--     rate](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-variableMultisampleRate)
+--     feature is not supported, @pipeline@ is a graphics pipeline, the
+--     current subpass has 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
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+--     is @VK_FALSE@, and @pipeline@ is a graphics pipeline created with a
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
+--     structure having its @sampleLocationsEnable@ member set to @VK_TRUE@
+--     but without @VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT@ enabled then the
+--     current render pass instance /must/ have been begun by specifying a
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkRenderPassSampleLocationsBeginInfoEXT'
+--     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
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
+--     when the pipeline was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
+--
+-- -   @pipeline@ /must/ be a valid @VkPipeline@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipeline',
+-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint'
+foreign import ccall "vkCmdBindPipeline" vkCmdBindPipeline :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("pipeline" ::: VkPipeline) -> IO ()
+-- | vkCmdSetViewport - Set the viewport on a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @firstViewport@ is the index of the first viewport whose parameters
+--     are updated by the command.
+--
+-- -   @viewportCount@ is the number of viewports whose parameters are
+--     updated by the command.
+--
+-- -   @pViewports@ is a pointer to an array of
+--     'Graphics.Vulkan.Core10.Pipeline.VkViewport' structures specifying
+--     viewport parameters.
+--
+-- = 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
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_VIEWPORT@ dynamic state enabled
+--
+-- -   @firstViewport@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxViewports@
+--
+-- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
+--     and @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
+--
+-- -   If the [multiple
+--     viewports](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiViewport)
+--     feature is not enabled, @firstViewport@ /must/ be @0@
+--
+-- -   If the [multiple
+--     viewports](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiViewport)
+--     feature is not enabled, @viewportCount@ /must/ be @1@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pViewports@ /must/ be a valid pointer to an array of
+--     @viewportCount@ @VkViewport@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkViewport'
+foreign import ccall "vkCmdSetViewport" vkCmdSetViewport :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewports" ::: Ptr VkViewport) -> IO ()
+-- | vkCmdSetScissor - Set the dynamic scissor rectangles on a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @firstScissor@ is the index of the first scissor whose state is
+--     updated by the command.
+--
+-- -   @scissorCount@ is the number of scissors whose rectangles are
+--     updated by the command.
+--
+-- -   @pScissors@ is a pointer to an array of
+--     'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structures defining
+--     scissor rectangles.
+--
+-- = 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@).
+--
+-- Each scissor rectangle is described by a
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structure, with the
+-- @offset.x@ and @offset.y@ values determining the upper left corner of
+-- the scissor rectangle, and the @extent.width@ and @extent.height@ values
+-- determining the size in pixels.
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_SCISSOR@ dynamic state enabled
+--
+-- -   @firstScissor@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxViewports@
+--
+-- -   The sum of @firstScissor@ and @scissorCount@ /must/ be between @1@
+--     and @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
+--
+-- -   If the [multiple
+--     viewports](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiViewport)
+--     feature is not enabled, @firstScissor@ /must/ be @0@
+--
+-- -   If the [multiple
+--     viewports](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiViewport)
+--     feature is not enabled, @scissorCount@ /must/ be @1@
+--
+-- -   The @x@ and @y@ members of @offset@ /must/ be greater than or equal
+--     to @0@
+--
+-- -   Evaluation of (@offset.x@ + @extent.width@) /must/ not cause a
+--     signed integer addition overflow
+--
+-- -   Evaluation of (@offset.y@ + @extent.height@) /must/ not cause a
+--     signed integer addition overflow
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pScissors@ /must/ be a valid pointer to an array of @scissorCount@
+--     @VkRect2D@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D'
+foreign import ccall "vkCmdSetScissor" vkCmdSetScissor :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstScissor" ::: Word32) -> ("scissorCount" ::: Word32) -> ("pScissors" ::: Ptr VkRect2D) -> IO ()
+-- | vkCmdSetLineWidth - Set the dynamic line width state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @lineWidth@ is the width of rasterized line segments.
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_LINE_WIDTH@ dynamic state enabled
+--
+-- -   If the [wide
+--     lines](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-wideLines)
+--     feature is not enabled, @lineWidth@ /must/ be @1.0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdSetLineWidth" vkCmdSetLineWidth :: ("commandBuffer" ::: VkCommandBuffer) -> ("lineWidth" ::: CFloat) -> IO ()
+-- | vkCmdSetDepthBias - Set the depth bias dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @depthBiasConstantFactor@ is a scalar factor controlling the
+--     constant depth value added to each fragment.
+--
+-- -   @depthBiasClamp@ is the maximum (or minimum) depth bias of a
+--     fragment.
+--
+-- -   @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s
+--     slope in depth bias calculations.
+--
+-- = Description
+--
+-- If @depthBiasEnable@ is @VK_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
+-- @VK_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
+--
+-- \[o =
+-- \begin{cases}
+--     m \times depthBiasSlopeFactor +
+--          r \times depthBiasConstantFactor  & depthBiasClamp = 0\ or\ NaN \\
+--     \min(m \times depthBiasSlopeFactor +
+--          r \times depthBiasConstantFactor,
+--          depthBiasClamp)                   & depthBiasClamp > 0  \\
+--     \max(m \times depthBiasSlopeFactor +
+--          r \times depthBiasConstantFactor,
+--          depthBiasClamp)                   & depthBiasClamp < 0  \\
+-- \end{cases}\]
+--
+-- 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 @{html_spec_relative}#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
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_DEPTH_BIAS@ dynamic state enabled
+--
+-- -   If the [depth bias
+--     clamping](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-depthBiasClamp)
+--     feature is not enabled, @depthBiasClamp@ /must/ be @0.0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdSetDepthBias" vkCmdSetDepthBias :: ("commandBuffer" ::: VkCommandBuffer) -> ("depthBiasConstantFactor" ::: CFloat) -> ("depthBiasClamp" ::: CFloat) -> ("depthBiasSlopeFactor" ::: CFloat) -> IO ()
+-- | vkCmdSetBlendConstants - Set the values of blend constants
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @blendConstants@ is an array of four values specifying the R, G, B,
+--     and A components of the blend constant color used in blending,
+--     depending on the [blend
+--     factor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blendfactors).
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_BLEND_CONSTANTS@ dynamic state enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdSetBlendConstants" vkCmdSetBlendConstants :: ("commandBuffer" ::: VkCommandBuffer) -> ("blendConstants" ::: Ptr CFloat) -> IO ()
+-- | vkCmdSetDepthBounds - Set the depth bounds test values for a command
+-- buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @minDepthBounds@ is the lower bound of the range of depth values
+--     used in the depth bounds test.
+--
+-- -   @maxDepthBounds@ is the upper bound of the range.
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_DEPTH_BOUNDS@ dynamic state enabled
+--
+-- -   Unless the @{html_spec_relative}#VK_EXT_depth_range_unrestricted@
+--     extension is enabled @minDepthBounds@ /must/ be between @0.0@ and
+--     @1.0@, inclusive
+--
+-- -   Unless the @{html_spec_relative}#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 @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdSetDepthBounds" vkCmdSetDepthBounds :: ("commandBuffer" ::: VkCommandBuffer) -> ("minDepthBounds" ::: CFloat) -> ("maxDepthBounds" ::: CFloat) -> IO ()
+-- | vkCmdSetStencilCompareMask - Set the stencil compare mask dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
+--     set of stencil state for which to update the compare mask.
+--
+-- -   @compareMask@ is the new value to use as the stencil compare mask.
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK@ dynamic state enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
+--     values
+--
+-- -   @faceMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
+foreign import ccall "vkCmdSetStencilCompareMask" vkCmdSetStencilCompareMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("compareMask" ::: Word32) -> IO ()
+-- | vkCmdSetStencilWriteMask - Set the stencil write mask dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
+--     set of stencil state for which to update the write mask, as
+--     described above for 'vkCmdSetStencilCompareMask'.
+--
+-- -   @writeMask@ is the new value to use as the stencil write mask.
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_STENCIL_WRITE_MASK@ dynamic state enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
+--     values
+--
+-- -   @faceMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
+foreign import ccall "vkCmdSetStencilWriteMask" vkCmdSetStencilWriteMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("writeMask" ::: Word32) -> IO ()
+-- | vkCmdSetStencilReference - Set the stencil reference dynamic state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @faceMask@ is a bitmask of 'VkStencilFaceFlagBits' specifying the
+--     set of stencil state for which to update the reference value, as
+--     described above for 'vkCmdSetStencilCompareMask'.
+--
+-- -   @reference@ is the new value to use as the stencil reference value.
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_STENCIL_REFERENCE@ dynamic state enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @faceMask@ /must/ be a valid combination of 'VkStencilFaceFlagBits'
+--     values
+--
+-- -   @faceMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkStencilFaceFlags'
+foreign import ccall "vkCmdSetStencilReference" vkCmdSetStencilReference :: ("commandBuffer" ::: VkCommandBuffer) -> ("faceMask" ::: VkStencilFaceFlags) -> ("reference" ::: Word32) -> IO ()
+-- | vkCmdBindDescriptorSets - Binds descriptor sets to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer that the descriptor sets will
+--     be bound to.
+--
+-- -   @pipelineBindPoint@ is a
+--     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' indicating whether
+--     the descriptors will be used by graphics pipelines or compute
+--     pipelines. There is a separate set of bind points for each of
+--     graphics and compute, so binding one does not disturb the other.
+--
+-- -   @layout@ is a @VkPipelineLayout@ object used to program the
+--     bindings.
+--
+-- -   @firstSet@ is the set number of the first descriptor set to be
+--     bound.
+--
+-- -   @descriptorSetCount@ is the number of elements in the
+--     @pDescriptorSets@ array.
+--
+-- -   @pDescriptorSets@ is an array of handles to @VkDescriptorSet@
+--     objects describing the descriptor sets to write to.
+--
+-- -   @dynamicOffsetCount@ is the number of dynamic offsets in the
+--     @pDynamicOffsets@ array.
+--
+-- -   @pDynamicOffsets@ is a pointer to an array of @uint32_t@ values
+--     specifying dynamic offsets.
+--
+-- = Description
+--
+-- @vkCmdBindDescriptorSets@ causes the sets numbered [@firstSet@..
+-- @firstSet@+@descriptorSetCount@-1] to use the bindings stored in
+-- @pDescriptorSets@[0..@descriptorSetCount@-1] for subsequent rendering
+-- commands (either compute or graphics, according to the
+-- @pipelineBindPoint@). Any bindings that were previously applied via
+-- these sets are no longer valid.
+--
+-- Once bound, a descriptor set affects rendering of subsequent graphics or
+-- compute commands in the command buffer until a different set is bound to
+-- the same set number, or else until the set is disturbed as described in
+-- [Pipeline Layout
+-- Compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-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 length 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 graphics
+-- or compute commands, as defined in the [Pipeline Layout
+-- Compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+-- section.
+--
+-- The descriptor set contents bound by a call to @vkCmdBindDescriptorSets@
+-- /may/ be consumed at the following times:
+--
+-- -   For descriptor bindings created with the
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ 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 and when the command completes
+-- executing on the queue.
+--
+-- The contents of @pDynamicOffsets@ are consumed immediately during
+-- execution of @vkCmdBindDescriptorSets@. 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
+--     @VkDescriptorSetLayout@ that matches (is the same as, or identically
+--     defined as) the @VkDescriptorSetLayout@ 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 @VkPipelineLayoutCreateInfo@::@setLayoutCount@ provided
+--     when @layout@ was created
+--
+-- -   @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s
+--     parent @VkCommandPool@’s queue family
+--
+-- -   Each element of @pDynamicOffsets@ /must/ satisfy the required
+--     alignment for the corresponding descriptor binding’s descriptor type
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
+--
+-- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
+--     @descriptorSetCount@ valid @VkDescriptorSet@ 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 [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSet',
+-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'
+foreign import ccall "vkCmdBindDescriptorSets" vkCmdBindDescriptorSets :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("layout" ::: VkPipelineLayout) -> ("firstSet" ::: Word32) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr VkDescriptorSet) -> ("dynamicOffsetCount" ::: Word32) -> ("pDynamicOffsets" ::: Ptr Word32) -> IO ()
+-- | vkCmdBindIndexBuffer - Bind an index buffer to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @buffer@ is the buffer being bound.
+--
+-- -   @offset@ is the starting offset in bytes within @buffer@ used in
+--     index buffer address calculations.
+--
+-- -   @indexType@ is a 'VkIndexType' value specifying whether indices are
+--     treated as 16 bits or 32 bits.
+--
+-- == Valid Usage
+--
+-- -   @offset@ /must/ be less than the size of @buffer@
+--
+-- -   The sum of @offset@ and the address of the range of @VkDeviceMemory@
+--     object that is backing @buffer@, /must/ be a multiple of the type
+--     indicated by @indexType@
+--
+-- -   @buffer@ /must/ have been created with the
+--     @VK_BUFFER_USAGE_INDEX_BUFFER_BIT@ flag
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @indexType@ /must/ be a valid 'VkIndexType' value
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- -   Both of @buffer@, and @commandBuffer@ /must/ have been created,
+--     allocated, or retrieved from the same @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
+-- 'VkIndexType'
+foreign import ccall "vkCmdBindIndexBuffer" vkCmdBindIndexBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("indexType" ::: VkIndexType) -> IO ()
+-- | vkCmdBindVertexBuffers - Bind vertex buffers to a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @firstBinding@ is the index of the first vertex input binding whose
+--     state is updated by the command.
+--
+-- -   @bindingCount@ is the number of vertex input bindings whose state is
+--     updated by the command.
+--
+-- -   @pBuffers@ is a pointer to an array of buffer handles.
+--
+-- -   @pOffsets@ is a pointer to an array of buffer offsets.
+--
+-- = 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.
+--
+-- == Valid Usage
+--
+-- -   @firstBinding@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
+--
+-- -   The sum of @firstBinding@ and @bindingCount@ /must/ be less than or
+--     equal to @VkPhysicalDeviceLimits@::@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
+--     @VK_BUFFER_USAGE_VERTEX_BUFFER_BIT@ flag
+--
+-- -   Each element of @pBuffers@ that is non-sparse /must/ be bound
+--     completely and contiguously to a single @VkDeviceMemory@ object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pBuffers@ /must/ be a valid pointer to an array of @bindingCount@
+--     valid @VkBuffer@ handles
+--
+-- -   @pOffsets@ /must/ be a valid pointer to an array of @bindingCount@
+--     @VkDeviceSize@ values
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- -   @bindingCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and the elements of @pBuffers@ /must/ have
+--     been created, allocated, or retrieved from the same @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
+foreign import ccall "vkCmdBindVertexBuffers" vkCmdBindVertexBuffers :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstBinding" ::: Word32) -> ("bindingCount" ::: Word32) -> ("pBuffers" ::: Ptr VkBuffer) -> ("pOffsets" ::: Ptr VkDeviceSize) -> IO ()
+-- | vkCmdDraw - Draw primitives
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @vertexCount@ is the number of vertices to draw.
+--
+-- -   @instanceCount@ is the number of instances to draw.
+--
+-- -   @firstVertex@ is the index of the first vertex to draw.
+--
+-- -   @firstInstance@ is the instance ID of the first instance to draw.
+--
+-- = 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
+--
+-- -   The current render pass /must/ be
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the @renderPass@ member of the @VkGraphicsPipelineCreateInfo@
+--     structure specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
+--     specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   For each set /n/ that is statically used by the @VkPipeline@ bound
+--     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
+--     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for set /n/, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   For each push constant that is statically used by the @VkPipeline@
+--     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
+--     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for push constants, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
+--     used by the bound @VkPipeline@ object, specified via
+--     @vkCmdBindPipeline@
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     valid buffers bound
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input)
+--
+-- -   A valid graphics pipeline /must/ be bound to the current command
+--     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
+--
+-- -   If the @VkPipeline@ object bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
+--     state /must/ have been set on the current command buffer
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /must/ not be used to sample from any
+--     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
+--     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
+--     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
+--     any shader stage
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
+--     of this command /must/ be of a format which supports linear
+--     filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   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.
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ be of
+--     a format which supports cubic filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ not
+--     have a 'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
+--     @VK_IMAGE_VIEW_TYPE_3D@, @VK_IMAGE_VIEW_TYPE_CUBE@, or
+--     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
+--
+-- -   If the bound graphics pipeline was created with
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to @VK_TRUE@ and the current subpass has a depth\/stencil
+--     attachment, then that attachment /must/ have been created with the
+--     @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdDraw" vkCmdDraw :: ("commandBuffer" ::: VkCommandBuffer) -> ("vertexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstVertex" ::: Word32) -> ("firstInstance" ::: Word32) -> IO ()
+-- | vkCmdDrawIndexed - Issue an indexed draw into a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @indexCount@ is the number of vertices to draw.
+--
+-- -   @instanceCount@ is the number of instances to draw.
+--
+-- -   @firstIndex@ is the base index within the index buffer.
+--
+-- -   @vertexOffset@ is the value added to the vertex index before
+--     indexing into the vertex buffer.
+--
+-- -   @firstInstance@ is the instance ID of the first instance to draw.
+--
+-- = 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
+-- 'vkCmdBindIndexBuffer'::@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 @vkCmdBindIndexBuffer@ 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 @VK_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
+--
+-- -   The current render pass /must/ be
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the @renderPass@ member of the @VkGraphicsPipelineCreateInfo@
+--     structure specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
+--     specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   For each set /n/ that is statically used by the @VkPipeline@ bound
+--     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
+--     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for set /n/, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   For each push constant that is statically used by the @VkPipeline@
+--     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
+--     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for push constants, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
+--     used by the bound @VkPipeline@ object, specified via
+--     @vkCmdBindPipeline@
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     valid buffers bound
+--
+-- -   For a given vertex buffer binding, any attribute data fetched /must/
+--     be entirely contained within the corresponding vertex buffer
+--     binding, as described in
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input)
+--
+-- -   A valid graphics pipeline /must/ be bound to the current command
+--     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
+--
+-- -   If the @VkPipeline@ object bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
+--     state /must/ have been set on the current command buffer
+--
+-- -   (@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
+--     @vkCmdBindIndexBuffer@
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /must/ not be used to sample from any
+--     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
+--     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
+--     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
+--     any shader stage
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
+--     of this command /must/ be of a format which supports linear
+--     filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   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.
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ be of
+--     a format which supports cubic filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ not
+--     have a 'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
+--     @VK_IMAGE_VIEW_TYPE_3D@, @VK_IMAGE_VIEW_TYPE_CUBE@, or
+--     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
+--
+-- -   If the bound graphics pipeline was created with
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to @VK_TRUE@ and the current subpass has a depth\/stencil
+--     attachment, then that attachment /must/ have been created with the
+--     @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdDrawIndexed" vkCmdDrawIndexed :: ("commandBuffer" ::: VkCommandBuffer) -> ("indexCount" ::: Word32) -> ("instanceCount" ::: Word32) -> ("firstIndex" ::: Word32) -> ("vertexOffset" ::: Int32) -> ("firstInstance" ::: Word32) -> IO ()
+-- | vkCmdDrawIndirect - Issue an indirect draw into a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @buffer@ is the buffer containing draw parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- -   @drawCount@ is the number of draws to execute, and /can/ be zero.
+--
+-- -   @stride@ is the byte stride between successive sets of draw
+--     parameters.
+--
+-- = Description
+--
+-- @vkCmdDrawIndirect@ behaves similarly to 'vkCmdDraw' 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 'VkDrawIndirectCommand' structures. If @drawCount@ is less than
+-- or equal to one, @stride@ is ignored.
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @buffer@ /must/ have been created with the
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
+--     @4@ and /must/ be greater than or equal to
+--     @sizeof@(@VkDrawIndirectCommand@)
+--
+-- -   If the [multi-draw
+--     indirect](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiDrawIndirect)
+--     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
+--
+-- -   If the
+--     [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-drawIndirectFirstInstance)
+--     feature is not enabled, all the @firstInstance@ members of the
+--     @VkDrawIndirectCommand@ structures accessed by this command /must/
+--     be @0@
+--
+-- -   The current render pass /must/ be
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the @renderPass@ member of the @VkGraphicsPipelineCreateInfo@
+--     structure specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
+--     specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   For each set /n/ that is statically used by the @VkPipeline@ bound
+--     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
+--     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for set /n/, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   For each push constant that is statically used by the @VkPipeline@
+--     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
+--     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for push constants, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
+--     used by the bound @VkPipeline@ object, specified via
+--     @vkCmdBindPipeline@
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     valid buffers bound
+--
+-- -   A valid graphics pipeline /must/ be bound to the current command
+--     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
+--
+-- -   If the @VkPipeline@ object bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
+--     state /must/ have been set on the current command buffer
+--
+-- -   If @drawCount@ is equal to @1@, (@offset@ +
+--     @sizeof@('VkDrawIndirectCommand')) /must/ be less than or equal to
+--     the size of @buffer@
+--
+-- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
+--     @offset@ + @sizeof@('VkDrawIndirectCommand')) /must/ be less than or
+--     equal to the size of @buffer@
+--
+-- -   @drawCount@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDrawIndirectCount@
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /must/ not be used to sample from any
+--     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
+--     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
+--     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
+--     any shader stage
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
+--     of this command /must/ be of a format which supports linear
+--     filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   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.
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ be of
+--     a format which supports cubic filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ not
+--     have a 'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
+--     @VK_IMAGE_VIEW_TYPE_3D@, @VK_IMAGE_VIEW_TYPE_CUBE@, or
+--     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
+--
+-- -   If the bound graphics pipeline was created with
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to @VK_TRUE@ and the current subpass has a depth\/stencil
+--     attachment, then that attachment /must/ have been created with the
+--     @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
+foreign import ccall "vkCmdDrawIndirect" vkCmdDrawIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
+-- | vkCmdDrawIndexedIndirect - Perform an indexed indirect draw
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @buffer@ is the buffer containing draw parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- -   @drawCount@ is the number of draws to execute, and /can/ be zero.
+--
+-- -   @stride@ is the byte stride between successive sets of draw
+--     parameters.
+--
+-- = Description
+--
+-- @vkCmdDrawIndexedIndirect@ behaves similarly to 'vkCmdDrawIndexed'
+-- 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 'VkDrawIndexedIndirectCommand' structures. If
+-- @drawCount@ is less than or equal to one, @stride@ is ignored.
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @buffer@ /must/ have been created with the
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   If @drawCount@ is greater than @1@, @stride@ /must/ be a multiple of
+--     @4@ and /must/ be greater than or equal to
+--     @sizeof@(@VkDrawIndexedIndirectCommand@)
+--
+-- -   If the [multi-draw
+--     indirect](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiDrawIndirect)
+--     feature is not enabled, @drawCount@ /must/ be @0@ or @1@
+--
+-- -   If the
+--     [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-drawIndirectFirstInstance)
+--     feature is not enabled, all the @firstInstance@ members of the
+--     @VkDrawIndexedIndirectCommand@ structures accessed by this command
+--     /must/ be @0@
+--
+-- -   The current render pass /must/ be
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the @renderPass@ member of the @VkGraphicsPipelineCreateInfo@
+--     structure specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   The subpass index of the current render pass /must/ be equal to the
+--     @subpass@ member of the @VkGraphicsPipelineCreateInfo@ structure
+--     specified when creating the @VkPipeline@ bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
+--
+-- -   For each set /n/ that is statically used by the @VkPipeline@ bound
+--     to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a descriptor set /must/ have
+--     been bound to /n/ at @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for set /n/, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   For each push constant that is statically used by the @VkPipeline@
+--     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
+--     /must/ have been set for @VK_PIPELINE_BIND_POINT_GRAPHICS@, with a
+--     @VkPipelineLayout@ that is compatible for push constants, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
+--     used by the bound @VkPipeline@ object, specified via
+--     @vkCmdBindPipeline@
+--
+-- -   All vertex input bindings accessed via vertex input variables
+--     declared in the vertex shader entry point’s interface /must/ have
+--     valid buffers bound
+--
+-- -   A valid graphics pipeline /must/ be bound to the current command
+--     buffer with @VK_PIPELINE_BIND_POINT_GRAPHICS@
+--
+-- -   If the @VkPipeline@ object bound to
+--     @VK_PIPELINE_BIND_POINT_GRAPHICS@ requires any dynamic state, that
+--     state /must/ have been set on the current command buffer
+--
+-- -   If @drawCount@ is equal to @1@, (@offset@ +
+--     @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less than or
+--     equal to the size of @buffer@
+--
+-- -   If @drawCount@ is greater than @1@, (@stride@ × (@drawCount@ - 1) +
+--     @offset@ + @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less
+--     than or equal to the size of @buffer@
+--
+-- -   @drawCount@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDrawIndirectCount@
+--
+-- -   Every input attachment used by the current subpass /must/ be bound
+--     to the pipeline via a descriptor set
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /must/ not be used to sample from any
+--     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
+--     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
+--     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
+--     any shader stage
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ uses
+--     unnormalized coordinates, it /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 [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
+--     of this command /must/ be of a format which supports linear
+--     filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   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.
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ be of
+--     a format which supports cubic filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ not
+--     have a 'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
+--     @VK_IMAGE_VIEW_TYPE_3D@, @VK_IMAGE_VIEW_TYPE_CUBE@, or
+--     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
+--
+-- -   If the draw is recorded in a render pass instance with multiview
+--     enabled, the maximum instance index /must/ be less than or equal to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
+--
+-- -   If the bound graphics pipeline was created with
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to @VK_TRUE@ and the current subpass has a depth\/stencil
+--     attachment, then that attachment /must/ have been created with the
+--     @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
+foreign import ccall "vkCmdDrawIndexedIndirect" vkCmdDrawIndexedIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("drawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
+-- | vkCmdDispatch - Dispatch compute work items
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @groupCountX@ is the number of local workgroups to dispatch in the X
+--     dimension.
+--
+-- -   @groupCountY@ is the number of local workgroups to dispatch in the Y
+--     dimension.
+--
+-- -   @groupCountZ@ is the number of local workgroups to dispatch in the Z
+--     dimension.
+--
+-- = Description
+--
+-- When the command is executed, a global workgroup consisting of
+-- groupCountX × groupCountY × groupCountZ local workgroups is assembled.
+--
+-- == Valid Usage
+--
+-- -   @groupCountX@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0]
+--
+-- -   @groupCountY@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1]
+--
+-- -   @groupCountZ@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[2]
+--
+-- -   For each set /n/ that is statically used by the @VkPipeline@ bound
+--     to @VK_PIPELINE_BIND_POINT_COMPUTE@, a descriptor set /must/ have
+--     been bound to /n/ at @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
+--     @VkPipelineLayout@ that is compatible for set /n/, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
+--     used by the bound @VkPipeline@ object, specified via
+--     @vkCmdBindPipeline@
+--
+-- -   A valid compute pipeline /must/ be bound to the current command
+--     buffer with @VK_PIPELINE_BIND_POINT_COMPUTE@
+--
+-- -   For each push constant that is statically used by the @VkPipeline@
+--     bound to @VK_PIPELINE_BIND_POINT_COMPUTE@, a push constant value
+--     /must/ have been set for @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
+--     @VkPipelineLayout@ that is compatible for push constants with the
+--     one used to create the current @VkPipeline@, as described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
+--     unnormalized coordinates, it /must/ not be used to sample from any
+--     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
+--     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
+--     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
+--     any shader stage
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
+--     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
+--     unnormalized coordinates, it /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 [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a uniform
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a storage
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
+--     of this command /must/ be of a format which supports linear
+--     filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ be of
+--     a format which supports cubic filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ not
+--     have a 'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
+--     @VK_IMAGE_VIEW_TYPE_3D@, @VK_IMAGE_VIEW_TYPE_CUBE@, or
+--     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Compute                                                                                               | Compute                                                                                                                    |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdDispatch" vkCmdDispatch :: ("commandBuffer" ::: VkCommandBuffer) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()
+-- | vkCmdDispatchIndirect - Dispatch compute work items using indirect
+-- parameters
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @buffer@ is the buffer containing dispatch parameters.
+--
+-- -   @offset@ is the byte offset into @buffer@ where parameters begin.
+--
+-- = Description
+--
+-- @vkCmdDispatchIndirect@ behaves similarly to 'vkCmdDispatch' except that
+-- the parameters are read by the device from a buffer during execution.
+-- The parameters of the dispatch are encoded in a
+-- 'VkDispatchIndirectCommand' structure taken from @buffer@ starting at
+-- @offset@.
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   For each set /n/ that is statically used by the @VkPipeline@ bound
+--     to @VK_PIPELINE_BIND_POINT_COMPUTE@, a descriptor set /must/ have
+--     been bound to /n/ at @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
+--     @VkPipelineLayout@ that is compatible for set /n/, with the
+--     @VkPipelineLayout@ used to create the current @VkPipeline@, as
+--     described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   Descriptors in each bound descriptor set, specified via
+--     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
+--     used by the bound @VkPipeline@ object, specified via
+--     @vkCmdBindPipeline@
+--
+-- -   A valid compute pipeline /must/ be bound to the current command
+--     buffer with @VK_PIPELINE_BIND_POINT_COMPUTE@
+--
+-- -   @buffer@ /must/ have been created with the
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   The sum of @offset@ and the size of @VkDispatchIndirectCommand@
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   For each push constant that is statically used by the @VkPipeline@
+--     bound to @VK_PIPELINE_BIND_POINT_COMPUTE@, a push constant value
+--     /must/ have been set for @VK_PIPELINE_BIND_POINT_COMPUTE@, with a
+--     @VkPipelineLayout@ that is compatible for push constants with the
+--     one used to create the current @VkPipeline@, as described in
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
+--     unnormalized coordinates, it /must/ not be used to sample from any
+--     @VkImage@ with a @VkImageView@ of the type @VK_IMAGE_VIEW_TYPE_3D@,
+--     @VK_IMAGE_VIEW_TYPE_CUBE@, @VK_IMAGE_VIEW_TYPE_1D_ARRAY@,
+--     @VK_IMAGE_VIEW_TYPE_2D_ARRAY@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@, in
+--     any shader stage
+--
+-- -   If any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
+--     unnormalized coordinates, it /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 any @VkSampler@ object that is accessed from a shader by the
+--     @VkPipeline@ bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ uses
+--     unnormalized coordinates, it /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 [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a uniform
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
+--     feature is not enabled, and any shader stage in the @VkPipeline@
+--     object bound to @VK_PIPELINE_BIND_POINT_COMPUTE@ accesses a storage
+--     buffer, it /must/ not access values outside of the range of that
+--     buffer specified in the bound descriptor set
+--
+-- -   Any @VkImageView@ being sampled with @VK_FILTER_LINEAR@ as a result
+--     of this command /must/ be of a format which supports linear
+--     filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ be of
+--     a format which supports cubic filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   Any 'Graphics.Vulkan.Core10.ImageView.VkImageView' being sampled
+--     with @VK_FILTER_CUBIC_IMG@ as a result of this command /must/ not
+--     have a 'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
+--     @VK_IMAGE_VIEW_TYPE_3D@, @VK_IMAGE_VIEW_TYPE_CUBE@, or
+--     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Compute                                                                                               | Compute                                                                                                                    |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
+foreign import ccall "vkCmdDispatchIndirect" vkCmdDispatchIndirect :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> IO ()
+-- | vkCmdCopyBuffer - Copy data between buffer regions
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @srcBuffer@ is the source buffer.
+--
+-- -   @dstBuffer@ is the destination buffer.
+--
+-- -   @regionCount@ is the number of regions to copy.
+--
+-- -   @pRegions@ is a pointer to an array of 'VkBufferCopy' structures
+--     specifying the regions to copy.
+--
+-- = 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 result is undefined if
+-- the copy regions overlap in memory.
+--
+-- == Valid Usage
+--
+-- -   The @size@ member of each element of @pRegions@ /must/ be greater
+--     than @0@
+--
+-- -   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
+--     @VK_BUFFER_USAGE_TRANSFER_SRC_BIT@ usage flag
+--
+-- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @srcBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     @VkBufferCopy@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferCopy',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdCopyBuffer" vkCmdCopyBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcBuffer" ::: VkBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferCopy) -> IO ()
+-- | vkCmdCopyImage - Copy data between images
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @srcImage@ is the source image.
+--
+-- -   @srcImageLayout@ is the current layout of the source image
+--     subresource.
+--
+-- -   @dstImage@ is the destination image.
+--
+-- -   @dstImageLayout@ is the current layout of the destination image
+--     subresource.
+--
+-- -   @regionCount@ is the number of regions to copy.
+--
+-- -   @pRegions@ is a pointer to an array of 'VkImageCopy' structures
+--     specifying the regions to copy.
+--
+-- = 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 considered compatible if their element size is the same between both
+-- formats. For example, @VK_FORMAT_R8G8B8A8_UNORM@ is compatible with
+-- @VK_FORMAT_R32_UINT@ because both texels are 4 bytes in size.
+-- Depth\/stencil formats /must/ match exactly.
+--
+-- If the format of @srcImage@ or @dstImage@ is a [/multi-planar/ image
+-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+-- regions of each plane to be copied /must/ be specified separately using
+-- the @srcSubresource@ and @dstSubresource@ members of the 'VkImageCopy'
+-- structure. In this case, the @aspectMask@ of the @srcSubresource@ or
+-- @dstSubresource@ that refers to the multi-planar image /must/ be
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@. For the purposes of @vkCmdCopyImage@,
+-- each plane of a multi-planar image is treated as having the format
+-- listed in
+-- [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+-- for the plane identified by the @aspectMask@ of the corresponding
+-- subresource. This applies both to 'Graphics.Vulkan.Core10.Core.VkFormat'
+-- 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 @VK_IMAGE_ASPECT_PLANE_1_BIT@ plane of a
+-- @VK_FORMAT_G8_B8R8_2PLANE_420_UNORM@ image is compatible with an image
+-- of format @VK_FORMAT_R8G8_UNORM@ and (less usefully) with the
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ plane of an image of format
+-- @VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16@, as each texel is
+-- 2 bytes in size.
+--
+-- @vkCmdCopyImage@ allows copying between /size-compatible/ compressed and
+-- uncompressed internal formats. Formats are size-compatible if the
+-- element size of the uncompressed format is equal to the element size
+-- (compressed 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
+-- [/multi-planar/](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+-- are treated as having a 2×1 compressed texel block for the purposes of
+-- these rules.
+--
+-- @vkCmdCopyImage@ /can/ be used to copy image data between multisample
+-- images, but both images /must/ have the same number of samples.
+--
+-- == Valid Usage
+--
+-- -   The source region specified by each element of @pRegions@ /must/ be
+--     a region that is contained within @srcImage@ if the @srcImage@’s
+--     'Graphics.Vulkan.Core10.Core.VkFormat' is not a [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     and /must/ be a region that is contained within the plane being
+--     copied if the @srcImage@’s 'Graphics.Vulkan.Core10.Core.VkFormat' is
+--     a multi-planar format
+--
+-- -   The destination region specified by each element of @pRegions@
+--     /must/ be a region that is contained within @dstImage@ if the
+--     @dstImage@’s 'Graphics.Vulkan.Core10.Core.VkFormat' is not a
+--     [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     and /must/ be a region that is contained within the plane being
+--     copied to if the @dstImage@’s 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     is a multi-planar format
+--
+-- -   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/ use a format that supports
+--     @VK_FORMAT_FEATURE_TRANSFER_SRC_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFormatProperties'
+--
+-- -   @srcImage@ /must/ have been created with
+--     @VK_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
+--     @VkDeviceMemory@ object
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a @VkDevice@
+--
+-- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@,
+--     @VK_IMAGE_LAYOUT_GENERAL@, or @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@
+--
+-- -   @dstImage@ /must/ use a format that supports
+--     @VK_FORMAT_FEATURE_TRANSFER_DST_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFormatProperties'
+--
+-- -   @dstImage@ /must/ have been created with
+--     @VK_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 @VkDeviceMemory@ object
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a @VkDevice@
+--
+-- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@,
+--     @VK_IMAGE_LAYOUT_GENERAL@, or @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@
+--
+-- -   If the 'Graphics.Vulkan.Core10.Core.VkFormat' of each of @srcImage@
+--     and @dstImage@ is not a [/multi-planar
+--     format/](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     the 'Graphics.Vulkan.Core10.Core.VkFormat' of each of @srcImage@ and
+--     @dstImage@ /must/ be compatible, as defined
+--     [below](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies-images-format-compatibility)
+--
+-- -   In a copy to or from a plane of a [multi-planar
+--     image](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     the 'Graphics.Vulkan.Core10.Core.VkFormat' of the image and plane
+--     /must/ be compatible according to [the description of compatible
+--     planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+--     for the plane being copied
+--
+-- -   When a copy is performed to or from an image with a [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     the @aspectMask@ of the @srcSubresource@ and\/or @dstSubresource@
+--     that refers to the multi-planar image /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@ (with @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--     valid only for a 'Graphics.Vulkan.Core10.Core.VkFormat' with three
+--     planes)
+--
+-- -   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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
+--     created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
+--     created
+--
+-- -   The @srcOffset@ and 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
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
+--
+-- -   The @dstOffset@ and 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
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @srcImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid @VkImageCopy@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkImageCopy',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
+foreign import ccall "vkCmdCopyImage" vkCmdCopyImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageCopy) -> IO ()
+-- | vkCmdBlitImage - Copy regions of an image, potentially performing format
+-- conversion,
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @srcImage@ is the source image.
+--
+-- -   @srcImageLayout@ is the layout of the source image subresources for
+--     the blit.
+--
+-- -   @dstImage@ is the destination image.
+--
+-- -   @dstImageLayout@ is the layout of the destination image subresources
+--     for the blit.
+--
+-- -   @regionCount@ is the number of regions to blit.
+--
+-- -   @pRegions@ is a pointer to an array of 'VkImageBlit' structures
+--     specifying the regions to blit.
+--
+-- -   @filter@ is a 'Graphics.Vulkan.Core10.Sampler.VkFilter' specifying
+--     the filter to apply if the blits require scaling.
+--
+-- = Description
+--
+-- @vkCmdBlitImage@ /must/ not be used for multisampled source or
+-- destination images. Use 'vkCmdResolveImage' 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 [unnormalized to integer
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-unnormalized-to-integer):
+--
+--     -   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:
+--
+--     -   scale_u = (xsrc1 - xsrc0) \/ (xdst1 - xdst0)
+--
+--     -   scale_v = (ysrc1 - ysrc0) \/ (ydst1 - ydst0)
+--
+--     -   scale_w = (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 [Image Operations
+-- chapter](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures),
+-- with the filter mode equal to that of @filter@, a mipmap mode of
+-- @VK_SAMPLER_MIPMAP_MODE_NEAREST@ and an address mode of
+-- @VK_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.
+--
+-- 3D textures are blitted slice by slice. Slices in the source region
+-- bounded by @srcOffsets@[0].@z@ and @srcOffsets@[1].@z@ are copied to
+-- slices in the destination region bounded by @dstOffsets@[0].@z@ and
+-- @dstOffsets@[1].@z@. For each destination slice, a source __z__
+-- coordinate is linearly interpolated between @srcOffsets@[0].@z@ and
+-- @srcOffsets@[1].@z@. If the @filter@ parameter is @VK_FILTER_LINEAR@
+-- then the value sampled from the source image is taken by doing linear
+-- filtering using the interpolated __z__ coordinate. If @filter@ parameter
+-- is @VK_FILTER_NEAREST@ then value sampled from the source image is taken
+-- from the single nearest slice (with undefined 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
+--
+-- -   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
+--
+-- -   @srcImage@ /must/ use a format that supports
+--     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   @srcImage@ /must/ not use a format listed in
+--     [{html_spec_relative}#features-formats-requiring-sampler-ycbcr-conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--
+-- -   @srcImage@ /must/ have been created with
+--     @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
+--
+-- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @srcImageLayout@ /must/ specify the layout of the image subresources
+--     of @srcImage@ specified in @pRegions@ at the time this command is
+--     executed on a @VkDevice@
+--
+-- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@,
+--     @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or @VK_IMAGE_LAYOUT_GENERAL@
+--
+-- -   @dstImage@ /must/ use a format that supports
+--     @VK_FORMAT_FEATURE_BLIT_DST_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   @dstImage@ /must/ not use a format listed in
+--     [{html_spec_relative}#features-formats-requiring-sampler-ycbcr-conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--
+-- -   @dstImage@ /must/ have been created with
+--     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @dstImageLayout@ /must/ specify the layout of the image subresources
+--     of @dstImage@ specified in @pRegions@ at the time this command is
+--     executed on a @VkDevice@
+--
+-- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@,
+--     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or @VK_IMAGE_LAYOUT_GENERAL@
+--
+-- -   The sample count of @srcImage@ and @dstImage@ /must/ both be equal
+--     to @VK_SAMPLE_COUNT_1_BIT@
+--
+-- -   If either of @srcImage@ or @dstImage@ was created with a signed
+--     integer 'Graphics.Vulkan.Core10.Core.VkFormat', the other /must/
+--     also have been created with a signed integer
+--     'Graphics.Vulkan.Core10.Core.VkFormat'
+--
+-- -   If either of @srcImage@ or @dstImage@ was created with an unsigned
+--     integer 'Graphics.Vulkan.Core10.Core.VkFormat', the other /must/
+--     also have been created with an unsigned integer
+--     'Graphics.Vulkan.Core10.Core.VkFormat'
+--
+-- -   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 @VK_FILTER_NEAREST@
+--
+-- -   @srcImage@ /must/ have been created with a @samples@ value of
+--     @VK_SAMPLE_COUNT_1_BIT@
+--
+-- -   @dstImage@ /must/ have been created with a @samples@ value of
+--     @VK_SAMPLE_COUNT_1_BIT@
+--
+-- -   If @filter@ is @VK_FILTER_LINEAR@, @srcImage@ /must/ be of a format
+--     which supports linear filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   If @filter@ is @VK_FILTER_CUBIC_IMG@, @srcImage@ /must/ be of a
+--     format which supports cubic filtering, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ (for a linear image) or
+--     @VkFormatProperties@::@optimalTilingFeatures@(for an optimally tiled
+--     image) returned by @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   If @filter@ is @VK_FILTER_CUBIC_IMG@, @srcImage@ /must/ have a
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType' of
+--     @VK_IMAGE_TYPE_3D@
+--
+-- -   The @srcSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
+--     created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
+--     created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @srcImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid @VkImageBlit@ structures
+--
+-- -   @filter@ /must/ be a valid 'Graphics.Vulkan.Core10.Sampler.VkFilter'
+--     value
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Sampler.VkFilter',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkImageBlit',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
+foreign import ccall "vkCmdBlitImage" vkCmdBlitImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageBlit) -> ("filter" ::: VkFilter) -> IO ()
+-- | vkCmdCopyBufferToImage - Copy data from a buffer into an image
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @srcBuffer@ is the source buffer.
+--
+-- -   @dstImage@ is the destination image.
+--
+-- -   @dstImageLayout@ is the layout of the destination image subresources
+--     for the copy.
+--
+-- -   @regionCount@ is the number of regions to copy.
+--
+-- -   @pRegions@ is a pointer to an array of 'VkBufferImageCopy'
+--     structures specifying the regions to copy.
+--
+-- = 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 [multi-planar image
+-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)),
+-- regions of each plane to be a target of a copy /must/ be specified
+-- separately using the @pRegions@ member of the 'VkBufferImageCopy'
+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/
+-- be @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@. For the purposes of
+-- @vkCmdCopyBufferToImage@, each plane of a multi-planar image is treated
+-- as having the format listed in
+-- [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+-- for the plane identified by the @aspectMask@ of the corresponding
+-- subresource. This applies both to 'Graphics.Vulkan.Core10.Core.VkFormat'
+-- 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
+--
+-- -   The buffer region specified by each element of @pRegions@ /must/ be
+--     a region that is contained within @srcBuffer@
+--
+-- -   The image region specified by each element of @pRegions@ /must/ be a
+--     region that is contained within @dstImage@ if the @dstImage@’s
+--     'Graphics.Vulkan.Core10.Core.VkFormat' is not a [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     and /must/ be a region that is contained within the plane being
+--     copied to if the @dstImage@’s 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     is a multi-planar format
+--
+-- -   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
+--     @VK_BUFFER_USAGE_TRANSFER_SRC_BIT@ usage flag
+--
+-- -   @dstImage@ /must/ use a format that supports
+--     @VK_FORMAT_FEATURE_TRANSFER_DST_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFormatProperties'
+--
+-- -   If @srcBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @dstImage@ /must/ have been created with
+--     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @dstImage@ /must/ have a sample count equal to
+--     @VK_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 @VkDevice@
+--
+-- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@,
+--     @VK_IMAGE_LAYOUT_GENERAL@, or @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@
+--
+-- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
+--     created
+--
+-- -   The @imageOffset@ and 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
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @srcBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @dstImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid @VkBufferImageCopy@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferImageCopy',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
+foreign import ccall "vkCmdCopyBufferToImage" vkCmdCopyBufferToImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcBuffer" ::: VkBuffer) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferImageCopy) -> IO ()
+-- | vkCmdCopyImageToBuffer - Copy image data into a buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @srcImage@ is the source image.
+--
+-- -   @srcImageLayout@ is the layout of the source image subresources for
+--     the copy.
+--
+-- -   @dstBuffer@ is the destination buffer.
+--
+-- -   @regionCount@ is the number of regions to copy.
+--
+-- -   @pRegions@ is a pointer to an array of 'VkBufferImageCopy'
+--     structures specifying the regions to copy.
+--
+-- = 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 'Graphics.Vulkan.Core10.Core.VkFormat' of @srcImage@ is a
+-- [multi-planar image
+-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+-- regions of each plane to be a source of a copy /must/ be specified
+-- separately using the @pRegions@ member of the 'VkBufferImageCopy'
+-- structure. In this case, the @aspectMask@ of @imageSubresource@ /must/
+-- be @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@. For the purposes of
+-- @vkCmdCopyBufferToImage@, each plane of a multi-planar image is treated
+-- as having the format listed in
+-- [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+-- for the plane identified by the @aspectMask@ of the corresponding
+-- subresource. This applies both to 'Graphics.Vulkan.Core10.Core.VkFormat'
+-- 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
+--
+-- -   The image region specified by each element of @pRegions@ /must/ be a
+--     region that is contained within @srcImage@ if the @srcImage@’s
+--     'Graphics.Vulkan.Core10.Core.VkFormat' is not a [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     and /must/ be a region that is contained within the plane being
+--     copied if the @srcImage@’s 'Graphics.Vulkan.Core10.Core.VkFormat' is
+--     a multi-planar format
+--
+-- -   The buffer region specified by each element of @pRegions@ /must/ be
+--     a region that is contained within @dstBuffer@
+--
+-- -   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/ use a format that supports
+--     @VK_FORMAT_FEATURE_TRANSFER_SRC_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFormatProperties'
+--
+-- -   @srcImage@ /must/ have been created with
+--     @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage flag
+--
+-- -   If @srcImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @srcImage@ /must/ have a sample count equal to
+--     @VK_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 @VkDevice@
+--
+-- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@,
+--     @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or @VK_IMAGE_LAYOUT_GENERAL@
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   The @imageSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
+--     created
+--
+-- -   The @imageOffset@ and 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
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @srcImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid @VkBufferImageCopy@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', 'VkBufferImageCopy',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout'
+foreign import ccall "vkCmdCopyImageToBuffer" vkCmdCopyImageToBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstBuffer" ::: VkBuffer) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkBufferImageCopy) -> IO ()
+-- | vkCmdUpdateBuffer - Update a buffer’s contents from host memory
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @dstBuffer@ is a handle to the buffer to be updated.
+--
+-- -   @dstOffset@ is the byte offset into the buffer to start updating,
+--     and /must/ be a multiple of 4.
+--
+-- -   @dataSize@ is the number of bytes to update, and /must/ be a
+--     multiple of 4.
+--
+-- -   @pData@ is a pointer to the source data for the buffer update, and
+--     /must/ be at least @dataSize@ bytes in size.
+--
+-- = Description
+--
+-- @dataSize@ /must/ be less than or equal to 65536 bytes. For larger
+-- updates, applications /can/ use buffer to buffer
+-- [copies](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies-buffers).
+--
+-- __Note__
+--
+-- Buffer updates performed with @vkCmdUpdateBuffer@ 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 [buffer to buffer
+-- copies](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies-buffers)
+-- 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
+-- @vkCmdUpdateBuffer@ 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.
+--
+-- @vkCmdUpdateBuffer@ is only allowed outside of a render pass. This
+-- command is treated as “transfer” operation, for the purposes of
+-- synchronization barriers. The @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ /must/
+-- be specified in @usage@ of
+-- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo' in order for the
+-- buffer to be compatible with @vkCmdUpdateBuffer@.
+--
+-- == 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
+--     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @dstOffset@ /must/ be a multiple of @4@
+--
+-- -   @dataSize@ /must/ be less than or equal to @65536@
+--
+-- -   @dataSize@ /must/ be a multiple of @4@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
+foreign import ccall "vkCmdUpdateBuffer" vkCmdUpdateBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("dataSize" ::: VkDeviceSize) -> ("pData" ::: Ptr ()) -> IO ()
+-- | vkCmdFillBuffer - Fill a region of a buffer with a fixed value
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @dstBuffer@ is the buffer to be filled.
+--
+-- -   @dstOffset@ is the byte offset into the buffer at which to start
+--     filling, and /must/ be a multiple of 4.
+--
+-- -   @size@ is the number of bytes to fill, and /must/ be either a
+--     multiple of 4, or @VK_WHOLE_SIZE@ to fill the range from @offset@ to
+--     the end of the buffer. If @VK_WHOLE_SIZE@ is used and the remaining
+--     size of the buffer is not a multiple of 4, then the nearest smaller
+--     multiple is used.
+--
+-- -   @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.
+--
+-- = Description
+--
+-- @vkCmdFillBuffer@ is treated as “transfer” operation for the purposes of
+-- synchronization barriers. The @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ /must/
+-- be specified in @usage@ of @VkBufferCreateInfo@ in order for the buffer
+-- to be compatible with @vkCmdFillBuffer@.
+--
+-- == Valid Usage
+--
+-- -   @dstOffset@ /must/ be less than the size of @dstBuffer@
+--
+-- -   @dstOffset@ /must/ be a multiple of @4@
+--
+-- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be greater
+--     than @0@
+--
+-- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be less
+--     than or equal to the size of @dstBuffer@ minus @dstOffset@
+--
+-- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be a
+--     multiple of @4@
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
+foreign import ccall "vkCmdFillBuffer" vkCmdFillBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("size" ::: VkDeviceSize) -> ("data" ::: Word32) -> IO ()
+-- | vkCmdClearColorImage - Clear regions of a color image
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @image@ is the image to be cleared.
+--
+-- -   @imageLayout@ specifies the current layout of the image subresource
+--     ranges to be cleared, and /must/ be
+--     @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@, @VK_IMAGE_LAYOUT_GENERAL@ or
+--     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@.
+--
+-- -   @pColor@ is a pointer to a 'VkClearColorValue' structure that
+--     contains the values the image subresource ranges will be cleared to
+--     (see
+--     [{html_spec_relative}#clears-values](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears-values)
+--     below).
+--
+-- -   @rangeCount@ is the number of image subresource range structures in
+--     @pRanges@.
+--
+-- -   @pRanges@ points to an array of
+--     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+--     structures that describe a range of mipmap levels, array layers, and
+--     aspects to be cleared, as described in [Image
+--     Views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views).
+--     The @aspectMask@ of all image subresource ranges /must/ only include
+--     @VK_IMAGE_ASPECT_COLOR_BIT@.
+--
+-- = Description
+--
+-- Each specified range in @pRanges@ is cleared to the value specified by
+-- @pColor@.
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ use a format that supports
+--     @VK_FORMAT_FEATURE_TRANSFER_DST_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   @image@ /must/ have been created with
+--     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   @image@ /must/ not use a format listed in
+--     [{html_spec_relative}#features-formats-requiring-sampler-ycbcr-conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--
+-- -   If @image@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ 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 @VkDevice@
+--
+-- -   @imageLayout@ /must/ be @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@,
+--     @VK_IMAGE_LAYOUT_GENERAL@, or @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@
+--
+-- -   The
+--     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseMipLevel@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+--     element of @pRanges@, if the @levelCount@ member is not
+--     @VK_REMAINING_MIP_LEVELS@, then @baseMipLevel@ + @levelCount@ /must/
+--     be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   The
+--     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseArrayLayer@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @arrayLayers@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+--     element of @pRanges@, if the @layerCount@ member is not
+--     @VK_REMAINING_ARRAY_LAYERS@, then @baseArrayLayer@ + @layerCount@
+--     /must/ be less than the @arrayLayers@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   @image@ /must/ not have a compressed or depth\/stencil format
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @imageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @pColor@ /must/ be a valid pointer to a valid @VkClearColorValue@
+--     union
+--
+-- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
+--     valid @VkImageSubresourceRange@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'VkClearColorValue', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+foreign import ccall "vkCmdClearColorImage" vkCmdClearColorImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("image" ::: VkImage) -> ("imageLayout" ::: VkImageLayout) -> ("pColor" ::: Ptr VkClearColorValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr VkImageSubresourceRange) -> IO ()
+-- | vkCmdClearDepthStencilImage - Fill regions of a combined depth\/stencil
+-- image
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @image@ is the image to be cleared.
+--
+-- -   @imageLayout@ specifies the current layout of the image subresource
+--     ranges to be cleared, and /must/ be @VK_IMAGE_LAYOUT_GENERAL@ or
+--     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@.
+--
+-- -   @pDepthStencil@ is a pointer to a 'VkClearDepthStencilValue'
+--     structure that contains the values the depth and stencil image
+--     subresource ranges will be cleared to (see
+--     [{html_spec_relative}#clears-values](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears-values)
+--     below).
+--
+-- -   @rangeCount@ is the number of image subresource range structures in
+--     @pRanges@.
+--
+-- -   @pRanges@ points to an array of
+--     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+--     structures that describe a range of mipmap levels, array layers, and
+--     aspects to be cleared, as described in [Image
+--     Views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views).
+--     The @aspectMask@ of each image subresource range in @pRanges@ /can/
+--     include @VK_IMAGE_ASPECT_DEPTH_BIT@ if the image format has a depth
+--     component, and @VK_IMAGE_ASPECT_STENCIL_BIT@ if the image format has
+--     a stencil component. @pDepthStencil@ is a pointer to a
+--     @VkClearDepthStencilValue@ structure that contains the values the
+--     image subresource ranges will be cleared to (see
+--     [{html_spec_relative}#clears-values](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears-values)
+--     below).
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ use a format that supports
+--     @VK_FORMAT_FEATURE_TRANSFER_DST_BIT@, which is indicated by
+--     @VkFormatProperties@::@linearTilingFeatures@ (for linearly tiled
+--     images) or @VkFormatProperties@::@optimalTilingFeatures@ (for
+--     optimally tiled images) - as returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   @image@ /must/ have been created with
+--     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @image@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ 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 @VkDevice@
+--
+-- -   @imageLayout@ /must/ be either of
+--     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or @VK_IMAGE_LAYOUT_GENERAL@
+--
+-- -   The
+--     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseMipLevel@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+--     element of @pRanges@, if the @levelCount@ member is not
+--     @VK_REMAINING_MIP_LEVELS@, then @baseMipLevel@ + @levelCount@ /must/
+--     be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   The
+--     'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'::@baseArrayLayer@
+--     members of the elements of the @pRanges@ array /must/ each be less
+--     than the @arrayLayers@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   For each 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+--     element of @pRanges@, if the @layerCount@ member is not
+--     @VK_REMAINING_ARRAY_LAYERS@, then @baseArrayLayer@ + @layerCount@
+--     /must/ be less than the @arrayLayers@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   @image@ /must/ have a depth\/stencil format
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @imageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @pDepthStencil@ /must/ be a valid pointer to a valid
+--     @VkClearDepthStencilValue@ structure
+--
+-- -   @pRanges@ /must/ be a valid pointer to an array of @rangeCount@
+--     valid @VkImageSubresourceRange@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'VkClearDepthStencilValue',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange'
+foreign import ccall "vkCmdClearDepthStencilImage" vkCmdClearDepthStencilImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("image" ::: VkImage) -> ("imageLayout" ::: VkImageLayout) -> ("pDepthStencil" ::: Ptr VkClearDepthStencilValue) -> ("rangeCount" ::: Word32) -> ("pRanges" ::: Ptr VkImageSubresourceRange) -> IO ()
+-- | vkCmdClearAttachments - Clear regions within bound framebuffer
+-- attachments
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @attachmentCount@ is the number of entries in the @pAttachments@
+--     array.
+--
+-- -   @pAttachments@ is a pointer to an array of 'VkClearAttachment'
+--     structures defining the attachments to clear and the clear values to
+--     use.
+--
+-- -   @rectCount@ is the number of entries in the @pRects@ array.
+--
+-- -   @pRects@ points to an array of 'VkClearRect' structures defining
+--     regions within each selected attachment to clear.
+--
+-- = Description
+--
+-- @vkCmdClearAttachments@ /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.
+--
+-- == Valid Usage
+--
+-- -   If the @aspectMask@ member of any element of @pAttachments@ contains
+--     @VK_IMAGE_ASPECT_COLOR_BIT@, the @colorAttachment@ member of that
+--     element /must/ refer to a valid color attachment in the current
+--     subpass
+--
+-- -   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
+--
+-- -   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 @VkCommandBuffer@ handle
+--
+-- -   @pAttachments@ /must/ be a valid pointer to an array of
+--     @attachmentCount@ valid @VkClearAttachment@ structures
+--
+-- -   @pRects@ /must/ be a valid pointer to an array of @rectCount@
+--     @VkClearRect@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'VkClearAttachment', 'VkClearRect',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdClearAttachments" vkCmdClearAttachments :: ("commandBuffer" ::: VkCommandBuffer) -> ("attachmentCount" ::: Word32) -> ("pAttachments" ::: Ptr VkClearAttachment) -> ("rectCount" ::: Word32) -> ("pRects" ::: Ptr VkClearRect) -> IO ()
+-- | vkCmdResolveImage - Resolve regions of an image
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @srcImage@ is the source image.
+--
+-- -   @srcImageLayout@ is the layout of the source image subresources for
+--     the resolve.
+--
+-- -   @dstImage@ is the destination image.
+--
+-- -   @dstImageLayout@ is the layout of the destination image subresources
+--     for the resolve.
+--
+-- -   @regionCount@ is the number of regions to resolve.
+--
+-- -   @pRegions@ is a pointer to an array of 'VkImageResolve' structures
+--     specifying the regions to resolve.
+--
+-- = 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@.
+--
+-- 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
+--
+-- -   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 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 @VkDeviceMemory@ object
+--
+-- -   @srcImage@ /must/ have a sample count equal to any valid sample
+--     count value other than @VK_SAMPLE_COUNT_1_BIT@
+--
+-- -   If @dstImage@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @dstImage@ /must/ have a sample count equal to
+--     @VK_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 @VkDevice@
+--
+-- -   @srcImageLayout@ /must/ be @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@,
+--     @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ or @VK_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 @VkDevice@
+--
+-- -   @dstImageLayout@ /must/ be @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@,
+--     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ or @VK_IMAGE_LAYOUT_GENERAL@
+--
+-- -   If @dstImage@ was created with @tiling@ equal to
+--     @VK_IMAGE_TILING_LINEAR@, @dstImage@ /must/ have been created with a
+--     @format@ that supports being a color attachment, as specified by the
+--     @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   If @dstImage@ was created with @tiling@ equal to
+--     @VK_IMAGE_TILING_OPTIMAL@, @dstImage@ /must/ have been created with
+--     a @format@ that supports being a color attachment, as specified by
+--     the @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
+--     @VkFormatProperties@::@optimalTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   @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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @srcImage@ was
+--     created
+--
+-- -   The @dstSubresource.mipLevel@ member of each element of @pRegions@
+--     /must/ be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' 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
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @dstImage@ was
+--     created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @srcImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @srcImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @dstImage@ /must/ be a valid @VkImage@ handle
+--
+-- -   @dstImageLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @pRegions@ /must/ be a valid pointer to an array of @regionCount@
+--     valid @VkImageResolve@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout', 'VkImageResolve'
+foreign import ccall "vkCmdResolveImage" vkCmdResolveImage :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcImage" ::: VkImage) -> ("srcImageLayout" ::: VkImageLayout) -> ("dstImage" ::: VkImage) -> ("dstImageLayout" ::: VkImageLayout) -> ("regionCount" ::: Word32) -> ("pRegions" ::: Ptr VkImageResolve) -> IO ()
+-- | vkCmdSetEvent - Set an event object to signaled state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @event@ is the event that will be signaled.
+--
+-- -   @stageMask@ specifies the [source stage
+--     mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages)
+--     used to determine when the @event@ is signaled.
+--
+-- = Description
+--
+-- When 'vkCmdSetEvent' 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 [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes all commands that occur earlier in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order).
+-- The synchronization scope is limited to operations on the pipeline
+-- stages determined by the [source stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- specified by @stageMask@.
+--
+-- The second [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes only the event signal operation.
+--
+-- If @event@ is already in the signaled state when 'vkCmdSetEvent' is
+-- executed on the device, then 'vkCmdSetEvent' has no effect, no event
+-- signal operation occurs, and no execution dependency is generated.
+--
+-- == Valid Usage
+--
+-- -   @stageMask@ /must/ not include @VK_PIPELINE_STAGE_HOST_BIT@
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
+--     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
+--
+-- -   @commandBuffer@’s current device mask /must/ include exactly one
+--     physical device.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @event@ /must/ be a valid @VkEvent@ handle
+--
+-- -   @stageMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
+--
+-- -   @stageMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Event.VkEvent',
+-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
+foreign import ccall "vkCmdSetEvent" vkCmdSetEvent :: ("commandBuffer" ::: VkCommandBuffer) -> ("event" ::: VkEvent) -> ("stageMask" ::: VkPipelineStageFlags) -> IO ()
+-- | vkCmdResetEvent - Reset an event object to non-signaled state
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @event@ is the event that will be unsignaled.
+--
+-- -   @stageMask@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
+--     the [source stage
+--     mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages)
+--     used to determine when the @event@ is unsignaled.
+--
+-- = Description
+--
+-- When 'vkCmdResetEvent' 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 [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes all commands that occur earlier in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order).
+-- The synchronization scope is limited to operations on the pipeline
+-- stages determined by the [source stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- specified by @stageMask@.
+--
+-- The second [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes only the event unsignal operation.
+--
+-- If @event@ is already in the unsignaled state when 'vkCmdResetEvent' is
+-- executed on the device, then 'vkCmdResetEvent' has no effect, no event
+-- unsignal operation occurs, and no execution dependency is generated.
+--
+-- == Valid Usage
+--
+-- -   @stageMask@ /must/ not include @VK_PIPELINE_STAGE_HOST_BIT@
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @stageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
+--     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
+--
+-- -   When this command executes, @event@ /must/ not be waited on by a
+--     @vkCmdWaitEvents@ command that is currently executing
+--
+-- -   @commandBuffer@’s current device mask /must/ include exactly one
+--     physical device.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @event@ /must/ be a valid @VkEvent@ handle
+--
+-- -   @stageMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
+--
+-- -   @stageMask@ /must/ not be @0@
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Event.VkEvent',
+-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
+foreign import ccall "vkCmdResetEvent" vkCmdResetEvent :: ("commandBuffer" ::: VkCommandBuffer) -> ("event" ::: VkEvent) -> ("stageMask" ::: VkPipelineStageFlags) -> IO ()
+-- | vkCmdWaitEvents - Wait for one or more events and insert a set of memory
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @eventCount@ is the length of the @pEvents@ array.
+--
+-- -   @pEvents@ is an array of event object handles to wait on.
+--
+-- -   @srcStageMask@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
+--     the [source stage
+--     mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages).
+--
+-- -   @dstStageMask@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
+--     the [destination stage
+--     mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages).
+--
+-- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
+--
+-- -   @pMemoryBarriers@ is a pointer to an array of 'VkMemoryBarrier'
+--     structures.
+--
+-- -   @bufferMemoryBarrierCount@ is the length of the
+--     @pBufferMemoryBarriers@ array.
+--
+-- -   @pBufferMemoryBarriers@ is a pointer to an array of
+--     'VkBufferMemoryBarrier' structures.
+--
+-- -   @imageMemoryBarrierCount@ is the length of the
+--     @pImageMemoryBarriers@ array.
+--
+-- -   @pImageMemoryBarriers@ is a pointer to an array of
+--     'VkImageMemoryBarrier' structures.
+--
+-- = Description
+--
+-- When @vkCmdWaitEvents@ 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. @vkCmdWaitEvents@ /must/ not be used
+-- to wait on event signal operations occuring 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 'vkCmdSetEvent' that occur earlier in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order)
+-- are included in the first synchronization scope, if the [logically
+-- latest](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-order)
+-- pipeline stage in their @stageMask@ parameter is [logically
+-- earlier](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-order)
+-- than or equal to the [logically
+-- latest](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-order)
+-- pipeline stage in @srcStageMask@. Event signal operations performed by
+-- 'Graphics.Vulkan.Core10.Event.vkSetEvent' are only included in the first
+-- synchronization scope if @VK_PIPELINE_STAGE_HOST_BIT@ is included in
+-- @srcStageMask@.
+--
+-- The second [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes all commands that occur later in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order).
+-- The second synchronization scope is limited to operations on the
+-- pipeline stages determined by the [destination stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- specified by @dstStageMask@.
+--
+-- The first [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access in the pipeline stages determined by the [source
+-- stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- 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 [memory
+-- barriers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-memory-barriers).
+-- If no memory barriers are specified, then the first access scope
+-- includes no accesses.
+--
+-- The second [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access in the pipeline stages determined by the
+-- [destination stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- 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 [memory
+-- barriers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-memory-barriers).
+-- If no memory barriers are specified, then the second access scope
+-- includes no accesses.
+--
+-- __Note__
+--
+-- 'vkCmdWaitEvents' is used with 'vkCmdSetEvent' 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.
+--
+-- __Note__
+--
+-- Applications /should/ be careful to avoid race conditions when using
+-- events. There is no direct ordering guarantee between a
+-- 'vkCmdResetEvent' command and a 'vkCmdWaitEvents' command submitted
+-- after it, so some other execution dependency /must/ be included between
+-- these commands (e.g. a semaphore).
+--
+-- == Valid Usage
+--
+-- -   @srcStageMask@ /must/ be the bitwise OR of the @stageMask@ parameter
+--     used in previous calls to @vkCmdSetEvent@ with any of the members of
+--     @pEvents@ and @VK_PIPELINE_STAGE_HOST_BIT@ if any of the members of
+--     @pEvents@ was set using @vkSetEvent@
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
+--     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
+--     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
+--
+-- -   If @pEvents@ includes one or more events that will be signaled by
+--     @vkSetEvent@ after @commandBuffer@ has been submitted to a queue,
+--     then @vkCmdWaitEvents@ /must/ not be called inside a render pass
+--     instance
+--
+-- -   Any pipeline stage included in @srcStageMask@ or @dstStageMask@
+--     /must/ be supported by the capabilities of the queue family
+--     specified by the @queueFamilyIndex@ member of the
+--     'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo'
+--     structure that was used to create the @VkCommandPool@ that
+--     @commandBuffer@ was allocated from, as specified in the [table of
+--     supported pipeline
+--     stages](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-supported).
+--
+-- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ or
+--     @pImageMemoryBarriers@ /must/ not have any access flag included in
+--     its @srcAccessMask@ member if that bit is not supported by any of
+--     the pipeline stages in @srcStageMask@, as specified in the [table of
+--     supported access
+--     types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types-supported).
+--
+-- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ or
+--     @pImageMemoryBarriers@ /must/ not have any access flag included in
+--     its @dstAccessMask@ member if that bit is not supported by any of
+--     the pipeline stages in @dstStageMask@, as specified in the [table of
+--     supported access
+--     types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types-supported).
+--
+-- -   @commandBuffer@’s current device mask /must/ include exactly one
+--     physical device.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pEvents@ /must/ be a valid pointer to an array of @eventCount@
+--     valid @VkEvent@ handles
+--
+-- -   @srcStageMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
+--
+-- -   @srcStageMask@ /must/ not be @0@
+--
+-- -   @dstStageMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
+--
+-- -   @dstStageMask@ /must/ not be @0@
+--
+-- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
+--     valid pointer to an array of @memoryBarrierCount@ valid
+--     @VkMemoryBarrier@ structures
+--
+-- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
+--     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
+--     valid @VkBufferMemoryBarrier@ structures
+--
+-- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
+--     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
+--     valid @VkImageMemoryBarrier@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'VkBufferMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Event.VkEvent', 'VkImageMemoryBarrier',
+-- 'VkMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
+foreign import ccall "vkCmdWaitEvents" vkCmdWaitEvents :: ("commandBuffer" ::: VkCommandBuffer) -> ("eventCount" ::: Word32) -> ("pEvents" ::: Ptr VkEvent) -> ("srcStageMask" ::: VkPipelineStageFlags) -> ("dstStageMask" ::: VkPipelineStageFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr VkMemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr VkBufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr VkImageMemoryBarrier) -> IO ()
+-- | vkCmdPipelineBarrier - Insert a memory dependency
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @srcStageMask@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
+--     the [source stage
+--     mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks).
+--
+-- -   @dstStageMask@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying
+--     the [destination stage
+--     mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks).
+--
+-- -   @dependencyFlags@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Pass.VkDependencyFlagBits' specifying how
+--     execution and memory dependencies are formed.
+--
+-- -   @memoryBarrierCount@ is the length of the @pMemoryBarriers@ array.
+--
+-- -   @pMemoryBarriers@ is a pointer to an array of 'VkMemoryBarrier'
+--     structures.
+--
+-- -   @bufferMemoryBarrierCount@ is the length of the
+--     @pBufferMemoryBarriers@ array.
+--
+-- -   @pBufferMemoryBarriers@ is a pointer to an array of
+--     'VkBufferMemoryBarrier' structures.
+--
+-- -   @imageMemoryBarrierCount@ is the length of the
+--     @pImageMemoryBarriers@ array.
+--
+-- -   @pImageMemoryBarriers@ is a pointer to an array of
+--     'VkImageMemoryBarrier' structures.
+--
+-- = Description
+--
+-- When 'vkCmdPipelineBarrier' is submitted to a queue, it defines a memory
+-- dependency between commands that were submitted before it, and those
+-- submitted after it.
+--
+-- If 'vkCmdPipelineBarrier' was recorded outside a render pass instance,
+-- the first [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes all commands that occur earlier in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order).
+-- If 'vkCmdPipelineBarrier' was recorded inside a render pass instance,
+-- the first synchronization scope includes only commands that occur
+-- earlier in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order)
+-- within the same subpass. In either case, the first synchronization scope
+-- is limited to operations on the pipeline stages determined by the
+-- [source stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- specified by @srcStageMask@.
+--
+-- If 'vkCmdPipelineBarrier' was recorded outside a render pass instance,
+-- the second [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes all commands that occur later in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order).
+-- If 'vkCmdPipelineBarrier' was recorded inside a render pass instance,
+-- the second synchronization scope includes only commands that occur later
+-- in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order)
+-- within the same subpass. In either case, the second synchronization
+-- scope is limited to operations on the pipeline stages determined by the
+-- [destination stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- specified by @dstStageMask@.
+--
+-- The first [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access in the pipeline stages determined by the [source
+-- stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- 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 [memory
+-- barriers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-memory-barriers).
+-- If no memory barriers are specified, then the first access scope
+-- includes no accesses.
+--
+-- The second [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access in the pipeline stages determined by the
+-- [destination stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
+-- 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 [memory
+-- barriers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-memory-barriers).
+-- If no memory barriers are specified, then the second access scope
+-- includes no accesses.
+--
+-- If @dependencyFlags@ includes @VK_DEPENDENCY_BY_REGION_BIT@, then any
+-- dependency between
+-- [framebuffer-space](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-framebuffer-regions)
+-- pipeline stages is
+-- [framebuffer-local](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-framebuffer-regions)
+-- - otherwise it is
+-- [framebuffer-global](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-framebuffer-regions).
+--
+-- == Valid Usage
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @srcStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
+--     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @dstStageMask@ /must/ not contain
+--     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
+--     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     the render pass /must/ have been created with a
+--     @VkSubpassDependency@ instance in @pDependencies@ that expresses a
+--     dependency from the current subpass to itself.
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     @srcStageMask@ /must/ contain a subset of the bit values in the
+--     @srcStageMask@ member of that instance of @VkSubpassDependency@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     @dstStageMask@ /must/ contain a subset of the bit values in the
+--     @dstStageMask@ member of that instance of @VkSubpassDependency@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     the @srcAccessMask@ of any element of @pMemoryBarriers@ or
+--     @pImageMemoryBarriers@ /must/ contain a subset of the bit values the
+--     @srcAccessMask@ member of that instance of @VkSubpassDependency@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     the @dstAccessMask@ of any element of @pMemoryBarriers@ or
+--     @pImageMemoryBarriers@ /must/ contain a subset of the bit values the
+--     @dstAccessMask@ member of that instance of @VkSubpassDependency@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     @dependencyFlags@ /must/ be equal to the @dependencyFlags@ member of
+--     that instance of @VkSubpassDependency@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     @bufferMemoryBarrierCount@ /must/ be @0@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     the @image@ member of any element of @pImageMemoryBarriers@ /must/
+--     be equal to one of the elements of @pAttachments@ that the current
+--     @framebuffer@ was created with, that is also referred to by one of
+--     the elements of the @pColorAttachments@, @pResolveAttachments@ or
+--     @pDepthStencilAttachment@ members of the @VkSubpassDescription@
+--     instance that the current subpass was created with
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     the @oldLayout@ and @newLayout@ members of any element of
+--     @pImageMemoryBarriers@ /must/ be equal to the @layout@ member of an
+--     element of the @pColorAttachments@, @pResolveAttachments@ or
+--     @pDepthStencilAttachment@ members of the @VkSubpassDescription@
+--     instance that the current subpass was created with, that refers to
+--     the same @image@
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     the @oldLayout@ and @newLayout@ members of an element of
+--     @pImageMemoryBarriers@ /must/ be equal
+--
+-- -   If @vkCmdPipelineBarrier@ is called within a render pass instance,
+--     the @srcQueueFamilyIndex@ and @dstQueueFamilyIndex@ members of any
+--     element of @pImageMemoryBarriers@ /must/ be
+--     @VK_QUEUE_FAMILY_IGNORED@
+--
+-- -   Any pipeline stage included in @srcStageMask@ or @dstStageMask@
+--     /must/ be supported by the capabilities of the queue family
+--     specified by the @queueFamilyIndex@ member of the
+--     'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo'
+--     structure that was used to create the @VkCommandPool@ that
+--     @commandBuffer@ was allocated from, as specified in the [table of
+--     supported pipeline
+--     stages](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-supported).
+--
+-- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ and
+--     @pImageMemoryBarriers@ /must/ not have any access flag included in
+--     its @srcAccessMask@ member if that bit is not supported by any of
+--     the pipeline stages in @srcStageMask@, as specified in the [table of
+--     supported access
+--     types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types-supported).
+--
+-- -   Each element of @pMemoryBarriers@, @pBufferMemoryBarriers@ and
+--     @pImageMemoryBarriers@ /must/ not have any access flag included in
+--     its @dstAccessMask@ member if that bit is not supported by any of
+--     the pipeline stages in @dstStageMask@, as specified in the [table of
+--     supported access
+--     types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types-supported).
+--
+-- -   If @vkCmdPipelineBarrier@ is called outside of a render pass
+--     instance, @dependencyFlags@ /must/ not include
+--     @VK_DEPENDENCY_VIEW_LOCAL_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @srcStageMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
+--
+-- -   @srcStageMask@ /must/ not be @0@
+--
+-- -   @dstStageMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values
+--
+-- -   @dstStageMask@ /must/ not be @0@
+--
+-- -   @dependencyFlags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pass.VkDependencyFlagBits' values
+--
+-- -   If @memoryBarrierCount@ is not @0@, @pMemoryBarriers@ /must/ be a
+--     valid pointer to an array of @memoryBarrierCount@ valid
+--     @VkMemoryBarrier@ structures
+--
+-- -   If @bufferMemoryBarrierCount@ is not @0@, @pBufferMemoryBarriers@
+--     /must/ be a valid pointer to an array of @bufferMemoryBarrierCount@
+--     valid @VkBufferMemoryBarrier@ structures
+--
+-- -   If @imageMemoryBarrierCount@ is not @0@, @pImageMemoryBarriers@
+--     /must/ be a valid pointer to an array of @imageMemoryBarrierCount@
+--     valid @VkImageMemoryBarrier@ structures
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Transfer                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'VkBufferMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Pass.VkDependencyFlags', 'VkImageMemoryBarrier',
+-- 'VkMemoryBarrier', 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags'
+foreign import ccall "vkCmdPipelineBarrier" vkCmdPipelineBarrier :: ("commandBuffer" ::: VkCommandBuffer) -> ("srcStageMask" ::: VkPipelineStageFlags) -> ("dstStageMask" ::: VkPipelineStageFlags) -> ("dependencyFlags" ::: VkDependencyFlags) -> ("memoryBarrierCount" ::: Word32) -> ("pMemoryBarriers" ::: Ptr VkMemoryBarrier) -> ("bufferMemoryBarrierCount" ::: Word32) -> ("pBufferMemoryBarriers" ::: Ptr VkBufferMemoryBarrier) -> ("imageMemoryBarrierCount" ::: Word32) -> ("pImageMemoryBarriers" ::: Ptr VkImageMemoryBarrier) -> IO ()
+-- | vkCmdBeginQuery - Begin a query
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @queryPool@ is the query pool that will manage the results of the
+--     query.
+--
+-- -   @query@ is the query index within the query pool that will contain
+--     the results.
+--
+-- -   @flags@ is a bitmask of
+--     'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlagBits'
+--     specifying constraints on the types of queries that /can/ be
+--     performed.
+--
+-- = Description
+--
+-- If the @queryType@ of the pool is @VK_QUERY_TYPE_OCCLUSION@ and @flags@
+-- contains @VK_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 [Occlusion
+-- Queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-occlusion).
+--
+-- 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
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active)
+--     within @commandBuffer@
+--
+-- -   All queries used by the command /must/ be unavailable
+--
+-- -   If the [precise occlusion
+--     queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-occlusionQueryPrecise)
+--     feature is not enabled, or the @queryType@ used to create
+--     @queryPool@ was not @VK_QUERY_TYPE_OCCLUSION@, @flags@ /must/ not
+--     contain @VK_QUERY_CONTROL_PRECISE_BIT@
+--
+-- -   @query@ /must/ be less than the number of queries in @queryPool@
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     @VK_QUERY_TYPE_OCCLUSION@, the @VkCommandPool@ that @commandBuffer@
+--     was allocated from /must/ support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     @VK_QUERY_TYPE_PIPELINE_STATISTICS@ and any of the
+--     @pipelineStatistics@ indicate graphics operations, the
+--     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     @VK_QUERY_TYPE_PIPELINE_STATISTICS@ and any of the
+--     @pipelineStatistics@ indicate compute operations, the
+--     @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support compute operations
+--
+-- -   If @vkCmdBeginQuery@ 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 @VkCommandBuffer@ handle
+--
+-- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlagBits' values
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.VkQueryControlFlags',
+-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
+foreign import ccall "vkCmdBeginQuery" vkCmdBeginQuery :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> ("flags" ::: VkQueryControlFlags) -> IO ()
+-- | vkCmdEndQuery - Ends a query
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @queryPool@ is the query pool that is managing the results of the
+--     query.
+--
+-- -   @query@ is the query index within the query pool where the result is
+--     stored.
+--
+-- = Description
+--
+-- 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
+-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults' and
+-- 'vkCmdCopyQueryPoolResults', 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
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active)
+--
+-- -   @query@ /must/ be less than the number of queries in @queryPool@
+--
+-- -   If @vkCmdEndQuery@ 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 @VkCommandBuffer@ handle
+--
+-- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
+foreign import ccall "vkCmdEndQuery" vkCmdEndQuery :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> IO ()
+-- | vkCmdResetQueryPool - Reset queries in a query pool
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @queryPool@ is the handle of the query pool managing the queries
+--     being reset.
+--
+-- -   @firstQuery@ is the initial query index to reset.
+--
+-- -   @queryCount@ is the number of queries to reset.
+--
+-- = Description
+--
+-- When executed on a queue, this command sets the status of query indices
+-- [@firstQuery@, @firstQuery@ + @queryCount@ - 1] to unavailable.
+--
+-- == 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@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
+foreign import ccall "vkCmdResetQueryPool" vkCmdResetQueryPool :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> IO ()
+-- | vkCmdWriteTimestamp - Write a device timestamp into a query object
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pipelineStage@ is one of the
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits', specifying a
+--     stage of the pipeline.
+--
+-- -   @queryPool@ is the query pool that will manage the timestamp.
+--
+-- -   @query@ is the query within the query pool that will contain the
+--     timestamp.
+--
+-- = Description
+--
+-- @vkCmdWriteTimestamp@ 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.
+--
+-- 'vkCmdCopyQueryPoolResults' /can/ then be called to copy the timestamp
+-- value from the query pool into buffer memory, with ordering and
+-- synchronization behavior equivalent to how other queries operate.
+-- Timestamp values /can/ also be retrieved from the query pool using
+-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'. As with other
+-- queries, the query /must/ be reset using 'vkCmdResetQueryPool' before
+-- requesting the timestamp value be written to it.
+--
+-- While @vkCmdWriteTimestamp@ /can/ be called inside or outside of a
+-- render pass instance, 'vkCmdCopyQueryPoolResults' /must/ only be called
+-- outside of a render pass instance.
+--
+-- 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 @vkCmdWriteTimestamp@ 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
+--
+-- -   @queryPool@ /must/ have been created with a @queryType@ of
+--     @VK_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 @vkCmdWriteTimestamp@ 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 @VkCommandBuffer@ handle
+--
+-- -   @pipelineStage@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' value
+--
+-- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits',
+-- 'Graphics.Vulkan.Core10.Query.VkQueryPool'
+foreign import ccall "vkCmdWriteTimestamp" vkCmdWriteTimestamp :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineStage" ::: VkPipelineStageFlagBits) -> ("queryPool" ::: VkQueryPool) -> ("query" ::: Word32) -> IO ()
+-- | vkCmdCopyQueryPoolResults - Copy the results of queries in a query pool
+-- to a buffer object
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which this command will
+--     be recorded.
+--
+-- -   @queryPool@ is the query pool managing the queries containing the
+--     desired results.
+--
+-- -   @firstQuery@ is the initial query index.
+--
+-- -   @queryCount@ is the number of queries. @firstQuery@ and @queryCount@
+--     together define a range of queries.
+--
+-- -   @dstBuffer@ is a @VkBuffer@ object that will receive the results of
+--     the copy command.
+--
+-- -   @dstOffset@ is an offset into @dstBuffer@.
+--
+-- -   @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
+--     'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'.
+--
+-- -   @flags@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Query.VkQueryResultFlagBits' specifying how
+--     and when results are returned.
+--
+-- = Description
+--
+-- @vkCmdCopyQueryPoolResults@ is guaranteed to see the effect of previous
+-- uses of @vkCmdResetQueryPool@ 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 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults', but
+-- the different style of execution causes some subtle behavioral
+-- differences. Because @vkCmdCopyQueryPoolResults@ executes in order with
+-- respect to other query commands, there is less ambiguity about which use
+-- of a query is being requested.
+--
+-- If no bits are set in @flags@, results for all requested queries in the
+-- available state are written as 32-bit unsigned integer values, and
+-- nothing is written for queries in the unavailable state.
+--
+-- If @VK_QUERY_RESULT_64_BIT@ is set, the results are written as an array
+-- of 64-bit unsigned integer values as described for
+-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults'.
+--
+-- If @VK_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 @VK_ERROR_DEVICE_LOST@ error /may/ occur.
+--
+-- Similarly, if @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@ is set and
+-- @VK_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
+-- @vkGetQueryPoolResults@, implementations /must/ guarantee that if they
+-- return a non-zero availability value, then the numerical results are
+-- valid.
+--
+-- If @VK_QUERY_RESULT_PARTIAL_BIT@ is set, @VK_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.
+--
+-- @VK_QUERY_RESULT_PARTIAL_BIT@ /must/ not be used if the pool’s
+-- @queryType@ is @VK_QUERY_TYPE_TIMESTAMP@.
+--
+-- @vkCmdCopyQueryPoolResults@ is considered to be a transfer operation,
+-- and its writes to buffer memory /must/ be synchronized using
+-- @VK_PIPELINE_STAGE_TRANSFER_BIT@ and @VK_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 @VK_QUERY_RESULT_64_BIT@ is not set in @flags@ then @dstOffset@
+--     and @stride@ /must/ be multiples of @4@
+--
+-- -   If @VK_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
+--     [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-memorylayout)
+--
+-- -   @dstBuffer@ /must/ have been created with
+--     @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ usage flag
+--
+-- -   If @dstBuffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     @VK_QUERY_TYPE_TIMESTAMP@, @flags@ /must/ not contain
+--     @VK_QUERY_RESULT_PARTIAL_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
+--
+-- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Query.VkQueryResultFlagBits' values
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
+-- 'Graphics.Vulkan.Core10.Query.VkQueryPool',
+-- 'Graphics.Vulkan.Core10.Query.VkQueryResultFlags'
+foreign import ccall "vkCmdCopyQueryPoolResults" vkCmdCopyQueryPoolResults :: ("commandBuffer" ::: VkCommandBuffer) -> ("queryPool" ::: VkQueryPool) -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("stride" ::: VkDeviceSize) -> ("flags" ::: VkQueryResultFlags) -> IO ()
+-- | vkCmdPushConstants - Update the values of push constants
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which the push constant
+--     update will be recorded.
+--
+-- -   @layout@ is the pipeline layout used to program the push constant
+--     updates.
+--
+-- -   @stageFlags@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' specifying
+--     the shader stages that will use the push constants in the updated
+--     range.
+--
+-- -   @offset@ is the start offset of the push constant range to update,
+--     in units of bytes.
+--
+-- -   @size@ is the size of the push constant range to update, in units of
+--     bytes.
+--
+-- -   @pValues@ is an array of @size@ bytes containing the new push
+--     constant values.
+--
+-- == 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
+--     'Graphics.Vulkan.Core10.PipelineLayout.VkPushConstantRange'::@stageFlags@
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @size@ /must/ be a multiple of @4@
+--
+-- -   @offset@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxPushConstantsSize@
+--
+-- -   @size@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxPushConstantsSize@ minus @offset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   @stageFlags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' values
+--
+-- -   @stageFlags@ /must/ not be @0@
+--
+-- -   @pValues@ /must/ be a valid pointer to an array of @size@ bytes
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags'
+foreign import ccall "vkCmdPushConstants" vkCmdPushConstants :: ("commandBuffer" ::: VkCommandBuffer) -> ("layout" ::: VkPipelineLayout) -> ("stageFlags" ::: VkShaderStageFlags) -> ("offset" ::: Word32) -> ("size" ::: Word32) -> ("pValues" ::: Ptr ()) -> IO ()
+-- | vkCmdBeginRenderPass - Begin a new render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to record the
+--     command.
+--
+-- -   @pRenderPassBegin@ is a pointer to a 'VkRenderPassBeginInfo'
+--     structure (defined below) which specifies the render pass to begin
+--     an instance of, and the framebuffer the instance uses.
+--
+-- -   @contents@ is a 'VkSubpassContents' value specifying how the
+--     commands in the first subpass will be provided.
+--
+-- = 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
+--     @VkAttachmentDescription@ structures or the @layout@ member of the
+--     @VkAttachmentReference@ structures specified when creating the
+--     render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL@
+--     then the corresponding attachment image subresource of the
+--     framebuffer specified in the @framebuffer@ member of
+--     @pRenderPassBegin@ /must/ have been created with
+--     @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ set
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     @VkAttachmentDescription@ structures or the @layout@ member of the
+--     @VkAttachmentReference@ structures specified when creating the
+--     render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is
+--     @VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL@,
+--     @VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL@,
+--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL@, or
+--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ then the
+--     corresponding attachment image subresource of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@
+--     set
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     @VkAttachmentDescription@ structures or the @layout@ member of the
+--     @VkAttachmentReference@ structures specified when creating the
+--     render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@
+--     then the corresponding attachment image subresource of the
+--     framebuffer specified in the @framebuffer@ member of
+--     @pRenderPassBegin@ /must/ have been created with
+--     @VK_IMAGE_USAGE_SAMPLED_BIT@ or
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ set
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     @VkAttachmentDescription@ structures or the @layout@ member of the
+--     @VkAttachmentReference@ structures specified when creating the
+--     render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ then
+--     the corresponding attachment image subresource of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ set
+--
+-- -   If any of the @initialLayout@ or @finalLayout@ member of the
+--     @VkAttachmentDescription@ structures or the @layout@ member of the
+--     @VkAttachmentReference@ structures specified when creating the
+--     render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ then
+--     the corresponding attachment image subresource of the framebuffer
+--     specified in the @framebuffer@ member of @pRenderPassBegin@ /must/
+--     have been created with @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ set
+--
+-- -   If any of the @initialLayout@ members of the
+--     @VkAttachmentDescription@ structures specified when creating the
+--     render pass specified in the @renderPass@ member of
+--     @pRenderPassBegin@ is not @VK_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
+--     'Graphics.Vulkan.Core10.Pass.VkRenderPassCreateInfo' used to create
+--     @renderPass@ /must/ be supported by the capabilities of the queue
+--     family identified by the @queueFamilyIndex@ member of the
+--     'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo' used to
+--     create the command pool which @commandBuffer@ was allocated from.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pRenderPassBegin@ /must/ be a valid pointer to a valid
+--     @VkRenderPassBeginInfo@ structure
+--
+-- -   @contents@ /must/ be a valid 'VkSubpassContents' value
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandBuffer@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Graphics                                                                                              | Graphics                                                                                                                   |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkRenderPassBeginInfo',
+-- 'VkSubpassContents'
+foreign import ccall "vkCmdBeginRenderPass" vkCmdBeginRenderPass :: ("commandBuffer" ::: VkCommandBuffer) -> ("pRenderPassBegin" ::: Ptr VkRenderPassBeginInfo) -> ("contents" ::: VkSubpassContents) -> IO ()
+-- | vkCmdNextSubpass - Transition to the next subpass of a render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to record the
+--     command.
+--
+-- -   @contents@ specifies how the commands in the next subpass will be
+--     provided, in the same fashion as the corresponding parameter of
+--     'vkCmdBeginRenderPass'.
+--
+-- = Description
+--
+-- The subpass index for a render pass begins at zero when
+-- @vkCmdBeginRenderPass@ is recorded, and increments each time
+-- @vkCmdNextSubpass@ 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. That is, they are considered to execute in
+-- the @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@ pipeline stage and
+-- their writes are synchronized with
+-- @VK_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
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @contents@ /must/ be a valid 'VkSubpassContents' value
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandBuffer@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkSubpassContents'
+foreign import ccall "vkCmdNextSubpass" vkCmdNextSubpass :: ("commandBuffer" ::: VkCommandBuffer) -> ("contents" ::: VkSubpassContents) -> IO ()
+-- | vkCmdEndRenderPass - End the current render pass
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer in which to end the current
+--     render pass instance.
+--
+-- = 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
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandBuffer@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdEndRenderPass" vkCmdEndRenderPass :: ("commandBuffer" ::: VkCommandBuffer) -> IO ()
+-- | vkCmdExecuteCommands - Execute a secondary command buffer from a primary
+-- command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is a handle to a primary command buffer that the
+--     secondary command buffers are executed in.
+--
+-- -   @commandBufferCount@ is the length of the @pCommandBuffers@ array.
+--
+-- -   @pCommandBuffers@ is an array of secondary command buffer handles,
+--     which are recorded to execute in the primary command buffer in the
+--     order they are listed in the array.
+--
+-- = Description
+--
+-- If any element of @pCommandBuffers@ was not recorded with the
+-- @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, and it was recorded
+-- into any other primary command buffer which is currently in the
+-- [executable or recording
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle),
+-- that primary command buffer becomes
+-- [invalid](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
+--
+-- == Valid Usage
+--
+-- -   @commandBuffer@ /must/ have been allocated with a @level@ of
+--     @VK_COMMAND_BUFFER_LEVEL_PRIMARY@
+--
+-- -   Each element of @pCommandBuffers@ /must/ have been allocated with a
+--     @level@ of @VK_COMMAND_BUFFER_LEVEL_SECONDARY@
+--
+-- -   Each element of @pCommandBuffers@ /must/ be in the [pending or
+--     executable
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
+--
+-- -   If any element of @pCommandBuffers@ was not recorded with the
+--     @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, and it was
+--     recorded into any other primary command buffer, that primary command
+--     buffer /must/ not be in the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   If any element of @pCommandBuffers@ was not recorded with the
+--     @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ flag, it /must/ not
+--     be in the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
+--
+-- -   If any element of @pCommandBuffers@ was not recorded with the
+--     @VK_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
+--     @VK_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
+--     @VkCommandPool@ that was created for the same queue family as the
+--     @VkCommandPool@ from which @commandBuffer@ was allocated
+--
+-- -   If @vkCmdExecuteCommands@ is being called within a render pass
+--     instance, that render pass instance /must/ have been begun with the
+--     @contents@ parameter of @vkCmdBeginRenderPass@ set to
+--     @VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS@
+--
+-- -   If @vkCmdExecuteCommands@ is being called within a render pass
+--     instance, each element of @pCommandBuffers@ /must/ have been
+--     recorded with the @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@
+--
+-- -   If @vkCmdExecuteCommands@ is being called within a render pass
+--     instance, each element of @pCommandBuffers@ /must/ have been
+--     recorded with @VkCommandBufferInheritanceInfo@::@subpass@ set to the
+--     index of the subpass which the given command buffer will be executed
+--     in
+--
+-- -   If @vkCmdExecuteCommands@ is being called within a render pass
+--     instance, the render passes specified in the
+--     pname::pBeginInfo::@pInheritanceInfo@::@renderPass@ members of the
+--     'Graphics.Vulkan.Core10.CommandBuffer.vkBeginCommandBuffer' commands
+--     used to begin recording each element of @pCommandBuffers@ /must/ be
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the current render pass.
+--
+-- -   If @vkCmdExecuteCommands@ is being called within a render pass
+--     instance, and any element of @pCommandBuffers@ was recorded with
+--     @VkCommandBufferInheritanceInfo@::@framebuffer@ not equal to
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', that
+--     @VkFramebuffer@ /must/ match the @VkFramebuffer@ used in the current
+--     render pass instance
+--
+-- -   If @vkCmdExecuteCommands@ is not being called within a render pass
+--     instance, each element of @pCommandBuffers@ /must/ not have been
+--     recorded with the @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@
+--
+-- -   If the [inherited
+--     queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-inheritedQueries)
+--     feature is not enabled, @commandBuffer@ /must/ not have any queries
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active)
+--
+-- -   If @commandBuffer@ has a @VK_QUERY_TYPE_OCCLUSION@ query
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active),
+--     then each element of @pCommandBuffers@ /must/ have been recorded
+--     with @VkCommandBufferInheritanceInfo@::@occlusionQueryEnable@ set to
+--     @VK_TRUE@
+--
+-- -   If @commandBuffer@ has a @VK_QUERY_TYPE_OCCLUSION@ query
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active),
+--     then each element of @pCommandBuffers@ /must/ have been recorded
+--     with @VkCommandBufferInheritanceInfo@::@queryFlags@ having all bits
+--     set that are set for the query
+--
+-- -   If @commandBuffer@ has a @VK_QUERY_TYPE_PIPELINE_STATISTICS@ query
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active),
+--     then each element of @pCommandBuffers@ /must/ have been recorded
+--     with @VkCommandBufferInheritanceInfo@::@pipelineStatistics@ having
+--     all bits set that are set in the @VkQueryPool@ the query uses
+--
+-- -   Each element of @pCommandBuffers@ /must/ not begin any query types
+--     that are
+--     [active](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-active)
+--     in @commandBuffer@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
+--     @commandBufferCount@ valid @VkCommandBuffer@ handles
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support transfer, graphics, or compute operations
+--
+-- -   @commandBuffer@ /must/ be a primary @VkCommandBuffer@
+--
+-- -   @commandBufferCount@ /must/ be greater than @0@
+--
+-- -   Both of @commandBuffer@, and the elements of @pCommandBuffers@
+--     /must/ have been created, allocated, or retrieved from the same
+--     @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Transfer                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdExecuteCommands" vkCmdExecuteCommands :: ("commandBuffer" ::: VkCommandBuffer) -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr VkCommandBuffer) -> IO ()
+-- | 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
+--
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D', 'vkCmdClearAttachments'
+data VkClearRect = VkClearRect
+  { -- | @rect@ is the two-dimensional region to be cleared.
+  vkRect :: VkRect2D
+  , -- | @baseArrayLayer@ is the first layer to be cleared.
+  vkBaseArrayLayer :: Word32
+  , -- | @layerCount@ is the number of layers to clear.
+  vkLayerCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkClearRect where
+  sizeOf ~_ = 24
+  alignment ~_ = 4
+  peek ptr = VkClearRect <$> peek (ptr `plusPtr` 0)
+                         <*> peek (ptr `plusPtr` 16)
+                         <*> peek (ptr `plusPtr` 20)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkRect (poked :: VkClearRect))
+                *> poke (ptr `plusPtr` 16) (vkBaseArrayLayer (poked :: VkClearRect))
+                *> poke (ptr `plusPtr` 20) (vkLayerCount (poked :: VkClearRect))
+-- | VkImageSubresourceLayers - Structure specifying a image subresource
+-- layers
+--
+-- == Valid Usage
+--
+-- -   If @aspectMask@ contains @VK_IMAGE_ASPECT_COLOR_BIT@, it /must/ not
+--     contain either of @VK_IMAGE_ASPECT_DEPTH_BIT@ or
+--     @VK_IMAGE_ASPECT_STENCIL_BIT@
+--
+-- -   @aspectMask@ /must/ not contain @VK_IMAGE_ASPECT_METADATA_BIT@
+--
+-- -   @layerCount@ /must/ be greater than 0
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @aspectMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
+--     values
+--
+-- -   @aspectMask@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'VkBufferImageCopy',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
+-- 'VkImageBlit', 'VkImageCopy', 'VkImageResolve'
+data VkImageSubresourceLayers = VkImageSubresourceLayers
+  { -- | @aspectMask@ is a combination of
+  -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits',
+  -- selecting the color, depth and\/or stencil aspects to be copied.
+  vkAspectMask :: VkImageAspectFlags
+  , -- | @mipLevel@ is the mipmap level to copy from.
+  vkMipLevel :: Word32
+  , -- | @baseArrayLayer@ and @layerCount@ are the starting layer and number of
+  -- layers to copy.
+  vkBaseArrayLayer :: Word32
+  , -- No documentation found for Nested "VkImageSubresourceLayers" "layerCount"
+  vkLayerCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageSubresourceLayers where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek ptr = VkImageSubresourceLayers <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 4)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 12)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresourceLayers))
+                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresourceLayers))
+                *> poke (ptr `plusPtr` 8) (vkBaseArrayLayer (poked :: VkImageSubresourceLayers))
+                *> poke (ptr `plusPtr` 12) (vkLayerCount (poked :: VkImageSubresourceLayers))
+-- | VkMemoryBarrier - Structure specifying a global memory barrier
+--
+-- = Description
+--
+-- The first [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access types in the [source access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks)
+-- specified by @srcAccessMask@.
+--
+-- The second [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access types in the [destination access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks)
+-- specified by @dstAccessMask@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_BARRIER@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcAccessMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
+--
+-- -   @dstAccessMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
+-- 'vkCmdWaitEvents'
+data VkMemoryBarrier = VkMemoryBarrier
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @srcAccessMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' specifying a [source
+  -- access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
+  vkSrcAccessMask :: VkAccessFlags
+  , -- | @dstAccessMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' specifying a [destination
+  -- access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
+  vkDstAccessMask :: VkAccessFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryBarrier where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryBarrier <$> peek (ptr `plusPtr` 0)
+                             <*> peek (ptr `plusPtr` 8)
+                             <*> peek (ptr `plusPtr` 16)
+                             <*> peek (ptr `plusPtr` 20)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryBarrier))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryBarrier))
+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkMemoryBarrier))
+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkMemoryBarrier))
+-- | VkBufferMemoryBarrier - Structure specifying a buffer memory barrier
+--
+-- = Description
+--
+-- The first [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access to memory through the specified buffer range, via
+-- access types in the [source access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks)
+-- specified by @srcAccessMask@. If @srcAccessMask@ includes
+-- @VK_ACCESS_HOST_WRITE_BIT@, memory writes performed by that access type
+-- are also made visible, as that access type is not performed through a
+-- resource.
+--
+-- The second [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access to memory through the specified buffer range, via
+-- access types in the [destination access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
+-- specified by @dstAccessMask@. If @dstAccessMask@ includes
+-- @VK_ACCESS_HOST_WRITE_BIT@ or @VK_ACCESS_HOST_READ_BIT@, available
+-- memory writes are also made visible to accesses of those types, as those
+-- access types are not performed through a resource.
+--
+-- If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, and
+-- @srcQueueFamilyIndex@ is equal to the current queue family, then the
+-- memory barrier defines a [queue family release
+-- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers-release)
+-- for the specified buffer range, and the second access scope includes no
+-- access, as if @dstAccessMask@ was @0@.
+--
+-- If @dstQueueFamilyIndex@ is not equal to @srcQueueFamilyIndex@, and
+-- @dstQueueFamilyIndex@ is equal to the current queue family, then the
+-- memory barrier defines a [queue family acquire
+-- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers-acquire)
+-- for the specified buffer range, and the first access scope includes no
+-- access, as if @srcAccessMask@ was @0@.
+--
+-- == Valid Usage
+--
+-- -   @offset@ /must/ be less than the size of @buffer@
+--
+-- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be greater
+--     than @0@
+--
+-- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ be less
+--     than or equal to than the size of @buffer@ minus @offset@
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     @VK_SHARING_MODE_CONCURRENT@, at least one of @srcQueueFamilyIndex@
+--     and @dstQueueFamilyIndex@ /must/ be @VK_QUEUE_FAMILY_IGNORED@
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     @VK_SHARING_MODE_CONCURRENT@, and one of @srcQueueFamilyIndex@ and
+--     @dstQueueFamilyIndex@ is @VK_QUEUE_FAMILY_IGNORED@, the other /must/
+--     be @VK_QUEUE_FAMILY_IGNORED@ or a special queue family reserved for
+--     external memory ownership transfers, as described in
+--     [{html_spec_relative}#synchronization-queue-transfers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@ and @srcQueueFamilyIndex@ is
+--     @VK_QUEUE_FAMILY_IGNORED@, @dstQueueFamilyIndex@ /must/ also be
+--     @VK_QUEUE_FAMILY_IGNORED@
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@ and @srcQueueFamilyIndex@ is not
+--     @VK_QUEUE_FAMILY_IGNORED@, it /must/ be a valid queue family or a
+--     special queue family reserved for external memory transfers, as
+--     described in
+--     [{html_spec_relative}#synchronization-queue-transfers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@ and @dstQueueFamilyIndex@ is not
+--     @VK_QUEUE_FAMILY_IGNORED@, it /must/ be a valid queue family or a
+--     special queue family reserved for external memory transfers, as
+--     described in
+--     [{html_spec_relative}#synchronization-queue-transfers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+--
+-- -   If @buffer@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@, and @srcQueueFamilyIndex@ and
+--     @dstQueueFamilyIndex@ are not @VK_QUEUE_FAMILY_IGNORED@, at least
+--     one of them /must/ be the same as the family of the queue that will
+--     execute this barrier
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcAccessMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
+--
+-- -   @dstAccessMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', @VkDeviceSize@,
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
+-- 'vkCmdWaitEvents'
+data VkBufferMemoryBarrier = VkBufferMemoryBarrier
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @srcAccessMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' specifying a [source
+  -- access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
+  vkSrcAccessMask :: VkAccessFlags
+  , -- | @dstAccessMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' specifying a [destination
+  -- access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
+  vkDstAccessMask :: VkAccessFlags
+  , -- | @srcQueueFamilyIndex@ is the source queue family for a [queue family
+  -- ownership
+  -- transfer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+  vkSrcQueueFamilyIndex :: Word32
+  , -- | @dstQueueFamilyIndex@ is the destination queue family for a [queue
+  -- family ownership
+  -- transfer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+  vkDstQueueFamilyIndex :: Word32
+  , -- | @buffer@ is a handle to the buffer whose backing memory is affected by
+  -- the barrier.
+  vkBuffer :: VkBuffer
+  , -- | @offset@ is an offset in bytes into the backing memory for @buffer@;
+  -- this is relative to the base offset as bound to the buffer (see
+  -- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindBufferMemory').
+  vkOffset :: VkDeviceSize
+  , -- | @size@ is a size in bytes of the affected area of backing memory for
+  -- @buffer@, or @VK_WHOLE_SIZE@ to use the range from @offset@ to the end
+  -- of the buffer.
+  vkSize :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBufferMemoryBarrier where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkBufferMemoryBarrier <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+                                   <*> peek (ptr `plusPtr` 20)
+                                   <*> peek (ptr `plusPtr` 24)
+                                   <*> peek (ptr `plusPtr` 28)
+                                   <*> peek (ptr `plusPtr` 32)
+                                   <*> peek (ptr `plusPtr` 40)
+                                   <*> peek (ptr `plusPtr` 48)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 24) (vkSrcQueueFamilyIndex (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 28) (vkDstQueueFamilyIndex (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 32) (vkBuffer (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferMemoryBarrier))
+                *> poke (ptr `plusPtr` 48) (vkSize (poked :: VkBufferMemoryBarrier))
+-- | VkImageMemoryBarrier - Structure specifying the parameters of an image
+-- memory barrier
+--
+-- = Description
+--
+-- The first [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access to memory through the specified image subresource
+-- range, via access types in the [source access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks)
+-- specified by @srcAccessMask@. If @srcAccessMask@ includes
+-- @VK_ACCESS_HOST_WRITE_BIT@, memory writes performed by that access type
+-- are also made visible, as that access type is not performed through a
+-- resource.
+--
+-- The second [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access to memory through the specified image subresource
+-- range, via access types in the [destination access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks)
+-- specified by @dstAccessMask@. If @dstAccessMask@ includes
+-- @VK_ACCESS_HOST_WRITE_BIT@ or @VK_ACCESS_HOST_READ_BIT@, available
+-- memory writes are also made visible to accesses of those types, as those
+-- access types are not performed through a resource.
+--
+-- If @srcQueueFamilyIndex@ is not equal to @dstQueueFamilyIndex@, and
+-- @srcQueueFamilyIndex@ is equal to the current queue family, then the
+-- memory barrier defines a [queue family release
+-- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers-release)
+-- for the specified image subresource range, and the second access scope
+-- includes no access, as if @dstAccessMask@ was @0@.
+--
+-- If @dstQueueFamilyIndex@ is not equal to @srcQueueFamilyIndex@, and
+-- @dstQueueFamilyIndex@ is equal to the current queue family, then the
+-- memory barrier defines a [queue family acquire
+-- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers-acquire)
+-- for the specified image subresource range, and the first access scope
+-- includes no access, as if @srcAccessMask@ was @0@.
+--
+-- If @oldLayout@ is not equal to @newLayout@, then the memory barrier
+-- defines an [image layout
+-- transition](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-image-layout-transitions)
+-- for the specified image subresource range.
+--
+-- Layout transitions that are performed via image memory barriers execute
+-- in their entirety in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order),
+-- relative to other image layout transitions submitted to the same queue,
+-- including those performed by [render
+-- passes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass).
+-- In effect there is an implicit execution dependency from each such
+-- layout transition to all layout transitions previously submitted to the
+-- same queue.
+--
+-- The image layout of each image subresource of a depth\/stencil image
+-- created with @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@
+-- is dependent on the last sample locations used to render to the image
+-- subresource as a depth\/stencil attachment, thus when the @image@ member
+-- of an @VkImageMemoryBarrier@ is an image created with this flag the
+-- application /can/ chain a
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT'
+-- structure to the @pNext@ chain of @VkImageMemoryBarrier@ to specify the
+-- sample locations to use during the image layout transition.
+--
+-- If the @VkSampleLocationsInfoEXT@ structure in the @pNext@ chain of
+-- @VkImageMemoryBarrier@ does not match the sample location state last
+-- used to render to the image subresource range specified by
+-- @subresourceRange@ or if no @VkSampleLocationsInfoEXT@ structure is in
+-- the @pNext@ chain of @VkImageMemoryBarrier@ then the contents of the
+-- given image subresource range becomes undefined as if @oldLayout@ would
+-- equal @VK_IMAGE_LAYOUT_UNDEFINED@.
+--
+-- If @image@ has a multi-planar format and the image is /disjoint/, then
+-- including @VK_IMAGE_ASPECT_COLOR_BIT@ in the @aspectMask@ member of
+-- @subresourceRange@ is equivalent to including
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, and (for
+-- three-plane formats only) @VK_IMAGE_ASPECT_PLANE_2_BIT@.
+--
+-- == Valid Usage
+--
+-- -   @oldLayout@ /must/ be @VK_IMAGE_LAYOUT_UNDEFINED@ or the current
+--     layout of the image subresources affected by the barrier
+--
+-- -   @newLayout@ /must/ not be @VK_IMAGE_LAYOUT_UNDEFINED@ or
+--     @VK_IMAGE_LAYOUT_PREINITIALIZED@
+--
+-- -   If @image@ was created with a sharing mode of
+--     @VK_SHARING_MODE_CONCURRENT@, at least one of @srcQueueFamilyIndex@
+--     and @dstQueueFamilyIndex@ /must/ be @VK_QUEUE_FAMILY_IGNORED@
+--
+-- -   If @image@ was created with a sharing mode of
+--     @VK_SHARING_MODE_CONCURRENT@, and one of @srcQueueFamilyIndex@ and
+--     @dstQueueFamilyIndex@ is @VK_QUEUE_FAMILY_IGNORED@, the other /must/
+--     be @VK_QUEUE_FAMILY_IGNORED@ or a special queue family reserved for
+--     external memory transfers, as described in
+--     [{html_spec_relative}#synchronization-queue-transfers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+--
+-- -   If @image@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@ and @srcQueueFamilyIndex@ is
+--     @VK_QUEUE_FAMILY_IGNORED@, @dstQueueFamilyIndex@ /must/ also be
+--     @VK_QUEUE_FAMILY_IGNORED@.
+--
+-- -   If @image@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@ and @srcQueueFamilyIndex@ is not
+--     @VK_QUEUE_FAMILY_IGNORED@, it /must/ be a valid queue family or a
+--     special queue family reserved for external memory transfers, as
+--     described in
+--     [{html_spec_relative}#synchronization-queue-transfers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+--
+-- -   If @image@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@ and @dstQueueFamilyIndex@ is not
+--     @VK_QUEUE_FAMILY_IGNORED@, it /must/ be a valid queue family or a
+--     special queue family reserved for external memory transfers, as
+--     described in
+--     [{html_spec_relative}#synchronization-queue-transfers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+--
+-- -   If @image@ was created with a sharing mode of
+--     @VK_SHARING_MODE_EXCLUSIVE@, and @srcQueueFamilyIndex@ and
+--     @dstQueueFamilyIndex@ are not @VK_QUEUE_FAMILY_IGNORED@, at least
+--     one of them /must/ be the same as the family of the queue that will
+--     execute this barrier
+--
+-- -   @subresourceRange.baseMipLevel@ /must/ be less than the @mipLevels@
+--     specified in 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when
+--     @image@ was created
+--
+-- -   If @subresourceRange.levelCount@ is not @VK_REMAINING_MIP_LEVELS@,
+--     @subresourceRange.baseMipLevel@ + @subresourceRange.levelCount@
+--     /must/ be less than or equal to the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   @subresourceRange.baseArrayLayer@ /must/ be less than the
+--     @arrayLayers@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   If @subresourceRange.layerCount@ is not @VK_REMAINING_ARRAY_LAYERS@,
+--     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
+--     /must/ be less than or equal to the @arrayLayers@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   If @image@ has a depth\/stencil format with both depth and stencil
+--     components, then the @aspectMask@ member of @subresourceRange@
+--     /must/ include both @VK_IMAGE_ASPECT_DEPTH_BIT@ and
+--     @VK_IMAGE_ASPECT_STENCIL_BIT@
+--
+-- -   If @image@ has a single-plane color format or is not /disjoint/,
+--     then the @aspectMask@ member of @subresourceRange@ /must/ be
+--     @VK_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 @VK_IMAGE_ASPECT_PLANE_0_BIT@,
+--     @VK_IMAGE_ASPECT_PLANE_1_BIT@, and @VK_IMAGE_ASPECT_PLANE_2_BIT@; or
+--     /must/ include @VK_IMAGE_ASPECT_COLOR_BIT@
+--
+-- -   If @image@ has a multi-planar format with only two planes, then the
+--     @aspectMask@ member of @subresourceRange@ /must/ not include
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL@ then @image@ /must/ have
+--     been created with @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL@ then @image@
+--     /must/ have been created with
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ then @image@
+--     /must/ have been created with
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL@ then
+--     @image@ /must/ have been created with
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL@ then
+--     @image@ /must/ have been created with
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@ then @image@ /must/ have
+--     been created with @VK_IMAGE_USAGE_SAMPLED_BIT@ or
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ then @image@ /must/ have been
+--     created with @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ set
+--
+-- -   If either @oldLayout@ or @newLayout@ is
+--     @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ then @image@ /must/ have been
+--     created with @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT'
+--
+-- -   @srcAccessMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
+--
+-- -   @dstAccessMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' values
+--
+-- -   @oldLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @newLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @subresourceRange@ /must/ be a valid @VkImageSubresourceRange@
+--     structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Pass.VkAccessFlags',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdPipelineBarrier',
+-- 'vkCmdWaitEvents'
+data VkImageMemoryBarrier = VkImageMemoryBarrier
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @srcAccessMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' specifying a [source
+  -- access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
+  vkSrcAccessMask :: VkAccessFlags
+  , -- | @dstAccessMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Pass.VkAccessFlagBits' specifying a [destination
+  -- access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
+  vkDstAccessMask :: VkAccessFlags
+  , -- | @oldLayout@ is the old layout in an [image layout
+  -- transition](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-image-layout-transitions).
+  vkOldLayout :: VkImageLayout
+  , -- | @newLayout@ is the new layout in an [image layout
+  -- transition](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-image-layout-transitions).
+  vkNewLayout :: VkImageLayout
+  , -- | @srcQueueFamilyIndex@ is the source queue family for a [queue family
+  -- ownership
+  -- transfer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+  vkSrcQueueFamilyIndex :: Word32
+  , -- | @dstQueueFamilyIndex@ is the destination queue family for a [queue
+  -- family ownership
+  -- transfer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-queue-transfers).
+  vkDstQueueFamilyIndex :: Word32
+  , -- | @image@ is a handle to the image affected by this barrier.
+  vkImage :: VkImage
+  , -- | @subresourceRange@ describes the [image subresource
+  -- range](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views)
+  -- within @image@ that is affected by this barrier.
+  vkSubresourceRange :: VkImageSubresourceRange
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageMemoryBarrier where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkImageMemoryBarrier <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> peek (ptr `plusPtr` 20)
+                                  <*> peek (ptr `plusPtr` 24)
+                                  <*> peek (ptr `plusPtr` 28)
+                                  <*> peek (ptr `plusPtr` 32)
+                                  <*> peek (ptr `plusPtr` 36)
+                                  <*> peek (ptr `plusPtr` 40)
+                                  <*> peek (ptr `plusPtr` 48)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 24) (vkOldLayout (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 28) (vkNewLayout (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 32) (vkSrcQueueFamilyIndex (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 36) (vkDstQueueFamilyIndex (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 40) (vkImage (poked :: VkImageMemoryBarrier))
+                *> poke (ptr `plusPtr` 48) (vkSubresourceRange (poked :: VkImageMemoryBarrier))
+-- | VkBufferCopy - Structure specifying a buffer copy operation
+--
+-- = See Also
+--
+-- @VkDeviceSize@, 'vkCmdCopyBuffer'
+data VkBufferCopy = VkBufferCopy
+  { -- | @srcOffset@ is the starting offset in bytes from the start of
+  -- @srcBuffer@.
+  vkSrcOffset :: VkDeviceSize
+  , -- | @dstOffset@ is the starting offset in bytes from the start of
+  -- @dstBuffer@.
+  vkDstOffset :: VkDeviceSize
+  , -- | @size@ is the number of bytes to copy.
+  vkSize :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBufferCopy where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkBufferCopy <$> peek (ptr `plusPtr` 0)
+                          <*> peek (ptr `plusPtr` 8)
+                          <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcOffset (poked :: VkBufferCopy))
+                *> poke (ptr `plusPtr` 8) (vkDstOffset (poked :: VkBufferCopy))
+                *> poke (ptr `plusPtr` 16) (vkSize (poked :: VkBufferCopy))
+-- | VkImageCopy - Structure specifying an image copy operation
+--
+-- = Description
+--
+-- For @VK_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 @VK_IMAGE_TYPE_3D@ and the other image is
+-- @VK_IMAGE_TYPE_2D@ with multiple layers, then each slice is copied to or
+-- from a different layer.
+--
+-- Copies involving a [multi-planar image
+-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+-- 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
+--
+-- -   If neither the calling command’s @srcImage@ nor the calling
+--     command’s @dstImage@ has a [multi-planar image
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     then the @aspectMask@ member of @srcSubresource@ and
+--     @dstSubresource@ /must/ match
+--
+-- -   If the calling command’s @srcImage@ has a
+--     'Graphics.Vulkan.Core10.Core.VkFormat' with [two
+--     planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     then the @srcSubresource@ @aspectMask@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@ or @VK_IMAGE_ASPECT_PLANE_1_BIT@
+--
+-- -   If the calling command’s @srcImage@ has a
+--     'Graphics.Vulkan.Core10.Core.VkFormat' with [three
+--     planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     then the @srcSubresource@ @aspectMask@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--
+-- -   If the calling command’s @dstImage@ has a
+--     'Graphics.Vulkan.Core10.Core.VkFormat' with [two
+--     planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     then the @dstSubresource@ @aspectMask@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@ or @VK_IMAGE_ASPECT_PLANE_1_BIT@
+--
+-- -   If the calling command’s @dstImage@ has a
+--     'Graphics.Vulkan.Core10.Core.VkFormat' with [three
+--     planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     then the @dstSubresource@ @aspectMask@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--
+-- -   If the calling command’s @srcImage@ has a [multi-planar image
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     and the @dstImage@ does not have a multi-planar image format, the
+--     @dstSubresource@ @aspectMask@ /must/ be @VK_IMAGE_ASPECT_COLOR_BIT@
+--
+-- -   If the calling command’s @dstImage@ has a [multi-planar image
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     and the @srcImage@ does not have a multi-planar image format, the
+--     @srcSubresource@ @aspectMask@ /must/ be @VK_IMAGE_ASPECT_COLOR_BIT@
+--
+-- -   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)
+--
+-- -   If either of the calling command’s @srcImage@ or @dstImage@
+--     parameters are of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
+--     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
+--     the corresponding subresource /must/ be @0@ and @1@, respectively
+--
+-- -   The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
+--     present in the calling command’s @srcImage@
+--
+-- -   The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
+--     present in the calling command’s @dstImage@
+--
+-- -   @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource width
+--
+-- -   @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource height
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @srcOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
+--
+-- -   @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource depth
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @srcOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@.
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @dstOffset.z@ /must/ be @0@ and @extent.depth@ /must/ be @1@.
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_2D@,
+--     then @srcOffset.z@ /must/ be @0@.
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_2D@,
+--     then @dstOffset.z@ /must/ be @0@.
+--
+-- -   If both @srcImage@ and @dstImage@ are of type @VK_IMAGE_TYPE_2D@
+--     then then @extent.depth@ /must/ be @1@.
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_2D@,
+--     and the @dstImage@ is of type @VK_IMAGE_TYPE_3D@, then
+--     @extent.depth@ /must/ equal to the @layerCount@ member of
+--     @srcSubresource@.
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_2D@,
+--     and the @srcImage@ is of type @VK_IMAGE_TYPE_3D@, then
+--     @extent.depth@ /must/ equal to the @layerCount@ member of
+--     @dstSubresource@.
+--
+-- -   @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource width
+--
+-- -   @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource height
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @dstOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
+--
+-- -   @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource depth
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, all members of @srcOffset@
+--     /must/ be a multiple of the corresponding dimensions of the
+--     compressed texel block
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, @extent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@extent.width@ +
+--     @srcOffset.x@) /must/ equal the source image subresource width
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, @extent.height@ /must/ be a
+--     multiple of the compressed texel block height or (@extent.height@ +
+--     @srcOffset.y@) /must/ equal the source image subresource height
+--
+-- -   If the calling command’s @srcImage@ is a compressed image, or a
+--     /single-plane/, “@_422@” image format, @extent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@extent.depth@ +
+--     @srcOffset.z@) /must/ equal the source image subresource depth
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, all members of @dstOffset@
+--     /must/ be a multiple of the corresponding dimensions of the
+--     compressed texel block
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, @extent.width@ /must/ be a
+--     multiple of the compressed texel block width or (@extent.width@ +
+--     @dstOffset.x@) /must/ equal the destination image subresource width
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, @extent.height@ /must/ be a
+--     multiple of the compressed texel block height or (@extent.height@ +
+--     @dstOffset.y@) /must/ equal the destination image subresource height
+--
+-- -   If the calling command’s @dstImage@ is a compressed format image, or
+--     a /single-plane/, “@_422@” image format, @extent.depth@ /must/ be a
+--     multiple of the compressed texel block depth or (@extent.depth@ +
+--     @dstOffset.z@) /must/ equal the destination image subresource depth
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
+--     structure
+--
+-- -   @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
+--     structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
+-- 'VkImageSubresourceLayers',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
+-- 'vkCmdCopyImage'
+data VkImageCopy = VkImageCopy
+  { -- | @srcSubresource@ and @dstSubresource@ are 'VkImageSubresourceLayers'
+  -- structures specifying the image subresources of the images used for the
+  -- source and destination image data, respectively.
+  vkSrcSubresource :: VkImageSubresourceLayers
+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
+  -- in texels of the sub-regions of the source and destination image data.
+  vkSrcOffset :: VkOffset3D
+  , -- No documentation found for Nested "VkImageCopy" "dstSubresource"
+  vkDstSubresource :: VkImageSubresourceLayers
+  , -- No documentation found for Nested "VkImageCopy" "dstOffset"
+  vkDstOffset :: VkOffset3D
+  , -- | @extent@ is the size in texels of the image to copy in @width@, @height@
+  -- and @depth@.
+  vkExtent :: VkExtent3D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageCopy where
+  sizeOf ~_ = 68
+  alignment ~_ = 4
+  peek ptr = VkImageCopy <$> peek (ptr `plusPtr` 0)
+                         <*> peek (ptr `plusPtr` 16)
+                         <*> peek (ptr `plusPtr` 28)
+                         <*> peek (ptr `plusPtr` 44)
+                         <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageCopy))
+                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageCopy))
+                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageCopy))
+                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageCopy))
+                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageCopy))
+-- | 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
+--
+-- -   If either of the calling command’s @srcImage@ or @dstImage@
+--     parameters are of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
+--     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
+--     both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
+--     respectively
+--
+-- -   The @aspectMask@ member of @srcSubresource@ /must/ specify aspects
+--     present in the calling command’s @srcImage@
+--
+-- -   The @aspectMask@ member of @dstSubresource@ /must/ specify aspects
+--     present in the calling command’s @dstImage@
+--
+-- -   @srcOffset@[0].@x@ and @srcOffset@[1].@x@ /must/ both be greater
+--     than or equal to @0@ and less than or equal to the source image
+--     subresource width
+--
+-- -   @srcOffset@[0].@y@ and @srcOffset@[1].@y@ /must/ both be greater
+--     than or equal to @0@ and less than or equal to the source image
+--     subresource height
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @srcOffset@[0].y /must/ be @0@ and @srcOffset@[1].y /must/ be
+--     @1@.
+--
+-- -   @srcOffset@[0].@z@ and @srcOffset@[1].@z@ /must/ both be greater
+--     than or equal to @0@ and less than or equal to the source image
+--     subresource depth
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@ or
+--     @VK_IMAGE_TYPE_2D@, then @srcOffset@[0].z /must/ be @0@ and
+--     @srcOffset@[1].z /must/ be @1@.
+--
+-- -   @dstOffset@[0].@x@ and @dstOffset@[1].@x@ /must/ both be greater
+--     than or equal to @0@ and less than or equal to the destination image
+--     subresource width
+--
+-- -   @dstOffset@[0].@y@ and @dstOffset@[1].@y@ /must/ both be greater
+--     than or equal to @0@ and less than or equal to the destination image
+--     subresource height
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @dstOffset@[0].y /must/ be @0@ and @dstOffset@[1].y /must/ be
+--     @1@.
+--
+-- -   @dstOffset@[0].@z@ and @dstOffset@[1].@z@ /must/ both be greater
+--     than or equal to @0@ and less than or equal to the destination image
+--     subresource depth
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@ or
+--     @VK_IMAGE_TYPE_2D@, then @dstOffset@[0].z /must/ be @0@ and
+--     @dstOffset@[1].z /must/ be @1@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
+--     structure
+--
+-- -   @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
+--     structure
+--
+-- = See Also
+--
+-- 'VkImageSubresourceLayers',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
+-- 'vkCmdBlitImage'
+data VkImageBlit = VkImageBlit
+  { -- | @srcSubresource@ is the subresource to blit from.
+  vkSrcSubresource :: VkImageSubresourceLayers
+  , -- | @srcOffsets@ is an array of two
+  -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D'
+  -- structures specifying the bounds of the source region within
+  -- @srcSubresource@.
+  vkSrcOffsets :: Vector 2 VkOffset3D
+  , -- | @dstSubresource@ is the subresource to blit into.
+  vkDstSubresource :: VkImageSubresourceLayers
+  , -- | @dstOffsets@ is an array of two
+  -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D'
+  -- structures specifying the bounds of the destination region within
+  -- @dstSubresource@.
+  vkDstOffsets :: Vector 2 VkOffset3D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageBlit where
+  sizeOf ~_ = 80
+  alignment ~_ = 4
+  peek ptr = VkImageBlit <$> peek (ptr `plusPtr` 0)
+                         <*> peek (ptr `plusPtr` 16)
+                         <*> peek (ptr `plusPtr` 40)
+                         <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageBlit))
+                *> poke (ptr `plusPtr` 16) (vkSrcOffsets (poked :: VkImageBlit))
+                *> poke (ptr `plusPtr` 40) (vkDstSubresource (poked :: VkImageBlit))
+                *> poke (ptr `plusPtr` 56) (vkDstOffsets (poked :: VkImageBlit))
+-- | 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 @VK_FORMAT_S8_UINT@ value per
+--     texel.
+--
+-- -   data copied to or from the depth aspect of a @VK_FORMAT_D16_UNORM@
+--     or @VK_FORMAT_D16_UNORM_S8_UINT@ format is tightly packed with one
+--     @VK_FORMAT_D16_UNORM@ value per texel.
+--
+-- -   data copied to or from the depth aspect of a @VK_FORMAT_D32_SFLOAT@
+--     or @VK_FORMAT_D32_SFLOAT_S8_UINT@ format is tightly packed with one
+--     @VK_FORMAT_D32_SFLOAT@ value per texel.
+--
+-- -   data copied to or from the depth aspect of a
+--     @VK_FORMAT_X8_D24_UNORM_PACK32@ or @VK_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, the
+-- data in buffer memory /must/ be in the the range [0,1] or undefined
+-- results occur.
+--
+-- 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.
+--
+-- == Valid Usage
+--
+-- -   If the calling command’s @VkImage@ parameter’s format is not a
+--     depth\/stencil format or a [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     then @bufferOffset@ /must/ be a multiple of the format’s element
+--     size
+--
+-- -   If the calling command’s @VkImage@ parameter’s format is a
+--     [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     then @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
+--     [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+--
+-- -   @bufferOffset@ /must/ be a multiple of @4@
+--
+-- -   @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@
+--
+-- -   @imageOffset.x@ and (@imageExtent.width@ + @imageOffset.x@) /must/
+--     both be greater than or equal to @0@ and less than or equal to the
+--     image subresource width where this refers to the width of the
+--     /plane/ of the image involved in the copy in the case of a
+--     [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--
+-- -   @imageOffset.y@ and (imageExtent.height + @imageOffset.y@) /must/
+--     both be greater than or equal to @0@ and less than or equal to the
+--     image subresource height where this refers to the height of the
+--     /plane/ of the image involved in the copy in the case of a
+--     [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--
+-- -   If the calling command’s @srcImage@ ('vkCmdCopyImageToBuffer') or
+--     @dstImage@ ('vkCmdCopyBufferToImage') is of type @VK_IMAGE_TYPE_1D@,
+--     then @imageOffset.y@ /must/ be @0@ and @imageExtent.height@ /must/
+--     be @1@.
+--
+-- -   @imageOffset.z@ and (imageExtent.depth + @imageOffset.z@) /must/
+--     both be greater than or equal to @0@ and less than or equal to the
+--     image subresource depth
+--
+-- -   If the calling command’s @srcImage@ ('vkCmdCopyImageToBuffer') or
+--     @dstImage@ ('vkCmdCopyBufferToImage') is of type @VK_IMAGE_TYPE_1D@
+--     or @VK_IMAGE_TYPE_2D@, then @imageOffset.z@ /must/ be @0@ and
+--     @imageExtent.depth@ /must/ be @1@
+--
+-- -   If the calling command’s @VkImage@ parameter is a compressed image,
+--     or a /single-plane/, “@_422@” image format, @bufferRowLength@ /must/
+--     be a multiple of the compressed texel block width
+--
+-- -   If the calling command’s @VkImage@ parameter is a compressed image,
+--     or a /single-plane/, “@_422@” image format, @bufferImageHeight@
+--     /must/ be a multiple of the compressed texel block height
+--
+-- -   If the calling command’s @VkImage@ parameter is a compressed image,
+--     or a /single-plane/, “@_422@” image format, all members of
+--     @imageOffset@ /must/ be a multiple of the corresponding dimensions
+--     of the compressed texel block
+--
+-- -   If the calling command’s @VkImage@ parameter is a compressed image,
+--     or a /single-plane/, “@_422@” image format, @bufferOffset@ /must/ be
+--     a multiple of the compressed texel block size in bytes
+--
+-- -   If the calling command’s @VkImage@ parameter is a compressed image,
+--     or a /single-plane/, “@_422@” image format, @imageExtent.width@
+--     /must/ be a multiple of the compressed texel block width or
+--     (@imageExtent.width@ + @imageOffset.x@) /must/ equal the image
+--     subresource width
+--
+-- -   If the calling command’s @VkImage@ parameter is a compressed image,
+--     or a /single-plane/, “@_422@” image format, @imageExtent.height@
+--     /must/ be a multiple of the compressed texel block height or
+--     (@imageExtent.height@ + @imageOffset.y@) /must/ equal the image
+--     subresource height
+--
+-- -   If the calling command’s @VkImage@ parameter is a compressed image,
+--     or a /single-plane/, “@_422@” image format, @imageExtent.depth@
+--     /must/ be a multiple of the compressed texel block depth or
+--     (@imageExtent.depth@ + @imageOffset.z@) /must/ equal the image
+--     subresource depth
+--
+-- -   The @aspectMask@ member of @imageSubresource@ /must/ specify aspects
+--     present in the calling command’s @VkImage@ parameter
+--
+-- -   If the calling command’s @VkImage@ parameter’s format is a
+--     [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     then the @aspectMask@ member of @imageSubresource@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@ (with @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--     valid only for image formats with three planes)
+--
+-- -   The @aspectMask@ member of @imageSubresource@ /must/ only have a
+--     single bit set
+--
+-- -   If the calling command’s @VkImage@ parameter is of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
+--     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
+--     @imageSubresource@ /must/ be @0@ and @1@, respectively
+--
+-- -   When copying to the depth aspect of an image subresource, the data
+--     in the source buffer /must/ be in the range [0,1]
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @imageSubresource@ /must/ be a valid @VkImageSubresourceLayers@
+--     structure
+--
+-- = See Also
+--
+-- @VkDeviceSize@,
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
+-- 'VkImageSubresourceLayers',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
+-- 'vkCmdCopyBufferToImage', 'vkCmdCopyImageToBuffer'
+data VkBufferImageCopy = VkBufferImageCopy
+  { -- | @bufferOffset@ is the offset in bytes from the start of the buffer
+  -- object where the image data is copied from or to.
+  vkBufferOffset :: VkDeviceSize
+  , -- | @bufferRowLength@ and @bufferImageHeight@ specify the data in buffer
+  -- memory as a subregion of a larger two- or three-dimensional image, and
+  -- control the addressing calculations of data in buffer memory. If either
+  -- of these values is zero, that aspect of the buffer memory is considered
+  -- to be tightly packed according to the @imageExtent@.
+  vkBufferRowLength :: Word32
+  , -- No documentation found for Nested "VkBufferImageCopy" "bufferImageHeight"
+  vkBufferImageHeight :: Word32
+  , -- | @imageSubresource@ is a 'VkImageSubresourceLayers' used to specify the
+  -- specific image subresources of the image used for the source or
+  -- destination image data.
+  vkImageSubresource :: VkImageSubresourceLayers
+  , -- | @imageOffset@ selects the initial @x@, @y@, @z@ offsets in texels of the
+  -- sub-region of the source or destination image data.
+  vkImageOffset :: VkOffset3D
+  , -- | @imageExtent@ is the size in texels of the image to copy in @width@,
+  -- @height@ and @depth@.
+  vkImageExtent :: VkExtent3D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBufferImageCopy where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkBufferImageCopy <$> peek (ptr `plusPtr` 0)
+                               <*> peek (ptr `plusPtr` 8)
+                               <*> peek (ptr `plusPtr` 12)
+                               <*> peek (ptr `plusPtr` 16)
+                               <*> peek (ptr `plusPtr` 32)
+                               <*> peek (ptr `plusPtr` 44)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBufferOffset (poked :: VkBufferImageCopy))
+                *> poke (ptr `plusPtr` 8) (vkBufferRowLength (poked :: VkBufferImageCopy))
+                *> poke (ptr `plusPtr` 12) (vkBufferImageHeight (poked :: VkBufferImageCopy))
+                *> poke (ptr `plusPtr` 16) (vkImageSubresource (poked :: VkBufferImageCopy))
+                *> poke (ptr `plusPtr` 32) (vkImageOffset (poked :: VkBufferImageCopy))
+                *> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkBufferImageCopy))
+-- | VkImageResolve - Structure specifying an image resolve operation
+--
+-- == Valid Usage
+--
+-- -   The @aspectMask@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ only contain @VK_IMAGE_ASPECT_COLOR_BIT@
+--
+-- -   The @layerCount@ member of @srcSubresource@ and @dstSubresource@
+--     /must/ match
+--
+-- -   If either of the calling command’s @srcImage@ or @dstImage@
+--     parameters are of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
+--     @VK_IMAGE_TYPE_3D@, the @baseArrayLayer@ and @layerCount@ members of
+--     both @srcSubresource@ and @dstSubresource@ /must/ be @0@ and @1@,
+--     respectively
+--
+-- -   @srcOffset.x@ and (@extent.width@ + @srcOffset.x@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource width
+--
+-- -   @srcOffset.y@ and (@extent.height@ + @srcOffset.y@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource height
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @srcOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
+--
+-- -   @srcOffset.z@ and (@extent.depth@ + @srcOffset.z@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the source
+--     image subresource depth
+--
+-- -   If the calling command’s @srcImage@ is of type @VK_IMAGE_TYPE_1D@ or
+--     @VK_IMAGE_TYPE_2D@, then @srcOffset.z@ /must/ be @0@ and
+--     @extent.depth@ /must/ be @1@.
+--
+-- -   @dstOffset.x@ and (@extent.width@ + @dstOffset.x@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource width
+--
+-- -   @dstOffset.y@ and (@extent.height@ + @dstOffset.y@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource height
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@,
+--     then @dstOffset.y@ /must/ be @0@ and @extent.height@ /must/ be @1@.
+--
+-- -   @dstOffset.z@ and (@extent.depth@ + @dstOffset.z@) /must/ both be
+--     greater than or equal to @0@ and less than or equal to the
+--     destination image subresource depth
+--
+-- -   If the calling command’s @dstImage@ is of type @VK_IMAGE_TYPE_1D@ or
+--     @VK_IMAGE_TYPE_2D@, then @dstOffset.z@ /must/ be @0@ and
+--     @extent.depth@ /must/ be @1@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcSubresource@ /must/ be a valid @VkImageSubresourceLayers@
+--     structure
+--
+-- -   @dstSubresource@ /must/ be a valid @VkImageSubresourceLayers@
+--     structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
+-- 'VkImageSubresourceLayers',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D',
+-- 'vkCmdResolveImage'
+data VkImageResolve = VkImageResolve
+  { -- | @srcSubresource@ and @dstSubresource@ are 'VkImageSubresourceLayers'
+  -- 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.
+  vkSrcSubresource :: VkImageSubresourceLayers
+  , -- | @srcOffset@ and @dstOffset@ select the initial @x@, @y@, and @z@ offsets
+  -- in texels of the sub-regions of the source and destination image data.
+  vkSrcOffset :: VkOffset3D
+  , -- No documentation found for Nested "VkImageResolve" "dstSubresource"
+  vkDstSubresource :: VkImageSubresourceLayers
+  , -- No documentation found for Nested "VkImageResolve" "dstOffset"
+  vkDstOffset :: VkOffset3D
+  , -- | @extent@ is the size in texels of the source image to resolve in
+  -- @width@, @height@ and @depth@.
+  vkExtent :: VkExtent3D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageResolve where
+  sizeOf ~_ = 68
+  alignment ~_ = 4
+  peek ptr = VkImageResolve <$> peek (ptr `plusPtr` 0)
+                            <*> peek (ptr `plusPtr` 16)
+                            <*> peek (ptr `plusPtr` 28)
+                            <*> peek (ptr `plusPtr` 44)
+                            <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSrcSubresource (poked :: VkImageResolve))
+                *> poke (ptr `plusPtr` 16) (vkSrcOffset (poked :: VkImageResolve))
+                *> poke (ptr `plusPtr` 28) (vkDstSubresource (poked :: VkImageResolve))
+                *> poke (ptr `plusPtr` 44) (vkDstOffset (poked :: VkImageResolve))
+                *> poke (ptr `plusPtr` 56) (vkExtent (poked :: VkImageResolve))
+-- | 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, otherwise the pixels outside of the render area become undefined
+-- and shader side effects /may/ occur for fragments outside the render
+-- area. The render area /must/ be contained within 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
+--     @VK_ATTACHMENT_LOAD_OP_CLEAR@
+--
+-- -   If @clearValueCount@ is not @0@, @pClearValues@ /must/ be a valid
+--     pointer to an array of @clearValueCount@ valid @VkClearValue@ unions
+--
+-- -   @renderPass@ /must/ be
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the @renderPass@ member of the @VkFramebufferCreateInfo@
+--     structure specified when creating @framebuffer@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_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
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupRenderPassBeginInfo'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkRenderPassSampleLocationsBeginInfoEXT'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @renderPass@ /must/ be a valid @VkRenderPass@ handle
+--
+-- -   @framebuffer@ /must/ be a valid @VkFramebuffer@ handle
+--
+-- -   Both of @framebuffer@, and @renderPass@ /must/ have been created,
+--     allocated, or retrieved from the same @VkDevice@
+--
+-- = See Also
+--
+-- 'VkClearValue', 'Graphics.Vulkan.Core10.Pass.VkFramebuffer',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCmdBeginRenderPass'
+data VkRenderPassBeginInfo = VkRenderPassBeginInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @renderPass@ is the render pass to begin an instance of.
+  vkRenderPass :: VkRenderPass
+  , -- | @framebuffer@ is the framebuffer containing the attachments that are
+  -- used with the render pass.
+  vkFramebuffer :: VkFramebuffer
+  , -- | @renderArea@ is the render area that is affected by the render pass
+  -- instance, and is described in more detail below.
+  vkRenderArea :: VkRect2D
+  , -- | @clearValueCount@ is the number of elements in @pClearValues@.
+  vkClearValueCount :: Word32
+  , -- | @pClearValues@ is an array of 'VkClearValue' structures that contains
+  -- clear values for each attachment, if the attachment uses a @loadOp@
+  -- value of @VK_ATTACHMENT_LOAD_OP_CLEAR@ or if the attachment has a
+  -- depth\/stencil format and uses a @stencilLoadOp@ value of
+  -- @VK_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.
+  vkPClearValues :: Ptr VkClearValue
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRenderPassBeginInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkRenderPassBeginInfo <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+                                   <*> peek (ptr `plusPtr` 24)
+                                   <*> peek (ptr `plusPtr` 32)
+                                   <*> peek (ptr `plusPtr` 48)
+                                   <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 24) (vkFramebuffer (poked :: VkRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 32) (vkRenderArea (poked :: VkRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 48) (vkClearValueCount (poked :: VkRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 56) (vkPClearValues (poked :: VkRenderPassBeginInfo))
+-- | VkClearDepthStencilValue - Structure specifying a clear depth stencil
+-- value
+--
+-- == Valid Usage
+--
+-- -   Unless the @{html_spec_relative}#VK_EXT_depth_range_unrestricted@
+--     extension is enabled @depth@ /must/ be between @0.0@ and @1.0@,
+--     inclusive
+--
+-- = See Also
+--
+-- 'VkClearValue', 'vkCmdClearDepthStencilImage'
+data VkClearDepthStencilValue = VkClearDepthStencilValue
+  { -- | @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.
+  vkDepth :: CFloat
+  , -- | @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.
+  vkStencil :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkClearDepthStencilValue where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkClearDepthStencilValue <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkDepth (poked :: VkClearDepthStencilValue))
+                *> poke (ptr `plusPtr` 4) (vkStencil (poked :: VkClearDepthStencilValue))
+-- | VkClearAttachment - Structure specifying a clear attachment
+--
+-- = Description
+--
+-- No memory barriers are needed between @vkCmdClearAttachments@ and
+-- preceding or subsequent draw or attachment clear commands in the same
+-- subpass.
+--
+-- The @vkCmdClearAttachments@ 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
+-- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription' to
+-- @VK_ATTACHMENT_LOAD_OP_CLEAR@, as described for
+-- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass'.
+--
+-- == Valid Usage
+--
+-- -   If @aspectMask@ includes @VK_IMAGE_ASPECT_COLOR_BIT@, it /must/ not
+--     include @VK_IMAGE_ASPECT_DEPTH_BIT@ or @VK_IMAGE_ASPECT_STENCIL_BIT@
+--
+-- -   @aspectMask@ /must/ not include @VK_IMAGE_ASPECT_METADATA_BIT@
+--
+-- -   @clearValue@ /must/ be a valid @VkClearValue@ union
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @aspectMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
+--     values
+--
+-- -   @aspectMask@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'VkClearValue',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
+-- 'vkCmdClearAttachments'
+data VkClearAttachment = VkClearAttachment
+  { -- | @aspectMask@ is a mask selecting the color, depth and\/or stencil
+  -- aspects of the attachment to be cleared. @aspectMask@ /can/ include
+  -- @VK_IMAGE_ASPECT_COLOR_BIT@ for color attachments,
+  -- @VK_IMAGE_ASPECT_DEPTH_BIT@ for depth\/stencil attachments with a depth
+  -- component, and @VK_IMAGE_ASPECT_STENCIL_BIT@ for depth\/stencil
+  -- attachments with a stencil component. If the subpass’s depth\/stencil
+  -- attachment is @VK_ATTACHMENT_UNUSED@, then the clear has no effect.
+  vkAspectMask :: VkImageAspectFlags
+  , -- | @colorAttachment@ is only meaningful if @VK_IMAGE_ASPECT_COLOR_BIT@ is
+  -- set in @aspectMask@, in which case it is an index to the
+  -- @pColorAttachments@ array in the
+  -- 'Graphics.Vulkan.Core10.Pass.VkSubpassDescription' structure of the
+  -- current subpass which selects the color attachment to clear. If
+  -- @colorAttachment@ is @VK_ATTACHMENT_UNUSED@ then the clear has no
+  -- effect.
+  vkColorAttachment :: Word32
+  , -- | @clearValue@ is the color or depth\/stencil value to clear the
+  -- attachment to, as described in [Clear
+  -- Values](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears-values)
+  -- below.
+  vkClearValue :: VkClearValue
+  }
+  deriving (Eq, Show)
+
+instance Storable VkClearAttachment where
+  sizeOf ~_ = 24
+  alignment ~_ = 4
+  peek ptr = VkClearAttachment <$> peek (ptr `plusPtr` 0)
+                               <*> peek (ptr `plusPtr` 4)
+                               <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkClearAttachment))
+                *> poke (ptr `plusPtr` 4) (vkColorAttachment (poked :: VkClearAttachment))
+                *> poke (ptr `plusPtr` 8) (vkClearValue (poked :: VkClearAttachment))
+-- | VkDrawIndirectCommand - Structure specifying a draw indirect command
+--
+-- = Description
+--
+-- The members of @VkDrawIndirectCommand@ have the same meaning as the
+-- similarly named parameters of 'vkCmdDraw'.
+--
+-- == 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
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input)
+--
+-- -   If the
+--     [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-drawIndirectFirstInstance)
+--     feature is not enabled, @firstInstance@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'vkCmdDrawIndirect'
+data VkDrawIndirectCommand = VkDrawIndirectCommand
+  { -- | @vertexCount@ is the number of vertices to draw.
+  vkVertexCount :: Word32
+  , -- | @instanceCount@ is the number of instances to draw.
+  vkInstanceCount :: Word32
+  , -- | @firstVertex@ is the index of the first vertex to draw.
+  vkFirstVertex :: Word32
+  , -- | @firstInstance@ is the instance ID of the first instance to draw.
+  vkFirstInstance :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDrawIndirectCommand where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek ptr = VkDrawIndirectCommand <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 4)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 12)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkVertexCount (poked :: VkDrawIndirectCommand))
+                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndirectCommand))
+                *> poke (ptr `plusPtr` 8) (vkFirstVertex (poked :: VkDrawIndirectCommand))
+                *> poke (ptr `plusPtr` 12) (vkFirstInstance (poked :: VkDrawIndirectCommand))
+-- | VkDrawIndexedIndirectCommand - Structure specifying a draw indexed
+-- indirect command
+--
+-- = Description
+--
+-- The members of @VkDrawIndexedIndirectCommand@ have the same meaning as
+-- the similarly named parameters of 'vkCmdDrawIndexed'.
+--
+-- == 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
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-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
+--     @vkCmdBindIndexBuffer@
+--
+-- -   If the
+--     [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-drawIndirectFirstInstance)
+--     feature is not enabled, @firstInstance@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'vkCmdDrawIndexedIndirect'
+data VkDrawIndexedIndirectCommand = VkDrawIndexedIndirectCommand
+  { -- | @indexCount@ is the number of vertices to draw.
+  vkIndexCount :: Word32
+  , -- | @instanceCount@ is the number of instances to draw.
+  vkInstanceCount :: Word32
+  , -- | @firstIndex@ is the base index within the index buffer.
+  vkFirstIndex :: Word32
+  , -- | @vertexOffset@ is the value added to the vertex index before indexing
+  -- into the vertex buffer.
+  vkVertexOffset :: Int32
+  , -- | @firstInstance@ is the instance ID of the first instance to draw.
+  vkFirstInstance :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDrawIndexedIndirectCommand where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek ptr = VkDrawIndexedIndirectCommand <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 4)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 12)
+                                          <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkIndexCount (poked :: VkDrawIndexedIndirectCommand))
+                *> poke (ptr `plusPtr` 4) (vkInstanceCount (poked :: VkDrawIndexedIndirectCommand))
+                *> poke (ptr `plusPtr` 8) (vkFirstIndex (poked :: VkDrawIndexedIndirectCommand))
+                *> poke (ptr `plusPtr` 12) (vkVertexOffset (poked :: VkDrawIndexedIndirectCommand))
+                *> poke (ptr `plusPtr` 16) (vkFirstInstance (poked :: VkDrawIndexedIndirectCommand))
+-- | VkDispatchIndirectCommand - Structure specifying a dispatch indirect
+-- command
+--
+-- = Description
+--
+-- The members of @VkDispatchIndirectCommand@ have the same meaning as the
+-- corresponding parameters of 'vkCmdDispatch'.
+--
+-- == Valid Usage
+--
+-- -   @x@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0]
+--
+-- -   @y@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1]
+--
+-- -   @z@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[2]
+--
+-- = See Also
+--
+-- 'vkCmdDispatchIndirect'
+data VkDispatchIndirectCommand = VkDispatchIndirectCommand
+  { -- | @x@ is the number of local workgroups to dispatch in the X dimension.
+  vkX :: Word32
+  , -- | @y@ is the number of local workgroups to dispatch in the Y dimension.
+  vkY :: Word32
+  , -- | @z@ is the number of local workgroups to dispatch in the Z dimension.
+  vkZ :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDispatchIndirectCommand where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkDispatchIndirectCommand <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 4)
+                                       <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkDispatchIndirectCommand))
+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkDispatchIndirectCommand))
+                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkDispatchIndirectCommand))
+-- | VkClearColorValue - Structure specifying a clear color value
+--
+-- = Description
+--
+-- The four array elements of the clear color map to R, G, B, and A
+-- components of image formats, in order.
+--
+-- If the image has more than one sample, the same value is written to all
+-- samples for any pixels being cleared.
+--
+-- = See Also
+--
+-- 'VkClearValue', 'vkCmdClearColorImage'
+data VkClearColorValue
+  = -- No documentation found for Nested "VkClearColorValue" "VkFloat32"
+  VkFloat32 (Vector 4 CFloat)
+  | -- No documentation found for Nested "VkClearColorValue" "VkInt32"
+  VkInt32 (Vector 4 Int32)
+  | -- No documentation found for Nested "VkClearColorValue" "VkUint32"
+  VkUint32 (Vector 4 Word32)
+  deriving (Eq, Show)
+
+-- | _Note_: peek is undefined as we wouldn't know which constructor to use
+instance Storable VkClearColorValue where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek _   = error "peek @VkClearColorValue"
+  poke ptr = \case
+    VkFloat32 e -> poke (castPtr ptr) e
+    VkInt32 e -> poke (castPtr ptr) e
+    VkUint32 e -> poke (castPtr ptr) e
+-- | VkClearValue - Structure specifying a clear value
+--
+-- = Description
+--
+-- This union is used where part of the API requires either color or
+-- depth\/stencil clear values, depending on the attachment, and defines
+-- the initial clear values in the 'VkRenderPassBeginInfo' structure.
+--
+-- == Valid Usage
+--
+-- -   @depthStencil@ /must/ be a valid @VkClearDepthStencilValue@
+--     structure
+--
+-- = See Also
+--
+-- 'VkClearAttachment', 'VkClearColorValue', 'VkClearDepthStencilValue',
+-- 'VkRenderPassBeginInfo'
+data VkClearValue
+  = -- No documentation found for Nested "VkClearValue" "VkColor"
+  VkColor VkClearColorValue
+  | -- No documentation found for Nested "VkClearValue" "VkDepthStencil"
+  VkDepthStencil VkClearDepthStencilValue
+  deriving (Eq, Show)
+
+-- | _Note_: peek is undefined as we wouldn't know which constructor to use
+instance Storable VkClearValue where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek _   = error "peek @VkClearValue"
+  poke ptr = \case
+    VkColor e -> poke (castPtr ptr) e
+    VkDepthStencil e -> poke (castPtr ptr) e
+-- | VkStencilFaceFlags - Bitmask of VkStencilFaceFlagBits
+--
+-- = Description
+--
+-- @VkStencilFaceFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkStencilFaceFlagBits'.
+--
+-- = See Also
 --
 -- 'VkStencilFaceFlagBits', 'vkCmdSetStencilCompareMask',
 -- 'vkCmdSetStencilReference', 'vkCmdSetStencilWriteMask'
diff --git a/src/Graphics/Vulkan/Core10/CommandPool.hs b/src/Graphics/Vulkan/Core10/CommandPool.hs
--- a/src/Graphics/Vulkan/Core10/CommandPool.hs
+++ b/src/Graphics/Vulkan/Core10/CommandPool.hs
@@ -74,7 +74,6 @@
 -- command pool
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandPoolCreateFlags'
 newtype VkCommandPoolCreateFlagBits = VkCommandPoolCreateFlagBits VkFlags
@@ -109,10 +108,11 @@
 pattern VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = VkCommandPoolCreateFlagBits 0x00000001
 
 -- | @VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT@ allows any command
--- buffer allocated from a pool to be individually reset to the
--- <{html_spec_relative}#commandbuffers-lifecycle initial state>; either by
--- calling 'Graphics.Vulkan.Core10.CommandBuffer.vkResetCommandBuffer', or
--- via the implicit reset when calling
+-- buffer allocated from a pool to be individually reset to the [initial
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle);
+-- either by calling
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkResetCommandBuffer', or via the
+-- implicit reset when calling
 -- 'Graphics.Vulkan.Core10.CommandBuffer.vkBeginCommandBuffer'. If this
 -- flag is not set on a pool, then @vkResetCommandBuffer@ /must/ not be
 -- called for any command buffer allocated from that pool.
@@ -124,7 +124,6 @@
 -- pool reset
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandPoolResetFlags'
 newtype VkCommandPoolResetFlagBits = VkCommandPoolResetFlagBits VkFlags
@@ -153,11 +152,7 @@
 data VkCommandPool_T
 -- | VkCommandPool - Opaque handle to a command pool object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferAllocateInfo',
 -- 'vkCreateCommandPool', 'vkDestroyCommandPool',
@@ -169,21 +164,19 @@
 -- | vkCreateCommandPool - Create a new command pool object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the command pool.
 --
 -- -   @pCreateInfo@ contains information used to create the command pool.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pCommandPool@ points to a @VkCommandPool@ handle in which the
 --     created pool is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -198,16 +191,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkCommandPool', 'VkCommandPoolCreateInfo',
@@ -216,33 +208,34 @@
 -- | vkDestroyCommandPool - Destroy a command pool object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the command pool.
 --
 -- -   @commandPool@ is the handle of the command pool to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- = Description
--- #_description#
 --
 -- When a pool is destroyed, all command buffers allocated from the pool
--- are <{html_spec_relative}#vkFreeCommandBuffers freed>.
+-- are
+-- [freed](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkFreeCommandBuffers).
 --
 -- Any primary command buffer allocated from another 'VkCommandPool' that
--- is in the
--- <{html_spec_relative}#commandbuffers-lifecycle recording or executable state>
+-- is in the [recording or executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 -- and has a secondary command buffer allocated from @commandPool@ recorded
 -- into it, becomes
--- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+-- [invalid](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- == Valid Usage
 --
 -- -   All @VkCommandBuffer@ objects allocated from @commandPool@ /must/
---     not be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending state>.
+--     not be in the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- -   If @VkAllocationCallbacks@ were provided when @commandPool@ was
 --     created, a compatible set of callbacks /must/ be provided here
@@ -269,7 +262,6 @@
 -- -   Host access to @commandPool@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkCommandPool', 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -277,7 +269,6 @@
 -- | vkResetCommandPool - Reset a command pool
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the command pool.
 --
@@ -287,26 +278,25 @@
 --     reset operation.
 --
 -- = Description
--- #_description#
 --
 -- Resetting a command pool recycles all of the resources from all of the
 -- command buffers allocated from the command pool back to the command
 -- pool. All command buffers that have been allocated from the command pool
--- are put in the
--- <{html_spec_relative}#commandbuffers-lifecycle initial state>.
+-- are put in the [initial
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- Any primary command buffer allocated from another 'VkCommandPool' that
--- is in the
--- <{html_spec_relative}#commandbuffers-lifecycle recording or executable state>
+-- is in the [recording or executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 -- and has a secondary command buffer allocated from @commandPool@ recorded
 -- into it, becomes
--- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+-- [invalid](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- == Valid Usage
 --
 -- -   All @VkCommandBuffer@ objects allocated from @commandPool@ /must/
---     not be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending state>
+--     not be in the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- == Valid Usage (Implicit)
 --
@@ -326,16 +316,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandPool', 'VkCommandPoolResetFlags',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -343,9 +332,6 @@
 -- | VkCommandPoolCreateInfo - Structure specifying parameters of a newly
 -- created command pool
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @queueFamilyIndex@ /must/ be the index of a queue family available
@@ -361,18 +347,22 @@
 --     'VkCommandPoolCreateFlagBits' values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandPoolCreateFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateCommandPool'
 data VkCommandPoolCreateInfo = VkCommandPoolCreateInfo
-  { -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkCommandPoolCreateFlagBits' indicating usage
+  -- behavior for the pool and command buffers allocated from it.
   vkFlags :: VkCommandPoolCreateFlags
-  , -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkQueueFamilyIndex"
+  , -- | @queueFamilyIndex@ designates a queue family as described in section
+  -- [Queue Family
+  -- Properties](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-queueprops).
+  -- All command buffers allocated from this command pool /must/ be submitted
+  -- on queues from the same queue family.
   vkQueueFamilyIndex :: Word32
   }
   deriving (Eq, Show)
@@ -391,26 +381,22 @@
 -- | VkCommandPoolCreateFlags - Bitmask of VkCommandPoolCreateFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkCommandPoolCreateFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkCommandPoolCreateFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandPoolCreateFlagBits', 'VkCommandPoolCreateInfo'
 type VkCommandPoolCreateFlags = VkCommandPoolCreateFlagBits
 -- | VkCommandPoolResetFlags - Bitmask of VkCommandPoolResetFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkCommandPoolResetFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkCommandPoolResetFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandPoolResetFlagBits', 'vkResetCommandPool'
 type VkCommandPoolResetFlags = VkCommandPoolResetFlagBits
diff --git a/src/Graphics/Vulkan/Core10/Constants.hs b/src/Graphics/Vulkan/Core10/Constants.hs
--- a/src/Graphics/Vulkan/Core10/Constants.hs
+++ b/src/Graphics/Vulkan/Core10/Constants.hs
@@ -57,11 +57,7 @@
 
 -- | VK_NULL_HANDLE - Reserved non-valid object handle
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- No cross-references are available
 pattern VK_NULL_HANDLE :: Ptr a
@@ -72,7 +68,6 @@
 -- | VkPipelineCacheHeaderVersion - Encode pipeline cache version
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache',
 -- 'Graphics.Vulkan.Core10.PipelineCache.vkGetPipelineCacheData'
diff --git a/src/Graphics/Vulkan/Core10/Core.hs b/src/Graphics/Vulkan/Core10/Core.hs
--- a/src/Graphics/Vulkan/Core10/Core.hs
+++ b/src/Graphics/Vulkan/Core10/Core.hs
@@ -327,7 +327,6 @@
 -- | VkBool32 - Vulkan boolean type
 --
 -- = Description
--- #_description#
 --
 -- @VK_TRUE@ represents a boolean __True__ (integer 1) value, and
 -- @VK_FALSE@ a boolean __False__ (integer 0) value.
@@ -339,7 +338,6 @@
 -- @VK_FALSE@ into a Vulkan implementation where a @VkBool32@ is expected.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferInheritanceInfo',
 -- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationBufferCreateInfoNV',
@@ -419,7 +417,6 @@
 -- | VkFormat - Available image formats
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
 -- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription',
@@ -1692,9 +1689,9 @@
 -- packed unsigned floating-point format that has a 10-bit B component in
 -- bits 22..31, an 11-bit G component in bits 11..21, an 11-bit R component
 -- in bits 0..10. See
--- <{html_spec_relative}#fundamentals-fp10 {html_spec_relative}#fundamentals-fp10>
+-- [{html_spec_relative}#fundamentals-fp10](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-fp10)
 -- and
--- <{html_spec_relative}#fundamentals-fp11 {html_spec_relative}#fundamentals-fp11>.
+-- [{html_spec_relative}#fundamentals-fp11](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-fp11).
 pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32 :: VkFormat
 pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32 = VkFormat 122
 
@@ -2109,7 +2106,6 @@
 -- | VkResult - Vulkan command return codes
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_SUCCESS@ Command successfully completed
 --
@@ -2124,6 +2120,10 @@
 --
 -- -   @VK_INCOMPLETE@ A return array was too small for the result
 --
+-- -   @VK_SUBOPTIMAL_KHR@ A swapchain no longer matches the surface
+--     properties exactly, but /can/ still be used to present to the
+--     surface successfully.
+--
 -- -   @VK_ERROR_OUT_OF_HOST_MEMORY@ A host memory allocation has failed.
 --
 -- -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@ A device memory allocation has
@@ -2133,7 +2133,8 @@
 --     not be completed for implementation-specific reasons.
 --
 -- -   @VK_ERROR_DEVICE_LOST@ The logical or physical device has been lost.
---     See <{html_spec_relative}#devsandqueues-lost-device Lost Device>
+--     See [Lost
+--     Device](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-lost-device)
 --
 -- -   @VK_ERROR_MEMORY_MAP_FAILED@ Mapping of a memory object has failed.
 --
@@ -2158,8 +2159,42 @@
 -- -   @VK_ERROR_FRAGMENTED_POOL@ A pool allocation has failed due to
 --     fragmentation of the pool’s memory. This /must/ only be returned if
 --     no attempt to allocate host or device memory was made to accomodate
---     the new allocation.
+--     the new allocation. This /should/ be returned in preference to
+--     @VK_ERROR_OUT_OF_POOL_MEMORY@, but only if the implementation is
+--     certain that the pool allocation failure was due to fragmentation.
 --
+-- -   @VK_ERROR_SURFACE_LOST_KHR@ A surface is no longer available.
+--
+-- -   @VK_ERROR_NATIVE_WINDOW_IN_USE_KHR@ The requested window is already
+--     in use by Vulkan or another API in a manner which prevents it from
+--     being used again.
+--
+-- -   @VK_ERROR_OUT_OF_DATE_KHR@ A surface has changed in such a way that
+--     it is no longer compatible with the swapchain, and further
+--     presentation requests using the swapchain will fail. Applications
+--     /must/ query the new surface properties and recreate their swapchain
+--     if they wish to continue presenting to the surface.
+--
+-- -   @VK_ERROR_INCOMPATIBLE_DISPLAY_KHR@ The display used by a swapchain
+--     does not use the same presentable image layout, or is incompatible
+--     in a way that prevents sharing an image.
+--
+-- -   @VK_ERROR_INVALID_SHADER_NV@ One or more shaders failed to compile
+--     or link. More details are reported back to the application via
+--     @{html_spec_relative}#VK_EXT_debug_report@ if enabled.
+--
+-- -   @VK_ERROR_OUT_OF_POOL_MEMORY@ A pool memory allocation has failed.
+--     This /must/ only be returned if no attempt to allocate host or
+--     device memory was made to accomodate the new allocation. If the
+--     failure was definitely due to fragmentation of the pool,
+--     @VK_ERROR_FRAGMENTED_POOL@ /should/ be returned instead.
+--
+-- -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@ An external handle is not a valid
+--     handle of the specified type.
+--
+-- -   @VK_ERROR_FRAGMENTATION_EXT@ A descriptor pool creation has failed
+--     due to fragmentation.
+--
 -- If a command returns a run time error, unless otherwise specified any
 -- output parameters will have undefined contents, except that if the
 -- output parameter is a structure with @sType@ and @pNext@ fields, those
@@ -2178,7 +2213,6 @@
 -- @vkEndCommandBuffer@.
 --
 -- = See Also
--- #_see_also#
 --
 -- No cross-references are available,
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkPresentInfoKHR'
@@ -2333,7 +2367,6 @@
 -- | VkStructureType - Vulkan structure types (@stype@)
 --
 -- = Description
--- #_description#
 --
 -- Each value corresponds to a particular structure with a @sType@ member
 -- with a matching name. As a general rule, the name of each
@@ -2351,7 +2384,6 @@
 -- this Specification.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkAcquireNextImageInfoKHR',
 -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
@@ -3272,100 +3304,86 @@
 -- | VkObjectType - Specify an enumeration to track object handle types
 --
 -- = Description
--- #_description#
 --
--- > +------------------------------------------+---------------------------+
--- > | 'VkObjectType'                           | Vulkan Handle Type        |
--- > +==========================================+===========================+
--- > | @VK_OBJECT_TYPE_UNKNOWN@                 | Unknown\/Undefined Handle |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_INSTANCE@                | 'Graphics.Vulkan.Core10.D |
--- > |                                          | eviceInitialization.VkIns |
--- > |                                          | tance'                    |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_PHYSICAL_DEVICE@         | 'Graphics.Vulkan.Core10.D |
--- > |                                          | eviceInitialization.VkPhy |
--- > |                                          | sicalDevice'              |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_DEVICE@                  | 'Graphics.Vulkan.Core10.D |
--- > |                                          | eviceInitialization.VkDev |
--- > |                                          | ice'                      |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_QUEUE@                   | 'Graphics.Vulkan.Core10.Q |
--- > |                                          | ueue.VkQueue'             |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_SEMAPHORE@               | 'Graphics.Vulkan.Core10.Q |
--- > |                                          | ueue.VkSemaphore'         |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_COMMAND_BUFFER@          | 'Graphics.Vulkan.Core10.Q |
--- > |                                          | ueue.VkCommandBuffer'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_FENCE@                   | 'Graphics.Vulkan.Core10.Q |
--- > |                                          | ueue.VkFence'             |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_DEVICE_MEMORY@           | 'Graphics.Vulkan.Core10.M |
--- > |                                          | emory.VkDeviceMemory'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_BUFFER@                  | 'Graphics.Vulkan.Core10.M |
--- > |                                          | emoryManagement.VkBuffer' |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_IMAGE@                   | 'Graphics.Vulkan.Core10.M |
--- > |                                          | emoryManagement.VkImage'  |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_EVENT@                   | 'Graphics.Vulkan.Core10.E |
--- > |                                          | vent.VkEvent'             |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_QUERY_POOL@              | 'Graphics.Vulkan.Core10.Q |
--- > |                                          | uery.VkQueryPool'         |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_BUFFER_VIEW@             | 'Graphics.Vulkan.Core10.B |
--- > |                                          | ufferView.VkBufferView'   |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_IMAGE_VIEW@              | 'Graphics.Vulkan.Core10.I |
--- > |                                          | mageView.VkImageView'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_SHADER_MODULE@           | 'Graphics.Vulkan.Core10.S |
--- > |                                          | hader.VkShaderModule'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_PIPELINE_CACHE@          | 'Graphics.Vulkan.Core10.P |
--- > |                                          | ipelineCache.VkPipelineCa |
--- > |                                          | che'                      |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_PIPELINE_LAYOUT@         | 'Graphics.Vulkan.Core10.P |
--- > |                                          | ipeline.VkPipelineLayout' |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_RENDER_PASS@             | 'Graphics.Vulkan.Core10.P |
--- > |                                          | ipeline.VkRenderPass'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_PIPELINE@                | 'Graphics.Vulkan.Core10.P |
--- > |                                          | ipeline.VkPipeline'       |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT@   | 'Graphics.Vulkan.Core10.P |
--- > |                                          | ipelineLayout.VkDescripto |
--- > |                                          | rSetLayout'               |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_SAMPLER@                 | 'Graphics.Vulkan.Core10.S |
--- > |                                          | ampler.VkSampler'         |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_DESCRIPTOR_POOL@         | 'Graphics.Vulkan.Core10.D |
--- > |                                          | escriptorSet.VkDescriptor |
--- > |                                          | Pool'                     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_DESCRIPTOR_SET@          | 'Graphics.Vulkan.Core10.D |
--- > |                                          | escriptorSet.VkDescriptor |
--- > |                                          | Set'                      |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_FRAMEBUFFER@             | 'Graphics.Vulkan.Core10.P |
--- > |                                          | ass.VkFramebuffer'        |
--- > +------------------------------------------+---------------------------+
--- > | @VK_OBJECT_TYPE_COMMAND_POOL@            | 'Graphics.Vulkan.Core10.C |
--- > |                                          | ommandPool.VkCommandPool' |
--- > +------------------------------------------+---------------------------+
--- >
--- > VkObjectType and Vulkan Handle Relationship
+-- \'
 --
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'VkObjectType'                                | Vulkan Handle Type                                                                                  |
+-- +===============================================+=====================================================================================================+
+-- | @VK_OBJECT_TYPE_UNKNOWN@                      | Unknown\/Undefined Handle                                                                           |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_INSTANCE@                     | 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'                                            |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_PHYSICAL_DEVICE@              | 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'                                      |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DEVICE@                       | 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'                                              |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_QUEUE@                        | 'Graphics.Vulkan.Core10.Queue.VkQueue'                                                              |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_SEMAPHORE@                    | 'Graphics.Vulkan.Core10.Queue.VkSemaphore'                                                          |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_COMMAND_BUFFER@               | 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'                                                      |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_FENCE@                        | 'Graphics.Vulkan.Core10.Queue.VkFence'                                                              |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DEVICE_MEMORY@                | 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory'                                                      |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_BUFFER@                       | 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer'                                                  |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_IMAGE@                        | 'Graphics.Vulkan.Core10.MemoryManagement.VkImage'                                                   |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_EVENT@                        | 'Graphics.Vulkan.Core10.Event.VkEvent'                                                              |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_QUERY_POOL@                   | 'Graphics.Vulkan.Core10.Query.VkQueryPool'                                                          |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_BUFFER_VIEW@                  | 'Graphics.Vulkan.Core10.BufferView.VkBufferView'                                                    |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_IMAGE_VIEW@                   | 'Graphics.Vulkan.Core10.ImageView.VkImageView'                                                      |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_SHADER_MODULE@                | 'Graphics.Vulkan.Core10.Shader.VkShaderModule'                                                      |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_PIPELINE_CACHE@               | 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'                                              |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_PIPELINE_LAYOUT@              | 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'                                                  |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_RENDER_PASS@                  | 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass'                                                      |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_PIPELINE@                     | 'Graphics.Vulkan.Core10.Pipeline.VkPipeline'                                                        |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT@        | 'Graphics.Vulkan.Core10.PipelineLayout.VkDescriptorSetLayout'                                       |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_SAMPLER@                      | 'Graphics.Vulkan.Core10.Sampler.VkSampler'                                                          |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DESCRIPTOR_POOL@              | 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorPool'                                             |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DESCRIPTOR_SET@               | 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSet'                                              |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_FRAMEBUFFER@                  | 'Graphics.Vulkan.Core10.Pass.VkFramebuffer'                                                         |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_COMMAND_POOL@                 | 'Graphics.Vulkan.Core10.CommandPool.VkCommandPool'                                                  |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_SURFACE_KHR@                  | 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'                                            |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_SWAPCHAIN_KHR@                | 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'                                        |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DISPLAY_KHR@                  | 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR'                                            |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DISPLAY_MODE_KHR@             | 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayModeKHR'                                        |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT@    | 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportCallbackEXT'                           |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE@   | 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplate' |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_OBJECT_TABLE_NVX@             | 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableNVX'                      |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX@ | 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkIndirectCommandsLayoutNVX'           |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_OBJECT_TYPE_VALIDATION_CACHE_EXT@         | 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.VkValidationCacheEXT'                           |
+-- +-----------------------------------------------+-----------------------------------------------------------------------------------------------------+
+--
+-- VkObjectType and Vulkan Handle Relationship
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsObjectNameInfoEXT',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsObjectTagInfoEXT'
@@ -3566,7 +3584,6 @@
 -- | VkFlags - Vulkan bitmasks
 --
 -- = Description
--- #_description#
 --
 -- Bitmasks are passed to many commands and structures to compactly
 -- represent options, but @VkFlags@ is not used directly in the API.
@@ -3575,7 +3592,6 @@
 -- type, is used.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Pipeline.VkColorComponentFlags'
 type VkFlags = Word32
diff --git a/src/Graphics/Vulkan/Core10/DescriptorSet.hs b/src/Graphics/Vulkan/Core10/DescriptorSet.hs
--- a/src/Graphics/Vulkan/Core10/DescriptorSet.hs
+++ b/src/Graphics/Vulkan/Core10/DescriptorSet.hs
@@ -122,40 +122,44 @@
 -- set
 --
 -- = Description
--- #_description#
 --
--- -   @VK_DESCRIPTOR_TYPE_SAMPLER@ specifies a
---     <{html_spec_relative}#descriptorsets-sampler sampler descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_SAMPLER@ specifies a [sampler
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampler).
 --
--- -   @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ specifies a
---     <{html_spec_relative}#descriptorsets-combinedimagesampler combined image sampler descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ specifies a [combined
+--     image sampler
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler).
 --
--- -   @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ specifies a
---     <{html_spec_relative}#descriptorsets-sampledimage sampled image descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ specifies a [sampled image
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage).
 --
--- -   @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ specifies a
---     <{html_spec_relative}#descriptorsets-storageimage storage image descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ specifies a [storage image
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage).
 --
--- -   @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ specifies a
---     <{html_spec_relative}#descriptorsets-uniformtexelbuffer uniform texel buffer descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ specifies a [uniform texel
+--     buffer
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer).
 --
--- -   @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ specifies a
---     <{html_spec_relative}#descriptorsets-storagetexelbuffer storage texel buffer descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ specifies a [storage texel
+--     buffer
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer).
 --
--- -   @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ specifies a
---     <{html_spec_relative}#descriptorsets-uniformbuffer uniform buffer descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ specifies a [uniform buffer
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbuffer).
 --
--- -   @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ specifies a
---     <{html_spec_relative}#descriptorsets-storagebuffer storage buffer descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ specifies a [storage buffer
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebuffer).
 --
--- -   @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ specifies a
---     <{html_spec_relative}#descriptorsets-uniformbufferdynamic dynamic uniform buffer descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ specifies a [dynamic
+--     uniform buffer
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic).
 --
--- -   @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ specifies a
---     <{html_spec_relative}#descriptorsets-storagebufferdynamic dynamic storage buffer descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ specifies a [dynamic
+--     storage buffer
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic).
 --
--- -   @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ specifies a
---     <{html_spec_relative}#descriptorsets-inputattachment input attachment descriptor>.
+-- -   @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ specifies a [input attachment
+--     descriptor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-inputattachment).
 --
 -- When a descriptor set is updated via elements of 'VkWriteDescriptorSet',
 -- members of @pImageInfo@, @pBufferInfo@ and @pTexelBufferView@ are only
@@ -186,7 +190,6 @@
 --     'VkWriteDescriptorSet'::@pTexelBufferView@ is accessed.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPoolSize', 'VkDescriptorSetLayoutBinding',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateEntry',
@@ -276,16 +279,7 @@
 -- | VkDescriptorSetLayoutCreateFlagBits - Bitmask specifying descriptor set
 -- layout properties
 --
--- = Description
--- #_description#
---
--- __Note__
---
--- All bits for this type are defined by extensions, and none of those
--- extensions are enabled in this build of the specification.
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSetLayoutCreateFlags'
 newtype VkDescriptorSetLayoutCreateFlagBits = VkDescriptorSetLayoutCreateFlagBits VkFlags
@@ -316,7 +310,6 @@
 -- operations on a descriptor pool
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPoolCreateFlags'
 newtype VkDescriptorPoolCreateFlagBits = VkDescriptorPoolCreateFlagBits VkFlags
@@ -354,13 +347,11 @@
 -- | VkDescriptorPoolResetFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkDescriptorPoolResetFlags@ is a bitmask type for setting a mask, but
 -- is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'vkResetDescriptorPool'
 newtype VkDescriptorPoolResetFlags = VkDescriptorPoolResetFlags VkFlags
@@ -385,11 +376,7 @@
 data VkDescriptorSet_T
 -- | VkDescriptorSet - Opaque handle to a descriptor set object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkCopyDescriptorSet',
 -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableDescriptorSetEntryNVX',
@@ -403,11 +390,7 @@
 data VkDescriptorPool_T
 -- | VkDescriptorPool - Opaque handle to a descriptor pool object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSetAllocateInfo', 'vkCreateDescriptorPool',
 -- 'vkDestroyDescriptorPool', 'vkFreeDescriptorSets',
@@ -416,7 +399,6 @@
 -- | vkCreateDescriptorSetLayout - Create a new descriptor set layout
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the descriptor set
 --     layout.
@@ -426,14 +408,13 @@
 --     the descriptor set layout object.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pSetLayout@ points to a @VkDescriptorSetLayout@ handle in which the
 --     resulting descriptor set layout object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -449,16 +430,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.PipelineLayout.VkDescriptorSetLayout',
@@ -468,7 +448,6 @@
 -- | vkDestroyDescriptorSetLayout - Destroy a descriptor set layout object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the descriptor set
 --     layout.
@@ -476,10 +455,9 @@
 -- -   @descriptorSetLayout@ is the descriptor set layout to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -510,7 +488,6 @@
 --     synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.PipelineLayout.VkDescriptorSetLayout',
@@ -519,7 +496,6 @@
 -- | vkCreateDescriptorPool - Creates a descriptor pool object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the descriptor pool.
 --
@@ -528,16 +504,18 @@
 --     descriptor pool object.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pDescriptorPool@ points to a @VkDescriptorPool@ handle in which the
 --     resulting descriptor pool object is returned.
 --
 -- = Description
--- #_description#
 --
--- @pAllocator@ controls host memory allocation as described in the
--- <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+-- @pAllocator@ controls host memory allocation as described in the [Memory
+-- Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+-- chapter.
 --
 -- The created descriptor pool is returned in @pDescriptorPool@.
 --
@@ -556,10 +534,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -567,7 +545,6 @@
 --     -   @VK_ERROR_FRAGMENTATION_EXT@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDescriptorPool', 'VkDescriptorPoolCreateInfo',
@@ -576,17 +553,17 @@
 -- | vkDestroyDescriptorPool - Destroy a descriptor pool object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the descriptor pool.
 --
 -- -   @descriptorPool@ is the descriptor pool to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- = Description
--- #_description#
 --
 -- When a pool is destroyed, all descriptor sets allocated from the pool
 -- are implicitly freed and become invalid. Descriptor sets allocated from
@@ -623,7 +600,6 @@
 -- -   Host access to @descriptorPool@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDescriptorPool',
@@ -632,7 +608,6 @@
 -- | vkResetDescriptorPool - Resets a descriptor pool object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the descriptor pool.
 --
@@ -641,7 +616,6 @@
 -- -   @flags@ is reserved for future use.
 --
 -- = Description
--- #_description#
 --
 -- Resetting a descriptor pool recycles all of the resources from all of
 -- the descriptor sets allocated from the descriptor pool back to the
@@ -672,16 +646,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPool', 'VkDescriptorPoolResetFlags',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -689,7 +662,6 @@
 -- | vkAllocateDescriptorSets - Allocate one or more descriptor sets
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the descriptor pool.
 --
@@ -701,40 +673,47 @@
 --     handles in which the resulting descriptor set objects are returned.
 --
 -- = Description
--- #_description#
 --
 -- The allocated descriptor sets are returned in @pDescriptorSets@.
 --
 -- When a descriptor set is allocated, the initial state is largely
 -- uninitialized and all descriptors are undefined. However, the descriptor
 -- set /can/ be bound in a command buffer without causing errors or
--- exceptions. All descriptors that are statically used /must/ have been
--- populated before the descriptor set is consumed. Entries that are not
--- used by a pipeline /can/ have uninitialized descriptors or descriptors
--- of resources that have been destroyed, and executing a draw or dispatch
--- with such a descriptor set bound does not cause undefined behavior. This
--- means applications need not populate unused entries with dummy
--- descriptors.
---
--- If an allocation fails due to fragmentation, an indeterminate error is
--- returned with an unspecified error code. Any returned error other than
--- @VK_ERROR_FRAGMENTED_POOL@ does not imply its usual meaning:
--- applications /should/ assume that the allocation failed due to
--- fragmentation, and create a new descriptor pool.
---
--- __Note__
+-- exceptions. For descriptor set bindings created with the
+-- @VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT@ bit set, all descriptors
+-- in that binding that are dynamically used /must/ have been populated
+-- before the descriptor set is
+-- [consumed](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-binding).
+-- For descriptor set bindings created without the
+-- @VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT@ bit set, all descriptors
+-- in that binding that are statically used /must/ have been populated
+-- before the descriptor set is
+-- [consumed](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-binding).
+-- Entries that are not used by a pipeline /can/ have uninitialized
+-- descriptors or descriptors of resources that have been destroyed, and
+-- executing a draw or dispatch with such a descriptor set bound does not
+-- cause undefined behavior. This means applications need not populate
+-- unused entries with dummy descriptors.
 --
--- Applications /should/ check for a negative return value when allocating
--- new descriptor sets, assume that any error effectively means
--- @VK_ERROR_FRAGMENTED_POOL@, and try to create a new descriptor pool. If
--- @VK_ERROR_FRAGMENTED_POOL@ is the actual return value, it adds certainty
--- to that decision.
+-- If a call to @vkAllocateDescriptorSets@ would cause the total number of
+-- descriptor sets allocated from the pool to exceed the value of
+-- 'VkDescriptorPoolCreateInfo'::@maxSets@ used to create
+-- @pAllocateInfo@→@descriptorPool@, then the allocation /may/ fail due to
+-- lack of space in the descriptor pool. Similarly, the allocation /may/
+-- fail due to lack of space if the call to @vkAllocateDescriptorSets@
+-- would cause the number of any given descriptor type to exceed the sum of
+-- all the @descriptorCount@ members of each element of
+-- 'VkDescriptorPoolCreateInfo'::@pPoolSizes@ with a @member@ equal to that
+-- type. If the allocation fails due to no more space in the descriptor
+-- pool, and not because of system or device memory exhaustion, then
+-- @VK_ERROR_OUT_OF_POOL_MEMORY@ /must/ be returned.
 --
--- The reason for this is that @VK_ERROR_FRAGMENTED_POOL@ was only added in
--- a later revision of the 1.0 specification, and so drivers /may/ return
--- other errors if they were written against earlier revisions. To ensure
--- full compatibility with earlier patch revisions, these other errors are
--- allowed.
+-- @vkAllocateDescriptorSets@ /can/ be used to create multiple descriptor
+-- sets. If the creation of any of those descriptor sets fails, then the
+-- implementation /must/ destroy all successfully created descriptor set
+-- objects from this command, set all entries of the @pDescriptorSets@
+-- array to 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' and return
+-- the error.
 --
 -- == Valid Usage (Implicit)
 --
@@ -753,10 +732,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -766,7 +745,6 @@
 --     -   @VK_ERROR_OUT_OF_POOL_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSet', 'VkDescriptorSetAllocateInfo',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -774,7 +752,6 @@
 -- | vkFreeDescriptorSets - Free one or more descriptor sets
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the descriptor pool.
 --
@@ -788,7 +765,6 @@
 --     objects.
 --
 -- = Description
--- #_description#
 --
 -- After a successful call to @vkFreeDescriptorSets@, all descriptor sets
 -- in @pDescriptorSets@ are invalid.
@@ -832,16 +808,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPool', 'VkDescriptorSet',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -849,7 +824,6 @@
 -- | vkUpdateDescriptorSets - Update the contents of a descriptor set object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that updates the descriptor sets.
 --
@@ -868,7 +842,6 @@
 --     copy between.
 --
 -- = Description
--- #_description#
 --
 -- The operations described by @pDescriptorWrites@ are performed first,
 -- followed by the operations described by @pDescriptorCopies@. Within each
@@ -884,17 +857,23 @@
 --
 -- If the @dstSet@ member of any element of @pDescriptorWrites@ or
 -- @pDescriptorCopies@ is bound, accessed, or modified by any command that
--- was recorded to a command buffer which is currently in the
--- <{html_spec_relative}#commandbuffers-lifecycle recording or executable state>,
+-- was recorded to a command buffer which is currently in the [recording or
+-- executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle),
+-- and any of the descriptor bindings that are updated were not created
+-- with the @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ or
+-- @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@ bits set,
 -- that command buffer becomes
--- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+-- [invalid](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- == Valid Usage
 --
--- -   The @dstSet@ member of each element of @pDescriptorWrites@ or
---     @pDescriptorCopies@ /must/ not be used by any command that was
---     recorded to a command buffer which is in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending state>.
+-- -   Descriptor bindings updated by this command which were created
+--     without the @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ or
+--     @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@ bits set
+--     /must/ not be used by any command that was recorded to a command
+--     buffer which is in the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- == Valid Usage (Implicit)
 --
@@ -917,7 +896,6 @@
 --     synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCopyDescriptorSet',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -926,15 +904,14 @@
 -- | VkDescriptorBufferInfo - Structure specifying descriptor buffer info
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
 -- When setting @range@ to @VK_WHOLE_SIZE@, the effective range /must/ not
 -- be larger than the maximum range for the descriptor type
--- (<{html_spec_relative}#features-limits-maxUniformBufferRange maxUniformBufferRange>
+-- ([maxUniformBufferRange](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxUniformBufferRange)
 -- or
--- <{html_spec_relative}#features-limits-maxStorageBufferRange maxStorageBufferRange>).
+-- [maxStorageBufferRange](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxStorageBufferRange)).
 -- This means that @VK_WHOLE_SIZE@ is not typically useful in the common
 -- case where uniform buffer descriptors are suballocated from a buffer
 -- that is much larger than @maxUniformBufferRange@.
@@ -959,16 +936,18 @@
 -- -   @buffer@ /must/ be a valid @VkBuffer@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer', @VkDeviceSize@,
 -- 'VkWriteDescriptorSet'
 data VkDescriptorBufferInfo = VkDescriptorBufferInfo
-  { -- No documentation found for Nested "VkDescriptorBufferInfo" "vkBuffer"
+  { -- | @buffer@ is the buffer resource.
   vkBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkDescriptorBufferInfo" "vkOffset"
+  , -- | @offset@ is the offset in bytes from the start of @buffer@. Access to
+  -- buffer memory via this descriptor uses addressing that is relative to
+  -- this starting offset.
   vkOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkDescriptorBufferInfo" "vkRange"
+  , -- | @range@ is the size in bytes that is used for this descriptor update, or
+  -- @VK_WHOLE_SIZE@ to use the range from @offset@ to the end of the buffer.
   vkRange :: VkDeviceSize
   }
   deriving (Eq, Show)
@@ -985,34 +964,85 @@
 -- | VkDescriptorImageInfo - Structure specifying descriptor image info
 --
 -- = Description
--- #_description#
 --
 -- Members of @VkDescriptorImageInfo@ that are not used in an update (as
 -- described above) are ignored.
 --
 -- == Valid Usage
 --
+-- -   @imageView@ /must/ not be 2D or 2D array image view created from a
+--     3D image
+--
 -- -   @imageLayout@ /must/ match the actual
 --     'Graphics.Vulkan.Core10.Image.VkImageLayout' of each subresource
 --     accessible from @imageView@ at the time this descriptor is accessed
 --
+-- -   If @sampler@ is used and enables [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion):
+--
+--     -   The @format@ of the @imageView@ /must/ be the same as the
+--         'Graphics.Vulkan.Core10.Core.VkFormat' of the image
+--
+--     -   The @aspectMask@ of the @imageView@ /must/ be
+--         @VK_IMAGE_ASPECT_COLOR_BIT@
+--
+--     -   The @components.a@ of the @imageView@ /must/ be
+--         @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
+--     -   The @components.r@ of the @imageView@ /must/ be
+--         @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
+--     -   The @components.g@ of the @imageView@ /must/ be
+--         @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
+--     -   The @components.b@ of the @imageView@ /must/ be
+--         @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
+--     -   The @pNext@ chain of the @imageView@ /must/ contain a
+--         @VkSamplerYcbcrConversionInfo@ which has a @conversion@ which is
+--         an /identically defined object/ to the @conversion@ of the
+--         @VkSamplerYcbcrConversionInfo@ which is in the @pNext@ chain of
+--         the @sampler@
+--
+-- -   If @sampler@ is used and does not enable [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+--     and the 'Graphics.Vulkan.Core10.Core.VkFormat' of the image is a
+--     [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+--     the image /must/ have been created with
+--     @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@, and the @aspectMask@ of the
+--     @imageView@ /must/ be @VK_IMAGE_ASPECT_PLANE_0_BIT@,
+--     @VK_IMAGE_ASPECT_PLANE_1_BIT@ or (for three-plane formats only)
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   Both of @imageView@, and @sampler@ that are valid handles /must/
 --     have been created, allocated, or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Image.VkImageLayout',
 -- 'Graphics.Vulkan.Core10.ImageView.VkImageView',
 -- 'Graphics.Vulkan.Core10.Sampler.VkSampler', 'VkWriteDescriptorSet'
 data VkDescriptorImageInfo = VkDescriptorImageInfo
-  { -- No documentation found for Nested "VkDescriptorImageInfo" "vkSampler"
+  { -- | @sampler@ is a sampler handle, and is used in descriptor updates for
+  -- types @VK_DESCRIPTOR_TYPE_SAMPLER@ and
+  -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ if the binding being updated
+  -- does not use immutable samplers.
   vkSampler :: VkSampler
-  , -- No documentation found for Nested "VkDescriptorImageInfo" "vkImageView"
+  , -- | @imageView@ is an image view handle, and is used in descriptor updates
+  -- for types @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@,
+  -- @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@,
+  -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, and
+  -- @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@.
   vkImageView :: VkImageView
-  , -- No documentation found for Nested "VkDescriptorImageInfo" "vkImageLayout"
+  , -- | @imageLayout@ is the layout that the image subresources accessible from
+  -- @imageView@ will be in at the time this descriptor is accessed.
+  -- @imageLayout@ is used in descriptor updates for types
+  -- @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@,
+  -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, and
+  -- @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@.
   vkImageLayout :: VkImageLayout
   }
   deriving (Eq, Show)
@@ -1030,7 +1060,6 @@
 -- descriptor set write operation
 --
 -- = Description
--- #_description#
 --
 -- Only one of @pImageInfo@, @pBufferInfo@, or @pTexelBufferView@ members
 -- is used according to the descriptor type specified in the
@@ -1071,7 +1100,7 @@
 --     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
---     <{html_spec_relative}#descriptorsets-updates-consecutive {html_spec_relative}#descriptorsets-updates-consecutive>
+--     [{html_spec_relative}#descriptorsets-updates-consecutive](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-updates-consecutive)
 --
 -- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_SAMPLER@,
 --     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
@@ -1187,6 +1216,11 @@
 --     @imageView@ member of each element of @pImageInfo@ /must/ have been
 --     created with @VK_IMAGE_USAGE_STORAGE_BIT@ set
 --
+-- -   All consecutive bindings updated via a single @VkWriteDescriptorSet@
+--     structure, except those with a @descriptorCount@ of zero, /must/
+--     have identical
+--     'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkDescriptorBindingFlagBitsEXT'.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET@
@@ -1202,7 +1236,6 @@
 --     the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.BufferView.VkBufferView',
 -- 'VkDescriptorBufferInfo', 'VkDescriptorImageInfo', 'VkDescriptorSet',
@@ -1210,25 +1243,36 @@
 -- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetKHR',
 -- 'vkUpdateDescriptorSets'
 data VkWriteDescriptorSet = VkWriteDescriptorSet
-  { -- No documentation found for Nested "VkWriteDescriptorSet" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDstSet"
+  , -- | @dstSet@ is the destination descriptor set to update.
   vkDstSet :: VkDescriptorSet
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDstBinding"
+  , -- | @dstBinding@ is the descriptor binding within that set.
   vkDstBinding :: Word32
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDstArrayElement"
+  , -- | @dstArrayElement@ is the starting element in that array.
   vkDstArrayElement :: Word32
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDescriptorCount"
+  , -- | @descriptorCount@ is the number of descriptors to update (the number of
+  -- elements in @pImageInfo@, @pBufferInfo@, or @pTexelBufferView@).
   vkDescriptorCount :: Word32
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDescriptorType"
+  , -- | @descriptorType@ is a 'VkDescriptorType' specifying the type of each
+  -- descriptor in @pImageInfo@, @pBufferInfo@, or @pTexelBufferView@, as
+  -- described below. It /must/ be the same type as that specified in
+  -- @VkDescriptorSetLayoutBinding@ for @dstSet@ at @dstBinding@. The type of
+  -- the descriptor also controls which array the descriptors are taken from.
   vkDescriptorType :: VkDescriptorType
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPImageInfo"
+  , -- | @pImageInfo@ points to an array of 'VkDescriptorImageInfo' structures or
+  -- is ignored, as described below.
   vkPImageInfo :: Ptr VkDescriptorImageInfo
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPBufferInfo"
+  , -- | @pBufferInfo@ points to an array of 'VkDescriptorBufferInfo' structures
+  -- or is ignored, as described below.
   vkPBufferInfo :: Ptr VkDescriptorBufferInfo
-  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPTexelBufferView"
+  , -- | @pTexelBufferView@ points to an array of
+  -- 'Graphics.Vulkan.Core10.BufferView.VkBufferView' handles as described in
+  -- the [Buffer
+  -- Views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-buffer-views)
+  -- section or is ignored, as described below.
   vkPTexelBufferView :: Ptr VkBufferView
   }
   deriving (Eq, Show)
@@ -1259,9 +1303,6 @@
 -- | VkCopyDescriptorSet - Structure specifying a copy descriptor set
 -- operation
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @srcBinding@ /must/ be a valid binding within @srcSet@
@@ -1270,7 +1311,7 @@
 --     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
---     <{html_spec_relative}#descriptorsets-updates-consecutive {html_spec_relative}#descriptorsets-updates-consecutive>
+--     [{html_spec_relative}#descriptorsets-updates-consecutive](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-updates-consecutive)
 --
 -- -   @dstBinding@ /must/ be a valid binding within @dstSet@
 --
@@ -1278,13 +1319,38 @@
 --     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
---     <{html_spec_relative}#descriptorsets-updates-consecutive {html_spec_relative}#descriptorsets-updates-consecutive>
+--     [{html_spec_relative}#descriptorsets-updates-consecutive](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-updates-consecutive)
 --
 -- -   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
---     <{html_spec_relative}#descriptorsets-updates-consecutive {html_spec_relative}#descriptorsets-updates-consecutive>
+--     [{html_spec_relative}#descriptorsets-updates-consecutive](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-updates-consecutive)
 --
+-- -   If @srcSet@’s layout was created with the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     flag set, then @dstSet@’s layout /must/ also have been created with
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     flag set
+--
+-- -   If @srcSet@’s layout was created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     flag set, then @dstSet@’s layout /must/ also have been created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     flag set
+--
+-- -   If the descriptor pool from which @srcSet@ was allocated was created
+--     with the @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ flag
+--     set, then the descriptor pool from which @dstSet@ was allocated
+--     /must/ also have been created with the
+--     @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ flag set
+--
+-- -   If the descriptor pool from which @srcSet@ was allocated was created
+--     without the @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@
+--     flag set, then the descriptor pool from which @dstSet@ was allocated
+--     /must/ also have been created without the
+--     @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ flag set
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET@
@@ -1299,28 +1365,33 @@
 --     or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSet', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkUpdateDescriptorSets'
 data VkCopyDescriptorSet = VkCopyDescriptorSet
-  { -- No documentation found for Nested "VkCopyDescriptorSet" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkSrcSet"
+  , -- | @srcSet@, @srcBinding@, and @srcArrayElement@ are the source set,
+  -- binding, and array element, respectively.
   vkSrcSet :: VkDescriptorSet
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkSrcBinding"
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "srcBinding"
   vkSrcBinding :: Word32
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkSrcArrayElement"
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "srcArrayElement"
   vkSrcArrayElement :: Word32
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDstSet"
+  , -- | @dstSet@, @dstBinding@, and @dstArrayElement@ are the destination set,
+  -- binding, and array element, respectively.
   vkDstSet :: VkDescriptorSet
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDstBinding"
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "dstBinding"
   vkDstBinding :: Word32
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDstArrayElement"
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "dstArrayElement"
   vkDstArrayElement :: Word32
-  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDescriptorCount"
+  , -- | @descriptorCount@ is the number of descriptors to copy from the source
+  -- to destination. If @descriptorCount@ is greater than the number of
+  -- remaining array elements in the source or destination binding, those
+  -- affect consecutive bindings in a manner similar to
+  -- 'VkWriteDescriptorSet' above.
   vkDescriptorCount :: Word32
   }
   deriving (Eq, Show)
@@ -1350,7 +1421,6 @@
 -- layout binding
 --
 -- = Members
--- #_members#
 --
 -- -   @binding@ is the binding number of this entry and corresponds to a
 --     resource of the same binding number in the shader stages.
@@ -1380,7 +1450,6 @@
 --     compute stage.
 --
 -- = Description
--- #_description#
 --
 -- -   @pImmutableSamplers@ affects initialization of samplers. If
 --     @descriptorType@ specifies a @VK_DESCRIPTOR_TYPE_SAMPLER@ or
@@ -1433,21 +1502,20 @@
 -- -   @descriptorType@ /must/ be a valid 'VkDescriptorType' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSetLayoutCreateInfo', 'VkDescriptorType',
 -- 'Graphics.Vulkan.Core10.Sampler.VkSampler',
 -- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags'
 data VkDescriptorSetLayoutBinding = VkDescriptorSetLayoutBinding
-  { -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkBinding"
+  { -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "binding"
   vkBinding :: Word32
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkDescriptorType"
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "descriptorType"
   vkDescriptorType :: VkDescriptorType
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkDescriptorCount"
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "descriptorCount"
   vkDescriptorCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkStageFlags"
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "stageFlags"
   vkStageFlags :: VkShaderStageFlags
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkPImmutableSamplers"
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "pImmutableSamplers"
   vkPImmutableSamplers :: Ptr VkSampler
   }
   deriving (Eq, Show)
@@ -1468,14 +1536,34 @@
 -- | VkDescriptorSetLayoutCreateInfo - Structure specifying parameters of a
 -- newly created descriptor set layout
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The 'VkDescriptorSetLayoutBinding'::@binding@ members of the
 --     elements of the @pBindings@ array /must/ each have different values.
 --
+-- -   If @flags@ contains
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@, then all
+--     elements of @pBindings@ /must/ not have a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@
+--
+-- -   If @flags@ contains
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@, then the
+--     total number of elements of all bindings /must/ be less than or
+--     equal to
+--     'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.VkPhysicalDevicePushDescriptorPropertiesKHR'::@maxPushDescriptors@
+--
+-- -   If any binding has the
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ bit set, @flags@
+--     /must/ include
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--
+-- -   If any binding has the
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ bit set, then all
+--     bindings /must/ not have @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -1492,7 +1580,6 @@
 --     structures
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSetLayoutBinding', 'VkDescriptorSetLayoutCreateFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
@@ -1500,15 +1587,17 @@
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupport',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupportKHR'
 data VkDescriptorSetLayoutCreateInfo = VkDescriptorSetLayoutCreateInfo
-  { -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkDescriptorSetLayoutCreateFlagBits' specifying
+  -- options for descriptor set layout creation.
   vkFlags :: VkDescriptorSetLayoutCreateFlags
-  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkBindingCount"
+  , -- | @bindingCount@ is the number of elements in @pBindings@.
   vkBindingCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkPBindings"
+  , -- | @pBindings@ is a pointer to an array of 'VkDescriptorSetLayoutBinding'
+  -- structures.
   vkPBindings :: Ptr VkDescriptorSetLayoutBinding
   }
   deriving (Eq, Show)
@@ -1528,9 +1617,6 @@
                 *> poke (ptr `plusPtr` 24) (vkPBindings (poked :: VkDescriptorSetLayoutCreateInfo))
 -- | VkDescriptorPoolSize - Structure specifying descriptor pool size
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @descriptorCount@ /must/ be greater than @0@
@@ -1540,13 +1626,12 @@
 -- -   @type@ /must/ be a valid 'VkDescriptorType' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPoolCreateInfo', 'VkDescriptorType'
 data VkDescriptorPoolSize = VkDescriptorPoolSize
-  { -- No documentation found for Nested "VkDescriptorPoolSize" "vkType"
+  { -- | @type@ is the type of descriptor.
   vkType :: VkDescriptorType
-  , -- No documentation found for Nested "VkDescriptorPoolSize" "vkDescriptorCount"
+  , -- | @descriptorCount@ is the number of descriptors of that type to allocate.
   vkDescriptorCount :: Word32
   }
   deriving (Eq, Show)
@@ -1562,7 +1647,6 @@
 -- created descriptor pool
 --
 -- = Description
--- #_description#
 --
 -- If multiple @VkDescriptorPoolSize@ structures appear in the @pPoolSizes@
 -- array then the pool will be created with enough storage for the total
@@ -1591,6 +1675,13 @@
 -- /can/ create an additional descriptor pool to perform further descriptor
 -- set allocations.
 --
+-- If @flags@ has the @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@
+-- bit set, descriptor pool creation /may/ fail with the error
+-- @VK_ERROR_FRAGMENTATION_EXT@ if the total number of descriptors across
+-- all pools (including this one) created with this bit set exceeds
+-- @maxUpdateAfterBindDescriptorsInAllPools@, or if fragmentation of the
+-- underlying hardware resources occurs.
+--
 -- == Valid Usage
 --
 -- -   @maxSets@ /must/ be greater than @0@
@@ -1610,22 +1701,25 @@
 -- -   @poolSizeCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPoolCreateFlags', 'VkDescriptorPoolSize',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateDescriptorPool'
 data VkDescriptorPoolCreateInfo = VkDescriptorPoolCreateInfo
-  { -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkDescriptorPoolCreateFlagBits' specifying
+  -- certain supported operations on the pool.
   vkFlags :: VkDescriptorPoolCreateFlags
-  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkMaxSets"
+  , -- | @maxSets@ is the maximum number of descriptor sets that /can/ be
+  -- allocated from the pool.
   vkMaxSets :: Word32
-  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkPoolSizeCount"
+  , -- | @poolSizeCount@ is the number of elements in @pPoolSizes@.
   vkPoolSizeCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkPPoolSizes"
+  , -- | @pPoolSizes@ is a pointer to an array of @VkDescriptorPoolSize@
+  -- structures, each containing a descriptor type and number of descriptors
+  -- of that type to be allocated in the pool.
   vkPPoolSizes :: Ptr VkDescriptorPoolSize
   }
   deriving (Eq, Show)
@@ -1648,16 +1742,15 @@
 -- | VkDescriptorSetAllocateInfo - Structure specifying the allocation
 -- parameters for descriptor sets
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
--- -   @descriptorSetCount@ /must/ not be greater than the number of sets
---     that are currently available for allocation in @descriptorPool@
+-- -   Each element of @pSetLayouts@ /must/ not have been created with
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@ set
 --
--- -   @descriptorPool@ /must/ have enough free descriptor capacity
---     remaining to allocate the descriptor sets of the specified layouts
+-- -   If any element of @pSetLayouts@ was created with the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set, @descriptorPool@ /must/ have been created with the
+--     @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ flag set
 --
 -- == Valid Usage (Implicit)
 --
@@ -1677,22 +1770,23 @@
 --     have been created, allocated, or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPool',
 -- 'Graphics.Vulkan.Core10.PipelineLayout.VkDescriptorSetLayout',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkAllocateDescriptorSets'
 data VkDescriptorSetAllocateInfo = VkDescriptorSetAllocateInfo
-  { -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkDescriptorPool"
+  , -- | @descriptorPool@ is the pool which the sets will be allocated from.
   vkDescriptorPool :: VkDescriptorPool
-  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkDescriptorSetCount"
+  , -- | @descriptorSetCount@ determines the number of descriptor sets to be
+  -- allocated from the pool.
   vkDescriptorSetCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkPSetLayouts"
+  , -- | @pSetLayouts@ is an array of descriptor set layouts, with each member
+  -- specifying how the corresponding descriptor set is allocated.
   vkPSetLayouts :: Ptr VkDescriptorSetLayout
   }
   deriving (Eq, Show)
@@ -1714,26 +1808,22 @@
 -- VkDescriptorSetLayoutCreateFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkDescriptorSetLayoutCreateFlags@ is a bitmask type for setting a mask
 -- of zero or more 'VkDescriptorSetLayoutCreateFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSetLayoutCreateFlagBits', 'VkDescriptorSetLayoutCreateInfo'
 type VkDescriptorSetLayoutCreateFlags = VkDescriptorSetLayoutCreateFlagBits
 -- | VkDescriptorPoolCreateFlags - Bitmask of VkDescriptorPoolCreateFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkDescriptorPoolCreateFlags@ is a bitmask type for setting a mask of
 -- zero or more 'VkDescriptorPoolCreateFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorPoolCreateFlagBits', 'VkDescriptorPoolCreateInfo'
 type VkDescriptorPoolCreateFlags = VkDescriptorPoolCreateFlagBits
diff --git a/src/Graphics/Vulkan/Core10/Device.hs b/src/Graphics/Vulkan/Core10/Device.hs
--- a/src/Graphics/Vulkan/Core10/Device.hs
+++ b/src/Graphics/Vulkan/Core10/Device.hs
@@ -74,13 +74,11 @@
 -- | VkDeviceCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkDeviceCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceCreateInfo'
 newtype VkDeviceCreateFlags = VkDeviceCreateFlags VkFlags
@@ -106,7 +104,6 @@
 -- | VkDeviceQueueCreateFlagBits - Bitmask specifying behavior of the queue
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceQueueCreateFlags'
 newtype VkDeviceQueueCreateFlagBits = VkDeviceQueueCreateFlagBits VkFlags
@@ -132,23 +129,23 @@
 -- | vkCreateDevice - Create a new device instance
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ /must/ be one of the device handles returned from a
---     call to @vkEnumeratePhysicalDevices@ (see
---     <{html_spec_relative}#devsandqueues-physical-device-enumeration Physical Device Enumeration>).
+--     call to @vkEnumeratePhysicalDevices@ (see [Physical Device
+--     Enumeration](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-physical-device-enumeration)).
 --
 -- -   @pCreateInfo@ is a pointer to a 'VkDeviceCreateInfo' structure
 --     containing information about how to create the device.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pDevice@ points to a handle in which the created @VkDevice@ is
 --     returned.
 --
 -- = Description
--- #_description#
 --
 -- @vkCreateDevice@ verifies that extensions and features requested in the
 -- @ppEnabledExtensionNames@ and @pEnabledFeatures@ members of
@@ -174,8 +171,8 @@
 --
 -- == Valid Usage
 --
--- -   All
---     <{html_spec_relative}#extended-functionality-extensions-dependencies required extensions>
+-- -   All [required
+--     extensions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#extended-functionality-extensions-dependencies)
 --     for each extension in the
 --     'VkDeviceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
 --     present in that list.
@@ -194,10 +191,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -213,7 +210,6 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -223,15 +219,15 @@
 -- | vkDestroyDevice - Destroy a logical device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- = Description
--- #_description#
 --
 -- To ensure that no work is active on the device,
 -- 'Graphics.Vulkan.Core10.Queue.vkDeviceWaitIdle' /can/ be used to gate
@@ -271,7 +267,6 @@
 -- -   Host access to @device@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -279,9 +274,6 @@
 -- | VkDeviceQueueCreateInfo - Structure specifying parameters of a newly
 -- created device queue
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
@@ -311,22 +303,29 @@
 -- -   @queueCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceCreateInfo', 'VkDeviceQueueCreateFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceQueueCreateInfo = VkDeviceQueueCreateInfo
-  { -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkDeviceQueueCreateFlags
-  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkQueueFamilyIndex"
+  , -- | @queueFamilyIndex@ is an unsigned integer indicating the index of the
+  -- queue family to create on this device. This index corresponds to the
+  -- index of an element of the @pQueueFamilyProperties@ array that was
+  -- returned by @vkGetPhysicalDeviceQueueFamilyProperties@.
   vkQueueFamilyIndex :: Word32
-  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkQueueCount"
+  , -- | @queueCount@ is an unsigned integer specifying the number of queues to
+  -- create in the queue family indicated by @queueFamilyIndex@.
   vkQueueCount :: Word32
-  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkPQueuePriorities"
+  , -- | @pQueuePriorities@ is an array of @queueCount@ normalized floating point
+  -- values, specifying priorities of work that will be submitted to each
+  -- created queue. See [Queue
+  -- Priority](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-priority)
+  -- for more information.
   vkPQueuePriorities :: Ptr CFloat
   }
   deriving (Eq, Show)
@@ -349,14 +348,19 @@
 -- | VkDeviceCreateInfo - Structure specifying parameters of a newly created
 -- device
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The @queueFamilyIndex@ member of each element of @pQueueCreateInfos@
 --     /must/ be unique within @pQueueCreateInfos@
 --
+-- -   If the @pNext@ chain includes a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2'
+--     structure, then @pEnabledFeatures@ /must/ be @NULL@
+--
+-- -   @ppEnabledExtensionNames@ /must/ not contain both
+--     @{html_spec_relative}#VK_KHR_maintenance1@ and
+--     @{html_spec_relative}#VK_AMD_negative_viewport_height@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO@
@@ -395,31 +399,48 @@
 -- -   @queueCreateInfoCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceCreateFlags', 'VkDeviceQueueCreateInfo',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceFeatures',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateDevice'
 data VkDeviceCreateInfo = VkDeviceCreateInfo
-  { -- No documentation found for Nested "VkDeviceCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkDeviceCreateFlags
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkQueueCreateInfoCount"
+  , -- | @queueCreateInfoCount@ is the unsigned integer size of the
+  -- @pQueueCreateInfos@ array. Refer to the [Queue
+  -- Creation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-queue-creation)
+  -- section below for further details.
   vkQueueCreateInfoCount :: Word32
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPQueueCreateInfos"
+  , -- | @pQueueCreateInfos@ is a pointer to an array of
+  -- 'VkDeviceQueueCreateInfo' structures describing the queues that are
+  -- requested to be created along with the logical device. Refer to the
+  -- [Queue
+  -- Creation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-queue-creation)
+  -- section below for further details.
   vkPQueueCreateInfos :: Ptr VkDeviceQueueCreateInfo
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkEnabledLayerCount"
+  , -- | @enabledLayerCount@ is deprecated and ignored.
   vkEnabledLayerCount :: Word32
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPPEnabledLayerNames"
+  , -- | @ppEnabledLayerNames@ is deprecated and ignored. See [Device Layer
+  -- Deprecation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#extended-functionality-device-layer-deprecation).
   vkPPEnabledLayerNames :: Ptr (Ptr CChar)
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkEnabledExtensionCount"
+  , -- | @enabledExtensionCount@ is the number of device extensions to enable.
   vkEnabledExtensionCount :: Word32
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPPEnabledExtensionNames"
+  , -- | @ppEnabledExtensionNames@ is a pointer to an array of
+  -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the
+  -- names of extensions to enable for the created device. See the
+  -- [Extensions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#extended-functionality-extensions)
+  -- section for further details.
   vkPPEnabledExtensionNames :: Ptr (Ptr CChar)
-  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPEnabledFeatures"
+  , -- | @pEnabledFeatures@ is @NULL@ or a pointer to a
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceFeatures'
+  -- structure that contains boolean indicators of all the features to be
+  -- enabled. Refer to the
+  -- [Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features)
+  -- section for further details.
   vkPEnabledFeatures :: Ptr VkPhysicalDeviceFeatures
   }
   deriving (Eq, Show)
@@ -450,13 +471,11 @@
 -- | VkDeviceQueueCreateFlags - Bitmask of VkDeviceQueueCreateFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkDeviceQueueCreateFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkDeviceQueueCreateFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceQueueCreateFlagBits', 'VkDeviceQueueCreateInfo',
 -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkDeviceQueueInfo2'
diff --git a/src/Graphics/Vulkan/Core10/DeviceInitialization.hs b/src/Graphics/Vulkan/Core10/DeviceInitialization.hs
--- a/src/Graphics/Vulkan/Core10/DeviceInitialization.hs
+++ b/src/Graphics/Vulkan/Core10/DeviceInitialization.hs
@@ -194,5059 +194,5218 @@
 -- | VkImageTiling - Specifies the tiling arrangement of data in an image
 --
 -- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'vkGetPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
-newtype VkImageTiling = VkImageTiling Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkImageTiling where
-  showsPrec _ VK_IMAGE_TILING_OPTIMAL = showString "VK_IMAGE_TILING_OPTIMAL"
-  showsPrec _ VK_IMAGE_TILING_LINEAR = showString "VK_IMAGE_TILING_LINEAR"
-  showsPrec p (VkImageTiling x) = showParen (p >= 11) (showString "VkImageTiling " . showsPrec 11 x)
-
-instance Read VkImageTiling where
-  readPrec = parens ( choose [ ("VK_IMAGE_TILING_OPTIMAL", pure VK_IMAGE_TILING_OPTIMAL)
-                             , ("VK_IMAGE_TILING_LINEAR",  pure VK_IMAGE_TILING_LINEAR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageTiling")
-                        v <- step readPrec
-                        pure (VkImageTiling v)
-                        )
-                    )
-
--- | @VK_IMAGE_TILING_OPTIMAL@ specifies optimal tiling (texels are laid out
--- in an implementation-dependent arrangement, for more optimal memory
--- access).
-pattern VK_IMAGE_TILING_OPTIMAL :: VkImageTiling
-pattern VK_IMAGE_TILING_OPTIMAL = VkImageTiling 0
-
--- | @VK_IMAGE_TILING_LINEAR@ specifies linear tiling (texels are laid out in
--- memory in row-major order, possibly with some padding on each row).
-pattern VK_IMAGE_TILING_LINEAR :: VkImageTiling
-pattern VK_IMAGE_TILING_LINEAR = VkImageTiling 1
--- ** VkImageType
-
--- | VkImageType - Specifies the type of an image object
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'vkGetPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
-newtype VkImageType = VkImageType Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkImageType where
-  showsPrec _ VK_IMAGE_TYPE_1D = showString "VK_IMAGE_TYPE_1D"
-  showsPrec _ VK_IMAGE_TYPE_2D = showString "VK_IMAGE_TYPE_2D"
-  showsPrec _ VK_IMAGE_TYPE_3D = showString "VK_IMAGE_TYPE_3D"
-  showsPrec p (VkImageType x) = showParen (p >= 11) (showString "VkImageType " . showsPrec 11 x)
-
-instance Read VkImageType where
-  readPrec = parens ( choose [ ("VK_IMAGE_TYPE_1D", pure VK_IMAGE_TYPE_1D)
-                             , ("VK_IMAGE_TYPE_2D", pure VK_IMAGE_TYPE_2D)
-                             , ("VK_IMAGE_TYPE_3D", pure VK_IMAGE_TYPE_3D)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageType")
-                        v <- step readPrec
-                        pure (VkImageType v)
-                        )
-                    )
-
--- | @VK_IMAGE_TYPE_1D@ specifies a one-dimensional image.
-pattern VK_IMAGE_TYPE_1D :: VkImageType
-pattern VK_IMAGE_TYPE_1D = VkImageType 0
-
--- | @VK_IMAGE_TYPE_2D@ specifies a two-dimensional image.
-pattern VK_IMAGE_TYPE_2D :: VkImageType
-pattern VK_IMAGE_TYPE_2D = VkImageType 1
-
--- | @VK_IMAGE_TYPE_3D@ specifies a three-dimensional image.
-pattern VK_IMAGE_TYPE_3D :: VkImageType
-pattern VK_IMAGE_TYPE_3D = VkImageType 2
--- ** VkPhysicalDeviceType
-
--- | VkPhysicalDeviceType - Supported physical device types
---
--- = Description
--- #_description#
---
--- -   @VK_PHYSICAL_DEVICE_TYPE_OTHER@ - the device does not match any
---     other available types.
---
--- -   @VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU@ - the device is typically
---     one embedded in or tightly coupled with the host.
---
--- -   @VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU@ - the device is typically a
---     separate processor connected to the host via an interlink.
---
--- -   @VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU@ - the device is typically a
---     virtual node in a virtualization environment.
---
--- -   @VK_PHYSICAL_DEVICE_TYPE_CPU@ - the device is typically running on
---     the same processors as the host.
---
--- The physical device type is advertised for informational purposes only,
--- and does not directly affect the operation of the system. However, the
--- device type /may/ correlate with other advertised properties or
--- capabilities of the system, such as how many memory heaps there are.
---
--- = See Also
--- #_see_also#
---
--- 'VkPhysicalDeviceProperties'
-newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkPhysicalDeviceType where
-  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_OTHER = showString "VK_PHYSICAL_DEVICE_TYPE_OTHER"
-  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
-  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
-  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
-  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_CPU = showString "VK_PHYSICAL_DEVICE_TYPE_CPU"
-  showsPrec p (VkPhysicalDeviceType x) = showParen (p >= 11) (showString "VkPhysicalDeviceType " . showsPrec 11 x)
-
-instance Read VkPhysicalDeviceType where
-  readPrec = parens ( choose [ ("VK_PHYSICAL_DEVICE_TYPE_OTHER",          pure VK_PHYSICAL_DEVICE_TYPE_OTHER)
-                             , ("VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU", pure VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU)
-                             , ("VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU",   pure VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
-                             , ("VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU",    pure VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU)
-                             , ("VK_PHYSICAL_DEVICE_TYPE_CPU",            pure VK_PHYSICAL_DEVICE_TYPE_CPU)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPhysicalDeviceType")
-                        v <- step readPrec
-                        pure (VkPhysicalDeviceType v)
-                        )
-                    )
-
--- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_OTHER"
-pattern VK_PHYSICAL_DEVICE_TYPE_OTHER :: VkPhysicalDeviceType
-pattern VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0
-
--- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
-pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU :: VkPhysicalDeviceType
-pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = VkPhysicalDeviceType 1
-
--- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
-pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU :: VkPhysicalDeviceType
-pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = VkPhysicalDeviceType 2
-
--- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
-pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU :: VkPhysicalDeviceType
-pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = VkPhysicalDeviceType 3
-
--- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_CPU"
-pattern VK_PHYSICAL_DEVICE_TYPE_CPU :: VkPhysicalDeviceType
-pattern VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4
--- ** VkSystemAllocationScope
-
--- | VkSystemAllocationScope - Allocation scope
---
--- = Description
--- #_description#
---
--- -   @VK_SYSTEM_ALLOCATION_SCOPE_COMMAND@ specifies that the allocation
---     is scoped to the duration of the Vulkan command.
---
--- -   @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@ specifies that the allocation is
---     scoped to the lifetime of the Vulkan object that is being created or
---     used.
---
--- -   @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@ specifies that the allocation is
---     scoped to the lifetime of a @VkPipelineCache@ object.
---
--- -   @VK_SYSTEM_ALLOCATION_SCOPE_DEVICE@ specifies that the allocation is
---     scoped to the lifetime of the Vulkan device.
---
--- -   @VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE@ specifies that the allocation
---     is scoped to the lifetime of the Vulkan instance.
---
--- Most Vulkan commands operate on a single object, or there is a sole
--- object that is being created or manipulated. When an allocation uses an
--- allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@ or
--- @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@, the allocation is scoped to the
--- object being created or manipulated.
---
--- When an implementation requires host memory, it will make callbacks to
--- the application using the most specific allocator and allocation scope
--- available:
---
--- -   If an allocation is scoped to the duration of a command, the
---     allocator will use the @VK_SYSTEM_ALLOCATION_SCOPE_COMMAND@
---     allocation scope. The most specific allocator available is used: if
---     the object being created or manipulated has an allocator, that
---     object’s allocator will be used, else if the parent @VkDevice@ has
---     an allocator it will be used, else if the parent @VkInstance@ has an
---     allocator it will be used. Else,
---
--- -   If an allocation is associated with an object of type
---     @VkPipelineCache@, the allocator will use the
---     @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@ allocation scope. The most
---     specific allocator available is used (cache, else device, else
---     instance). Else,
---
--- -   If an allocation is scoped to the lifetime of an object, that object
---     is being created or manipulated by the command, and that object’s
---     type is not @VkDevice@ or @VkInstance@, the allocator will use an
---     allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@. The most
---     specific allocator available is used (object, else device, else
---     instance). Else,
---
--- -   If an allocation is scoped to the lifetime of a device, the
---     allocator will use an allocation scope of
---     @VK_SYSTEM_ALLOCATION_SCOPE_DEVICE@. The most specific allocator
---     available is used (device, else instance). Else,
---
--- -   If the allocation is scoped to the lifetime of an instance and the
---     instance has an allocator, its allocator will be used with an
---     allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE@.
---
--- -   Otherwise an implementation will allocate memory through an
---     alternative mechanism that is unspecified.
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks'
-newtype VkSystemAllocationScope = VkSystemAllocationScope Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkSystemAllocationScope where
-  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = showString "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"
-  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = showString "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"
-  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_CACHE = showString "VK_SYSTEM_ALLOCATION_SCOPE_CACHE"
-  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = showString "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"
-  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = showString "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"
-  showsPrec p (VkSystemAllocationScope x) = showParen (p >= 11) (showString "VkSystemAllocationScope " . showsPrec 11 x)
-
-instance Read VkSystemAllocationScope where
-  readPrec = parens ( choose [ ("VK_SYSTEM_ALLOCATION_SCOPE_COMMAND",  pure VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)
-                             , ("VK_SYSTEM_ALLOCATION_SCOPE_OBJECT",   pure VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)
-                             , ("VK_SYSTEM_ALLOCATION_SCOPE_CACHE",    pure VK_SYSTEM_ALLOCATION_SCOPE_CACHE)
-                             , ("VK_SYSTEM_ALLOCATION_SCOPE_DEVICE",   pure VK_SYSTEM_ALLOCATION_SCOPE_DEVICE)
-                             , ("VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE", pure VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSystemAllocationScope")
-                        v <- step readPrec
-                        pure (VkSystemAllocationScope v)
-                        )
-                    )
-
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"
-pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND :: VkSystemAllocationScope
-pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = VkSystemAllocationScope 0
-
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"
-pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT :: VkSystemAllocationScope
-pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = VkSystemAllocationScope 1
-
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_CACHE"
-pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE :: VkSystemAllocationScope
-pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE = VkSystemAllocationScope 2
-
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"
-pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE :: VkSystemAllocationScope
-pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = VkSystemAllocationScope 3
-
--- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"
-pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE :: VkSystemAllocationScope
-pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = VkSystemAllocationScope 4
--- ** VkInternalAllocationType
-
--- | VkInternalAllocationType - Allocation type
---
--- = See Also
--- #_see_also#
---
--- 'PFN_vkInternalAllocationNotification', 'PFN_vkInternalFreeNotification'
-newtype VkInternalAllocationType = VkInternalAllocationType Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkInternalAllocationType where
-  showsPrec _ VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = showString "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE"
-  showsPrec p (VkInternalAllocationType x) = showParen (p >= 11) (showString "VkInternalAllocationType " . showsPrec 11 x)
-
-instance Read VkInternalAllocationType where
-  readPrec = parens ( choose [ ("VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE", pure VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkInternalAllocationType")
-                        v <- step readPrec
-                        pure (VkInternalAllocationType v)
-                        )
-                    )
-
--- | @VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE@ specifies that the allocation
--- is intended for execution by the host.
-pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE :: VkInternalAllocationType
-pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = VkInternalAllocationType 0
--- ** VkInstanceCreateFlags
-
--- | VkInstanceCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkInstanceCreateFlags@ is a bitmask type for setting a mask, but is
--- currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkInstanceCreateInfo'
-newtype VkInstanceCreateFlags = VkInstanceCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkInstanceCreateFlags where
-  
-  showsPrec p (VkInstanceCreateFlags x) = showParen (p >= 11) (showString "VkInstanceCreateFlags " . showsPrec 11 x)
-
-instance Read VkInstanceCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkInstanceCreateFlags")
-                        v <- step readPrec
-                        pure (VkInstanceCreateFlags v)
-                        )
-                    )
-
-
--- ** VkQueueFlagBits
-
--- | VkQueueFlagBits - Bitmask specifying capabilities of queues in a queue
--- family
---
--- = Description
--- #_description#
---
--- -   @VK_QUEUE_GRAPHICS_BIT@ specifies that queues in this queue family
---     support graphics operations.
---
--- -   @VK_QUEUE_COMPUTE_BIT@ specifies that queues in this queue family
---     support compute operations.
---
--- -   @VK_QUEUE_TRANSFER_BIT@ specifies that queues in this queue family
---     support transfer operations.
---
--- -   @VK_QUEUE_SPARSE_BINDING_BIT@ specifies that queues in this queue
---     family support sparse memory management operations (see
---     <{html_spec_relative}#sparsememory Sparse Resources>). If any of the
---     sparse resource features are enabled, then at least one queue family
---     /must/ support this bit.
---
--- If an implementation exposes any queue family that supports graphics
--- operations, at least one queue family of at least one physical device
--- exposed by the implementation /must/ support both graphics and compute
--- operations.
---
--- __Note__
---
--- All commands that are allowed on a queue that supports transfer
--- operations are also allowed on a queue that supports either graphics or
--- compute operations. Thus, if the capabilities of a queue family include
--- @VK_QUEUE_GRAPHICS_BIT@ or @VK_QUEUE_COMPUTE_BIT@, then reporting the
--- @VK_QUEUE_TRANSFER_BIT@ capability separately for that queue family is
--- /optional/.
---
--- For further details see
--- <{html_spec_relative}#devsandqueues-queues Queues>.
---
--- = See Also
--- #_see_also#
---
--- 'VkQueueFlags'
-newtype VkQueueFlagBits = VkQueueFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkQueueFlagBits where
-  showsPrec _ VK_QUEUE_GRAPHICS_BIT = showString "VK_QUEUE_GRAPHICS_BIT"
-  showsPrec _ VK_QUEUE_COMPUTE_BIT = showString "VK_QUEUE_COMPUTE_BIT"
-  showsPrec _ VK_QUEUE_TRANSFER_BIT = showString "VK_QUEUE_TRANSFER_BIT"
-  showsPrec _ VK_QUEUE_SPARSE_BINDING_BIT = showString "VK_QUEUE_SPARSE_BINDING_BIT"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkQueueFlagBits 0x00000010) = showString "VK_QUEUE_PROTECTED_BIT"
-  showsPrec p (VkQueueFlagBits x) = showParen (p >= 11) (showString "VkQueueFlagBits " . showsPrec 11 x)
-
-instance Read VkQueueFlagBits where
-  readPrec = parens ( choose [ ("VK_QUEUE_GRAPHICS_BIT",       pure VK_QUEUE_GRAPHICS_BIT)
-                             , ("VK_QUEUE_COMPUTE_BIT",        pure VK_QUEUE_COMPUTE_BIT)
-                             , ("VK_QUEUE_TRANSFER_BIT",       pure VK_QUEUE_TRANSFER_BIT)
-                             , ("VK_QUEUE_SPARSE_BINDING_BIT", pure VK_QUEUE_SPARSE_BINDING_BIT)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_QUEUE_PROTECTED_BIT", pure (VkQueueFlagBits 0x00000010))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkQueueFlagBits")
-                        v <- step readPrec
-                        pure (VkQueueFlagBits v)
-                        )
-                    )
-
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_GRAPHICS_BIT"
-pattern VK_QUEUE_GRAPHICS_BIT :: VkQueueFlagBits
-pattern VK_QUEUE_GRAPHICS_BIT = VkQueueFlagBits 0x00000001
-
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_COMPUTE_BIT"
-pattern VK_QUEUE_COMPUTE_BIT :: VkQueueFlagBits
-pattern VK_QUEUE_COMPUTE_BIT = VkQueueFlagBits 0x00000002
-
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_TRANSFER_BIT"
-pattern VK_QUEUE_TRANSFER_BIT :: VkQueueFlagBits
-pattern VK_QUEUE_TRANSFER_BIT = VkQueueFlagBits 0x00000004
-
--- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_SPARSE_BINDING_BIT"
-pattern VK_QUEUE_SPARSE_BINDING_BIT :: VkQueueFlagBits
-pattern VK_QUEUE_SPARSE_BINDING_BIT = VkQueueFlagBits 0x00000008
--- ** VkMemoryPropertyFlagBits
-
--- | VkMemoryPropertyFlagBits - Bitmask specifying properties for a memory
--- type
---
--- = See Also
--- #_see_also#
---
--- 'VkMemoryPropertyFlags'
-newtype VkMemoryPropertyFlagBits = VkMemoryPropertyFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkMemoryPropertyFlagBits where
-  showsPrec _ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = showString "VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"
-  showsPrec _ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = showString "VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"
-  showsPrec _ VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = showString "VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"
-  showsPrec _ VK_MEMORY_PROPERTY_HOST_CACHED_BIT = showString "VK_MEMORY_PROPERTY_HOST_CACHED_BIT"
-  showsPrec _ VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = showString "VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkMemoryPropertyFlagBits 0x00000020) = showString "VK_MEMORY_PROPERTY_PROTECTED_BIT"
-  showsPrec p (VkMemoryPropertyFlagBits x) = showParen (p >= 11) (showString "VkMemoryPropertyFlagBits " . showsPrec 11 x)
-
-instance Read VkMemoryPropertyFlagBits where
-  readPrec = parens ( choose [ ("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT",     pure VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
-                             , ("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT",     pure VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
-                             , ("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT",    pure VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
-                             , ("VK_MEMORY_PROPERTY_HOST_CACHED_BIT",      pure VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
-                             , ("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT", pure VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_MEMORY_PROPERTY_PROTECTED_BIT", pure (VkMemoryPropertyFlagBits 0x00000020))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkMemoryPropertyFlagBits")
-                        v <- step readPrec
-                        pure (VkMemoryPropertyFlagBits v)
-                        )
-                    )
-
--- | @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ bit specifies that memory
--- allocated with this type is the most efficient for device access. This
--- property will be set if and only if the memory type belongs to a heap
--- with the @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ set.
-pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT :: VkMemoryPropertyFlagBits
-pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = VkMemoryPropertyFlagBits 0x00000001
-
--- | @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ bit specifies that memory
--- allocated with this type /can/ be mapped for host access using
--- 'Graphics.Vulkan.Core10.Memory.vkMapMemory'.
-pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT :: VkMemoryPropertyFlagBits
-pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = VkMemoryPropertyFlagBits 0x00000002
-
--- | @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ bit specifies that the host cache
--- management commands
--- 'Graphics.Vulkan.Core10.Memory.vkFlushMappedMemoryRanges' and
--- 'Graphics.Vulkan.Core10.Memory.vkInvalidateMappedMemoryRanges' are not
--- needed to flush host writes to the device or make device writes visible
--- to the host, respectively.
-pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT :: VkMemoryPropertyFlagBits
-pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = VkMemoryPropertyFlagBits 0x00000004
-
--- | @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ bit specifies that memory allocated
--- with this type is cached on the host. Host memory accesses to uncached
--- memory are slower than to cached memory, however uncached memory is
--- always host coherent.
-pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT :: VkMemoryPropertyFlagBits
-pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT = VkMemoryPropertyFlagBits 0x00000008
-
--- | @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ bit specifies that the memory
--- type only allows device access to the memory. Memory types /must/ not
--- have both @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ and
--- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ set. Additionally, the object’s
--- backing memory /may/ be provided by the implementation lazily as
--- specified in
--- <{html_spec_relative}#memory-device-lazy_allocation Lazily Allocated Memory>.
-pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT :: VkMemoryPropertyFlagBits
-pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = VkMemoryPropertyFlagBits 0x00000010
--- ** VkMemoryHeapFlagBits
-
--- | VkMemoryHeapFlagBits - Bitmask specifying attribute flags for a heap
---
--- = See Also
--- #_see_also#
---
--- 'VkMemoryHeapFlags'
-newtype VkMemoryHeapFlagBits = VkMemoryHeapFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkMemoryHeapFlagBits where
-  showsPrec _ VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = showString "VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkMemoryHeapFlagBits 0x00000002) = showString "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"
-  showsPrec p (VkMemoryHeapFlagBits x) = showParen (p >= 11) (showString "VkMemoryHeapFlagBits " . showsPrec 11 x)
-
-instance Read VkMemoryHeapFlagBits where
-  readPrec = parens ( choose [ ("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT", pure VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_MEMORY_HEAP_MULTI_INSTANCE_BIT", pure (VkMemoryHeapFlagBits 0x00000002))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkMemoryHeapFlagBits")
-                        v <- step readPrec
-                        pure (VkMemoryHeapFlagBits v)
-                        )
-                    )
-
--- | @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ specifies that the heap corresponds to
--- device local memory. Device local memory /may/ have different
--- performance characteristics than host local memory, and /may/ support
--- different memory property flags.
-pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT :: VkMemoryHeapFlagBits
-pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = VkMemoryHeapFlagBits 0x00000001
--- ** VkImageUsageFlagBits
-
--- | VkImageUsageFlagBits - Bitmask specifying intended usage of an image
---
--- = See Also
--- #_see_also#
---
--- 'VkImageUsageFlags'
-newtype VkImageUsageFlagBits = VkImageUsageFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkImageUsageFlagBits where
-  showsPrec _ VK_IMAGE_USAGE_TRANSFER_SRC_BIT = showString "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"
-  showsPrec _ VK_IMAGE_USAGE_TRANSFER_DST_BIT = showString "VK_IMAGE_USAGE_TRANSFER_DST_BIT"
-  showsPrec _ VK_IMAGE_USAGE_SAMPLED_BIT = showString "VK_IMAGE_USAGE_SAMPLED_BIT"
-  showsPrec _ VK_IMAGE_USAGE_STORAGE_BIT = showString "VK_IMAGE_USAGE_STORAGE_BIT"
-  showsPrec _ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"
-  showsPrec _ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"
-  showsPrec _ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"
-  showsPrec _ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"
-  showsPrec p (VkImageUsageFlagBits x) = showParen (p >= 11) (showString "VkImageUsageFlagBits " . showsPrec 11 x)
-
-instance Read VkImageUsageFlagBits where
-  readPrec = parens ( choose [ ("VK_IMAGE_USAGE_TRANSFER_SRC_BIT",             pure VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
-                             , ("VK_IMAGE_USAGE_TRANSFER_DST_BIT",             pure VK_IMAGE_USAGE_TRANSFER_DST_BIT)
-                             , ("VK_IMAGE_USAGE_SAMPLED_BIT",                  pure VK_IMAGE_USAGE_SAMPLED_BIT)
-                             , ("VK_IMAGE_USAGE_STORAGE_BIT",                  pure VK_IMAGE_USAGE_STORAGE_BIT)
-                             , ("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT",         pure VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
-                             , ("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", pure VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
-                             , ("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT",     pure VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
-                             , ("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT",         pure VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageUsageFlagBits")
-                        v <- step readPrec
-                        pure (VkImageUsageFlagBits v)
-                        )
-                    )
-
--- | @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ specifies that the image /can/ be used
--- as the source of a transfer command.
-pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT = VkImageUsageFlagBits 0x00000001
-
--- | @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ specifies that the image /can/ be used
--- as the destination of a transfer command.
-pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT = VkImageUsageFlagBits 0x00000002
-
--- | @VK_IMAGE_USAGE_SAMPLED_BIT@ specifies that the image /can/ be used to
--- create a @VkImageView@ suitable for occupying a @VkDescriptorSet@ slot
--- either of type @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ or
--- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, and be sampled by a shader.
-pattern VK_IMAGE_USAGE_SAMPLED_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_SAMPLED_BIT = VkImageUsageFlagBits 0x00000004
-
--- | @VK_IMAGE_USAGE_STORAGE_BIT@ specifies that the image /can/ be used to
--- create a @VkImageView@ suitable for occupying a @VkDescriptorSet@ slot
--- of type @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@.
-pattern VK_IMAGE_USAGE_STORAGE_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_STORAGE_BIT = VkImageUsageFlagBits 0x00000008
-
--- | @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ specifies that the image /can/ be
--- used to create a @VkImageView@ suitable for use as a color or resolve
--- attachment in a @VkFramebuffer@.
-pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000010
-
--- | @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ specifies that the image
--- /can/ be used to create a @VkImageView@ suitable for use as a
--- depth\/stencil attachment in a @VkFramebuffer@.
-pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000020
-
--- | @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@ specifies that the memory
--- bound to this image will have been allocated with the
--- @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ (see
--- <{html_spec_relative}#memory {html_spec_relative}#memory> for more
--- detail). This bit /can/ be set for any image that /can/ be used to
--- create a @VkImageView@ suitable for use as a color, resolve,
--- depth\/stencil, or input attachment.
-pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000040
-
--- | @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ specifies that the image /can/ be
--- used to create a @VkImageView@ suitable for occupying @VkDescriptorSet@
--- slot of type @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@; be read from a
--- shader as an input attachment; and be used as an input attachment in a
--- framebuffer.
-pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT :: VkImageUsageFlagBits
-pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000080
--- ** VkImageCreateFlagBits
-
--- | VkImageCreateFlagBits - Bitmask specifying additional parameters of an
--- image
---
--- = Description
--- #_description#
---
--- -   @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ specifies that the image will
---     be backed using sparse memory binding.
---
--- -   @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ specifies that the image
---     /can/ be partially backed using sparse memory binding. Images
---     created with this flag /must/ also be created with the
---     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ flag.
---
--- -   @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ specifies that the image will
---     be backed using sparse memory binding with memory ranges that might
---     also simultaneously be backing another image (or another portion of
---     the same image). Images created with this flag /must/ also be
---     created with the @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ flag
---
--- -   @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ specifies that the image /can/
---     be used to create a @VkImageView@ with a different format from the
---     image.
---
--- -   @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ specifies that the image /can/
---     be used to create a @VkImageView@ of type @VK_IMAGE_VIEW_TYPE_CUBE@
---     or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@.
---
--- See
--- <{html_spec_relative}#sparsememory-sparseresourcefeatures Sparse Resource Features>
--- and
--- <{html_spec_relative}#sparsememory-physicalfeatures Sparse Physical Device Features>
--- for more details.
---
--- = See Also
--- #_see_also#
---
--- 'VkImageCreateFlags'
-newtype VkImageCreateFlagBits = VkImageCreateFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkImageCreateFlagBits where
-  showsPrec _ VK_IMAGE_CREATE_SPARSE_BINDING_BIT = showString "VK_IMAGE_CREATE_SPARSE_BINDING_BIT"
-  showsPrec _ VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = showString "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"
-  showsPrec _ VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = showString "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"
-  showsPrec _ VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = showString "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"
-  showsPrec _ VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = showString "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkImageCreateFlagBits 0x00000400) = showString "VK_IMAGE_CREATE_ALIAS_BIT"
-  showsPrec _ (VkImageCreateFlagBits 0x00000040) = showString "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"
-  showsPrec _ (VkImageCreateFlagBits 0x00000020) = showString "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"
-  showsPrec _ (VkImageCreateFlagBits 0x00000080) = showString "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"
-  showsPrec _ (VkImageCreateFlagBits 0x00000100) = showString "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"
-  showsPrec _ (VkImageCreateFlagBits 0x00000800) = showString "VK_IMAGE_CREATE_PROTECTED_BIT"
-  showsPrec _ (VkImageCreateFlagBits 0x00000200) = showString "VK_IMAGE_CREATE_DISJOINT_BIT"
-  showsPrec _ (VkImageCreateFlagBits 0x00001000) = showString "VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"
-  showsPrec p (VkImageCreateFlagBits x) = showParen (p >= 11) (showString "VkImageCreateFlagBits " . showsPrec 11 x)
-
-instance Read VkImageCreateFlagBits where
-  readPrec = parens ( choose [ ("VK_IMAGE_CREATE_SPARSE_BINDING_BIT",   pure VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
-                             , ("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", pure VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
-                             , ("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT",   pure VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
-                             , ("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT",   pure VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
-                             , ("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT",  pure VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_IMAGE_CREATE_ALIAS_BIT",                                 pure (VkImageCreateFlagBits 0x00000400))
-                             , ("VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT",           pure (VkImageCreateFlagBits 0x00000040))
-                             , ("VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT",                   pure (VkImageCreateFlagBits 0x00000020))
-                             , ("VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT",           pure (VkImageCreateFlagBits 0x00000080))
-                             , ("VK_IMAGE_CREATE_EXTENDED_USAGE_BIT",                        pure (VkImageCreateFlagBits 0x00000100))
-                             , ("VK_IMAGE_CREATE_PROTECTED_BIT",                             pure (VkImageCreateFlagBits 0x00000800))
-                             , ("VK_IMAGE_CREATE_DISJOINT_BIT",                              pure (VkImageCreateFlagBits 0x00000200))
-                             , ("VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT", pure (VkImageCreateFlagBits 0x00001000))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkImageCreateFlagBits v)
-                        )
-                    )
-
--- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_BINDING_BIT"
-pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT :: VkImageCreateFlagBits
-pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT = VkImageCreateFlagBits 0x00000001
-
--- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"
-pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT :: VkImageCreateFlagBits
-pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = VkImageCreateFlagBits 0x00000002
-
--- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"
-pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT :: VkImageCreateFlagBits
-pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = VkImageCreateFlagBits 0x00000004
-
--- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"
-pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT :: VkImageCreateFlagBits
-pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = VkImageCreateFlagBits 0x00000008
-
--- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"
-pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT :: VkImageCreateFlagBits
-pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = VkImageCreateFlagBits 0x00000010
--- ** VkFormatFeatureFlagBits
-
--- | VkFormatFeatureFlagBits - Bitmask specifying features supported by a
--- buffer
---
--- = Description
--- #_description#
---
--- The following bits /may/ be set in @linearTilingFeatures@ and
--- @optimalTilingFeatures@, specifying that the features are supported by
--- <{html_spec_relative}#VkImage images> or
--- <{html_spec_relative}#VkImageView image views> created with the queried
--- 'vkGetPhysicalDeviceFormatProperties'::@format@:
---
--- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ specifies that an image view
---     /can/ be
---     <{html_spec_relative}#descriptorsets-sampledimage sampled from>.
---
--- -   @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@ specifies that an image view
---     /can/ be used as a
---     <{html_spec_relative}#descriptorsets-storageimage storage images>.
---
--- -   @VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT@ specifies that an image
---     view /can/ be used as storage image that supports atomic operations.
---
--- -   @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ specifies that an image
---     view /can/ be used as a framebuffer color attachment and as an input
---     attachment.
---
--- -   @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT@ specifies that an
---     image view /can/ be used as a framebuffer color attachment that
---     supports blending and as an input attachment.
---
--- -   @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@ specifies that an
---     image view /can/ be used as a framebuffer depth\/stencil attachment
---     and as an input attachment.
---
--- -   @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ specifies that an image /can/ be
---     used as @srcImage@ for the @vkCmdBlitImage@ command.
---
--- -   @VK_FORMAT_FEATURE_BLIT_DST_BIT@ specifies that an image /can/ be
---     used as @dstImage@ for the @vkCmdBlitImage@ command.
---
--- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ specifies that
---     if @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ is also set, an image view
---     /can/ be used with a sampler that has either of @magFilter@ or
---     @minFilter@ set to @VK_FILTER_LINEAR@, or @mipmapMode@ set to
---     @VK_SAMPLER_MIPMAP_MODE_LINEAR@. If @VK_FORMAT_FEATURE_BLIT_SRC_BIT@
---     is also set, an image can be used as the @srcImage@ to
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBlitImage' with a
---     @filter@ of @VK_FILTER_LINEAR@. This bit /must/ only be exposed for
---     formats that also support the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@
---     or @VK_FORMAT_FEATURE_BLIT_SRC_BIT@.
---
---     If the format being queried is a depth\/stencil format, this bit
---     only specifies that the depth aspect (not the stencil aspect) of an
---     image of this format supports linear filtering, and that linear
---     filtering of the depth aspect is supported whether depth compare is
---     enabled in the sampler or not. If this bit is not present, linear
---     filtering with depth compare disabled is unsupported and linear
---     filtering with depth compare enabled is supported, but /may/ compute
---     the filtered value in an implementation-dependent manner which
---     differs from the normal rules of linear filtering. The resulting
---     value /must/ be in the range [0,1] and /should/ be proportional to,
---     or a weighted average of, the number of comparison passes or
---     failures.
---
--- The following bits /may/ be set in @bufferFeatures@, specifying that the
--- features are supported by <{html_spec_relative}#VkBuffer buffers> or
--- <{html_spec_relative}#VkBufferView buffer views> created with the
--- queried 'vkGetPhysicalDeviceProperties'::@format@:
---
--- -   @VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT@ specifies that the
---     format /can/ be used to create a buffer view that /can/ be bound to
---     a @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ descriptor.
---
--- -   @VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT@ specifies that the
---     format /can/ be used to create a buffer view that /can/ be bound to
---     a @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ descriptor.
---
--- -   @VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT@ specifies that
---     atomic operations are supported on
---     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ with this format.
---
--- -   @VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT@ specifies that the format
---     /can/ be used as a vertex attribute format
---     (@VkVertexInputAttributeDescription@::@format@).
---
--- = See Also
--- #_see_also#
---
--- 'VkFormatFeatureFlags'
-newtype VkFormatFeatureFlagBits = VkFormatFeatureFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkFormatFeatureFlagBits where
-  showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = showString "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_BLIT_SRC_BIT = showString "VK_FORMAT_FEATURE_BLIT_SRC_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_BLIT_DST_BIT = showString "VK_FORMAT_FEATURE_BLIT_DST_BIT"
-  showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkFormatFeatureFlagBits 0x00004000) = showString "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00008000) = showString "VK_FORMAT_FEATURE_TRANSFER_DST_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00020000) = showString "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00040000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00080000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00100000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00200000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00400000) = showString "VK_FORMAT_FEATURE_DISJOINT_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00800000) = showString "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00002000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"
-  showsPrec _ (VkFormatFeatureFlagBits 0x00010000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT"
-  showsPrec p (VkFormatFeatureFlagBits x) = showParen (p >= 11) (showString "VkFormatFeatureFlagBits " . showsPrec 11 x)
-
-instance Read VkFormatFeatureFlagBits where
-  readPrec = parens ( choose [ ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT",               pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
-                             , ("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT",               pure VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
-                             , ("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT",        pure VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
-                             , ("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT",        pure VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
-                             , ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT",        pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
-                             , ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
-                             , ("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT",               pure VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
-                             , ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT",            pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
-                             , ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT",      pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
-                             , ("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT",    pure VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
-                             , ("VK_FORMAT_FEATURE_BLIT_SRC_BIT",                    pure VK_FORMAT_FEATURE_BLIT_SRC_BIT)
-                             , ("VK_FORMAT_FEATURE_BLIT_DST_BIT",                    pure VK_FORMAT_FEATURE_BLIT_DST_BIT)
-                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_FORMAT_FEATURE_TRANSFER_SRC_BIT",                                                            pure (VkFormatFeatureFlagBits 0x00004000))
-                             , ("VK_FORMAT_FEATURE_TRANSFER_DST_BIT",                                                            pure (VkFormatFeatureFlagBits 0x00008000))
-                             , ("VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT",                                                 pure (VkFormatFeatureFlagBits 0x00020000))
-                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT",                            pure (VkFormatFeatureFlagBits 0x00040000))
-                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT",           pure (VkFormatFeatureFlagBits 0x00080000))
-                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT",           pure (VkFormatFeatureFlagBits 0x00100000))
-                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT", pure (VkFormatFeatureFlagBits 0x00200000))
-                             , ("VK_FORMAT_FEATURE_DISJOINT_BIT",                                                                pure (VkFormatFeatureFlagBits 0x00400000))
-                             , ("VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT",                                                  pure (VkFormatFeatureFlagBits 0x00800000))
-                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG",                                          pure (VkFormatFeatureFlagBits 0x00002000))
-                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT",                                         pure (VkFormatFeatureFlagBits 0x00010000))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkFormatFeatureFlagBits")
-                        v <- step readPrec
-                        pure (VkFormatFeatureFlagBits v)
-                        )
-                    )
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"
-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = VkFormatFeatureFlagBits 0x00000001
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"
-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = VkFormatFeatureFlagBits 0x00000002
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"
-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = VkFormatFeatureFlagBits 0x00000004
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"
-pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000008
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"
-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000010
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"
-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = VkFormatFeatureFlagBits 0x00000020
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"
-pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000040
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"
-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x00000080
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"
-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = VkFormatFeatureFlagBits 0x00000100
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"
-pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x00000200
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_BLIT_SRC_BIT"
-pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT = VkFormatFeatureFlagBits 0x00000400
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_BLIT_DST_BIT"
-pattern VK_FORMAT_FEATURE_BLIT_DST_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_BLIT_DST_BIT = VkFormatFeatureFlagBits 0x00000800
-
--- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"
-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT :: VkFormatFeatureFlagBits
-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = VkFormatFeatureFlagBits 0x00001000
--- ** VkSampleCountFlagBits
-
--- | VkSampleCountFlagBits - Bitmask specifying sample counts supported for
--- an image used for storage operations
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription',
--- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo',
--- 'VkSampleCountFlags',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
-newtype VkSampleCountFlagBits = VkSampleCountFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkSampleCountFlagBits where
-  showsPrec _ VK_SAMPLE_COUNT_1_BIT = showString "VK_SAMPLE_COUNT_1_BIT"
-  showsPrec _ VK_SAMPLE_COUNT_2_BIT = showString "VK_SAMPLE_COUNT_2_BIT"
-  showsPrec _ VK_SAMPLE_COUNT_4_BIT = showString "VK_SAMPLE_COUNT_4_BIT"
-  showsPrec _ VK_SAMPLE_COUNT_8_BIT = showString "VK_SAMPLE_COUNT_8_BIT"
-  showsPrec _ VK_SAMPLE_COUNT_16_BIT = showString "VK_SAMPLE_COUNT_16_BIT"
-  showsPrec _ VK_SAMPLE_COUNT_32_BIT = showString "VK_SAMPLE_COUNT_32_BIT"
-  showsPrec _ VK_SAMPLE_COUNT_64_BIT = showString "VK_SAMPLE_COUNT_64_BIT"
-  showsPrec p (VkSampleCountFlagBits x) = showParen (p >= 11) (showString "VkSampleCountFlagBits " . showsPrec 11 x)
-
-instance Read VkSampleCountFlagBits where
-  readPrec = parens ( choose [ ("VK_SAMPLE_COUNT_1_BIT",  pure VK_SAMPLE_COUNT_1_BIT)
-                             , ("VK_SAMPLE_COUNT_2_BIT",  pure VK_SAMPLE_COUNT_2_BIT)
-                             , ("VK_SAMPLE_COUNT_4_BIT",  pure VK_SAMPLE_COUNT_4_BIT)
-                             , ("VK_SAMPLE_COUNT_8_BIT",  pure VK_SAMPLE_COUNT_8_BIT)
-                             , ("VK_SAMPLE_COUNT_16_BIT", pure VK_SAMPLE_COUNT_16_BIT)
-                             , ("VK_SAMPLE_COUNT_32_BIT", pure VK_SAMPLE_COUNT_32_BIT)
-                             , ("VK_SAMPLE_COUNT_64_BIT", pure VK_SAMPLE_COUNT_64_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSampleCountFlagBits")
-                        v <- step readPrec
-                        pure (VkSampleCountFlagBits v)
-                        )
-                    )
-
--- | @VK_SAMPLE_COUNT_1_BIT@ specifies an image with one sample per pixel.
-pattern VK_SAMPLE_COUNT_1_BIT :: VkSampleCountFlagBits
-pattern VK_SAMPLE_COUNT_1_BIT = VkSampleCountFlagBits 0x00000001
-
--- | @VK_SAMPLE_COUNT_2_BIT@ specifies an image with 2 samples per pixel.
-pattern VK_SAMPLE_COUNT_2_BIT :: VkSampleCountFlagBits
-pattern VK_SAMPLE_COUNT_2_BIT = VkSampleCountFlagBits 0x00000002
-
--- | @VK_SAMPLE_COUNT_4_BIT@ specifies an image with 4 samples per pixel.
-pattern VK_SAMPLE_COUNT_4_BIT :: VkSampleCountFlagBits
-pattern VK_SAMPLE_COUNT_4_BIT = VkSampleCountFlagBits 0x00000004
-
--- | @VK_SAMPLE_COUNT_8_BIT@ specifies an image with 8 samples per pixel.
-pattern VK_SAMPLE_COUNT_8_BIT :: VkSampleCountFlagBits
-pattern VK_SAMPLE_COUNT_8_BIT = VkSampleCountFlagBits 0x00000008
-
--- | @VK_SAMPLE_COUNT_16_BIT@ specifies an image with 16 samples per pixel.
-pattern VK_SAMPLE_COUNT_16_BIT :: VkSampleCountFlagBits
-pattern VK_SAMPLE_COUNT_16_BIT = VkSampleCountFlagBits 0x00000010
-
--- | @VK_SAMPLE_COUNT_32_BIT@ specifies an image with 32 samples per pixel.
-pattern VK_SAMPLE_COUNT_32_BIT :: VkSampleCountFlagBits
-pattern VK_SAMPLE_COUNT_32_BIT = VkSampleCountFlagBits 0x00000020
-
--- | @VK_SAMPLE_COUNT_64_BIT@ specifies an image with 64 samples per pixel.
-pattern VK_SAMPLE_COUNT_64_BIT :: VkSampleCountFlagBits
-pattern VK_SAMPLE_COUNT_64_BIT = VkSampleCountFlagBits 0x00000040
--- No documentation found for TopLevel "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"
-type VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
--- No documentation found for Nested "Integral a => a" "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"
-pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE :: Integral a => a
-pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
--- No documentation found for TopLevel "VK_UUID_SIZE"
-type VK_UUID_SIZE = 16
--- No documentation found for Nested "Integral a => a" "VK_UUID_SIZE"
-pattern VK_UUID_SIZE :: Integral a => a
-pattern VK_UUID_SIZE = 16
--- No documentation found for TopLevel "VK_MAX_MEMORY_TYPES"
-type VK_MAX_MEMORY_TYPES = 32
--- No documentation found for Nested "Integral a => a" "VK_MAX_MEMORY_TYPES"
-pattern VK_MAX_MEMORY_TYPES :: Integral a => a
-pattern VK_MAX_MEMORY_TYPES = 32
--- No documentation found for TopLevel "VK_MAX_MEMORY_HEAPS"
-type VK_MAX_MEMORY_HEAPS = 16
--- No documentation found for Nested "Integral a => a" "VK_MAX_MEMORY_HEAPS"
-pattern VK_MAX_MEMORY_HEAPS :: Integral a => a
-pattern VK_MAX_MEMORY_HEAPS = 16
--- | PFN_vkInternalAllocationNotification - Application-defined memory
--- allocation notification function
---
--- = Parameters
--- #_parameters#
---
--- -   @pUserData@ is the value specified for
---     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
---     the application.
---
--- -   @size@ is the requested size of an allocation.
---
--- -   @allocationType@ is a 'VkInternalAllocationType' value specifying
---     the requested type of an allocation.
---
--- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
---     the allocation scope of the lifetime of the allocation, as described
---     <{html_spec_relative}#memory-host-allocation-scope here>.
---
--- = Description
--- #_description#
---
--- This is a purely informational callback.
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks'
-type PFN_vkInternalAllocationNotification = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("allocationType" ::: VkInternalAllocationType) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO ())
--- | PFN_vkInternalFreeNotification - Application-defined memory free
--- notification function
---
--- = Parameters
--- #_parameters#
---
--- -   @pUserData@ is the value specified for
---     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
---     the application.
---
--- -   @size@ is the requested size of an allocation.
---
--- -   @allocationType@ is a 'VkInternalAllocationType' value specifying
---     the requested type of an allocation.
---
--- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
---     the allocation scope of the lifetime of the allocation, as described
---     <{html_spec_relative}#memory-host-allocation-scope here>.
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks'
-type PFN_vkInternalFreeNotification = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("allocationType" ::: VkInternalAllocationType) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO ())
--- | PFN_vkReallocationFunction - Application-defined memory reallocation
--- function
---
--- = Parameters
--- #_parameters#
---
--- -   @pUserData@ is the value specified for
---     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
---     the application.
---
--- -   @pOriginal@ /must/ be either @NULL@ or a pointer previously returned
---     by @pfnReallocation@ or @pfnAllocation@ of the same allocator.
---
--- -   @size@ is the size in bytes of the requested allocation.
---
--- -   @alignment@ is the requested alignment of the allocation in bytes
---     and /must/ be a power of two.
---
--- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
---     the allocation scope of the lifetime of the allocation, as described
---     <{html_spec_relative}#memory-host-allocation-scope here>.
---
--- = Description
--- #_description#
---
--- @pfnReallocation@ /must/ return an allocation with enough space for
--- @size@ bytes, and the contents of the original allocation from bytes
--- zero to min(original size, new size) - 1 /must/ be preserved in the
--- returned allocation. If @size@ is larger than the old size, the contents
--- of the additional space are undefined. If satisfying these requirements
--- involves creating a new allocation, then the old allocation /should/ be
--- freed.
---
--- If @pOriginal@ is @NULL@, then @pfnReallocation@ /must/ behave
--- equivalently to a call to 'PFN_vkAllocationFunction' with the same
--- parameter values (without @pOriginal@).
---
--- If @size@ is zero, then @pfnReallocation@ /must/ behave equivalently to
--- a call to 'PFN_vkFreeFunction' with the same @pUserData@ parameter
--- value, and @pMemory@ equal to @pOriginal@.
---
--- If @pOriginal@ is non-@NULL@, the implementation /must/ ensure that
--- @alignment@ is equal to the @alignment@ used to originally allocate
--- @pOriginal@.
---
--- If this function fails and @pOriginal@ is non-@NULL@ the application
--- /must/ not free the old allocation.
---
--- @pfnReallocation@ /must/ follow the same
--- <{html_spec_relative}#vkAllocationFunction_return_rules rules for return values as PFN_vkAllocationFunction>.
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks'
-type PFN_vkReallocationFunction = Ptr (("pUserData" ::: Ptr ()) -> ("pOriginal" ::: Ptr ()) -> ("size" ::: CSize) -> ("alignment" ::: CSize) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO (Ptr ()))
--- | PFN_vkAllocationFunction - Application-defined memory allocation
--- function
---
--- = Parameters
--- #_parameters#
---
--- -   @pUserData@ is the value specified for
---     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
---     the application.
---
--- -   @size@ is the size in bytes of the requested allocation.
---
--- -   @alignment@ is the requested alignment of the allocation in bytes
---     and /must/ be a power of two.
---
--- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
---     the allocation scope of the lifetime of the allocation, as described
---     <{html_spec_relative}#memory-host-allocation-scope here>.
---
--- = Description
--- #_description#
---
--- If @pfnAllocation@ is unable to allocate the requested memory, it /must/
--- return @NULL@. If the allocation was successful, it /must/ return a
--- valid pointer to memory allocation containing at least @size@ bytes, and
--- with the pointer value being a multiple of @alignment@.
---
--- __Note__
---
--- Correct Vulkan operation /cannot/ be assumed if the application does not
--- follow these rules.
---
--- For example, @pfnAllocation@ (or @pfnReallocation@) could cause
--- termination of running Vulkan instance(s) on a failed allocation for
--- debugging purposes, either directly or indirectly. In these
--- circumstances, it /cannot/ be assumed that any part of any affected
--- 'VkInstance' objects are going to operate correctly (even
--- 'vkDestroyInstance'), and the application /must/ ensure it cleans up
--- properly via other means (e.g. process termination).
---
--- If @pfnAllocation@ returns @NULL@, and if the implementation is unable
--- to continue correct processing of the current command without the
--- requested allocation, it /must/ treat this as a run-time error, and
--- generate @VK_ERROR_OUT_OF_HOST_MEMORY@ at the appropriate time for the
--- command in which the condition was detected, as described in
--- <{html_spec_relative}#fundamentals-errorcodes Return Codes>.
---
--- If the implementation is able to continue correct processing of the
--- current command without the requested allocation, then it /may/ do so,
--- and /must/ not generate @VK_ERROR_OUT_OF_HOST_MEMORY@ as a result of
--- this failed allocation.
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks'
-type PFN_vkAllocationFunction = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("alignment" ::: CSize) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO (Ptr ()))
--- | PFN_vkFreeFunction - Application-defined memory free function
---
--- = Parameters
--- #_parameters#
---
--- -   @pUserData@ is the value specified for
---     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
---     the application.
---
--- -   @pMemory@ is the allocation to be freed.
---
--- = Description
--- #_description#
---
--- @pMemory@ /may/ be @NULL@, which the callback /must/ handle safely. If
--- @pMemory@ is non-@NULL@, it /must/ be a pointer previously allocated by
--- @pfnAllocation@ or @pfnReallocation@. The application /should/ free this
--- memory.
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks'
-type PFN_vkFreeFunction = Ptr (("pUserData" ::: Ptr ()) -> ("pMemory" ::: Ptr ()) -> IO ())
--- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
---
--- = Parameters
--- #_parameters#
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'vkGetDeviceProcAddr', 'vkGetInstanceProcAddr'
-type PFN_vkVoidFunction = Ptr (() -> IO ())
--- | Dummy data to tag the 'Ptr' with
-data VkInstance_T
--- | VkInstance - Opaque handle to a instance object
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.vkCreateAndroidSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkCreateDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCreateDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayPlaneSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.vkCreateIOSSurfaceMVK',
--- 'vkCreateInstance',
--- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.vkCreateMacOSSurfaceMVK',
--- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkCreateMirSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.vkCreateViSurfaceNN',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkCreateWaylandSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkCreateWin32SurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkCreateXcbSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkCreateXlibSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDebugReportMessageEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDestroyDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkDestroyDebugUtilsMessengerEXT',
--- 'vkDestroyInstance',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkDestroySurfaceKHR',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.vkEnumeratePhysicalDeviceGroups',
--- 'Graphics.Vulkan.Extensions.VK_KHR_device_group_creation.vkEnumeratePhysicalDeviceGroupsKHR',
--- 'vkEnumeratePhysicalDevices', 'vkGetInstanceProcAddr',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSubmitDebugUtilsMessageEXT'
-type VkInstance = Ptr VkInstance_T
--- | Dummy data to tag the 'Ptr' with
-data VkPhysicalDevice_T
--- | VkPhysicalDevice - Opaque handle to a physical device object
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkDeviceGroupDeviceCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkPhysicalDeviceGroupProperties',
--- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkAcquireXlibDisplayEXT',
--- 'Graphics.Vulkan.Core10.Device.vkCreateDevice',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayModeKHR',
--- 'Graphics.Vulkan.Core10.ExtensionDiscovery.vkEnumerateDeviceExtensionProperties',
--- 'Graphics.Vulkan.Core10.LayerDiscovery.vkEnumerateDeviceLayerProperties',
--- 'vkEnumeratePhysicalDevices',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayModePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayPlaneCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayPlaneSupportedDisplaysKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetPhysicalDeviceDisplayPlanePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetPhysicalDeviceDisplayPropertiesKHR',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferPropertiesKHR',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFenceProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFencePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphoreProperties',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR',
--- 'vkGetPhysicalDeviceFeatures',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFeatures2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFeatures2KHR',
--- 'vkGetPhysicalDeviceFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFormatProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX',
--- 'vkGetPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2KHR',
--- 'vkGetPhysicalDeviceMemoryProperties',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceMemoryProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceMemoryProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkGetPhysicalDeviceMirPresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetPhysicalDevicePresentRectanglesKHR',
--- 'vkGetPhysicalDeviceProperties',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceProperties2KHR',
--- 'vkGetPhysicalDeviceQueueFamilyProperties',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2KHR',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2KHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.vkGetPhysicalDeviceSurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceCapabilities2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceFormats2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceFormatsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfacePresentModesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkGetPhysicalDeviceWaylandPresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkGetPhysicalDeviceWin32PresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkGetPhysicalDeviceXcbPresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkGetPhysicalDeviceXlibPresentationSupportKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkGetRandROutputDisplayEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display.vkReleaseDisplayEXT'
-type VkPhysicalDevice = Ptr VkPhysicalDevice_T
--- | Dummy data to tag the 'Ptr' with
-data VkDevice_T
--- | VkDevice - Opaque handle to a device object
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImage2KHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImageKHR',
--- 'Graphics.Vulkan.Core10.CommandBuffer.vkAllocateCommandBuffers',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkAllocateDescriptorSets',
--- 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory',
--- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindBufferMemory',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindBufferMemory2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindBufferMemory2KHR',
--- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindImageMemory',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindImageMemory2KHR',
--- 'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.vkCreateBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.vkCreateCommandPool',
--- 'Graphics.Vulkan.Core10.Pipeline.vkCreateComputePipelines',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.vkCreateDevice',
--- 'Graphics.Vulkan.Core10.Event.vkCreateEvent',
--- 'Graphics.Vulkan.Core10.Fence.vkCreateFence',
--- 'Graphics.Vulkan.Core10.Pass.vkCreateFramebuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.vkCreateGraphicsPipelines',
--- 'Graphics.Vulkan.Core10.Image.vkCreateImage',
--- 'Graphics.Vulkan.Core10.ImageView.vkCreateImageView',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateIndirectCommandsLayoutNVX',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateObjectTableNVX',
--- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.vkCreateQueryPool',
--- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass',
--- 'Graphics.Vulkan.Core10.Sampler.vkCreateSampler',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore',
--- 'Graphics.Vulkan.Core10.Shader.vkCreateShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkCreateValidationCacheEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkDebugMarkerSetObjectNameEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkDebugMarkerSetObjectTagEXT',
--- 'Graphics.Vulkan.Core10.Buffer.vkDestroyBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.vkDestroyBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.vkDestroyCommandPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.vkDestroyDevice',
--- 'Graphics.Vulkan.Core10.Event.vkDestroyEvent',
--- 'Graphics.Vulkan.Core10.Fence.vkDestroyFence',
--- 'Graphics.Vulkan.Core10.Pass.vkDestroyFramebuffer',
--- 'Graphics.Vulkan.Core10.Image.vkDestroyImage',
--- 'Graphics.Vulkan.Core10.ImageView.vkDestroyImageView',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyIndirectCommandsLayoutNVX',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyObjectTableNVX',
--- 'Graphics.Vulkan.Core10.Pipeline.vkDestroyPipeline',
--- 'Graphics.Vulkan.Core10.PipelineCache.vkDestroyPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.vkDestroyQueryPool',
--- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass',
--- 'Graphics.Vulkan.Core10.Sampler.vkDestroySampler',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.vkDestroySemaphore',
--- 'Graphics.Vulkan.Core10.Shader.vkDestroyShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkDestroySwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkDestroyValidationCacheEXT',
--- 'Graphics.Vulkan.Core10.Queue.vkDeviceWaitIdle',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkDisplayPowerControlEXT',
--- 'Graphics.Vulkan.Core10.Memory.vkFlushMappedMemoryRanges',
--- 'Graphics.Vulkan.Core10.CommandBuffer.vkFreeCommandBuffers',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkFreeDescriptorSets',
--- 'Graphics.Vulkan.Core10.Memory.vkFreeMemory',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetAndroidHardwareBufferPropertiesANDROID',
--- 'Graphics.Vulkan.Core10.MemoryManagement.vkGetBufferMemoryRequirements',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2KHR',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupport',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupportKHR',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.vkGetDeviceGroupPeerMemoryFeatures',
--- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.vkGetDeviceGroupPeerMemoryFeaturesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetDeviceGroupPresentCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetDeviceGroupSurfacePresentModesKHR',
--- 'Graphics.Vulkan.Core10.Memory.vkGetDeviceMemoryCommitment',
--- 'vkGetDeviceProcAddr', 'Graphics.Vulkan.Core10.Queue.vkGetDeviceQueue',
--- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.vkGetDeviceQueue2',
--- 'Graphics.Vulkan.Core10.Event.vkGetEventStatus',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.vkGetFenceFdKHR',
--- 'Graphics.Vulkan.Core10.Fence.vkGetFenceStatus',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.vkGetFenceWin32HandleKHR',
--- 'Graphics.Vulkan.Core10.MemoryManagement.vkGetImageMemoryRequirements',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2KHR',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetImageSparseMemoryRequirements',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2KHR',
--- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout',
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetMemoryAndroidHardwareBufferANDROID',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.vkGetMemoryHostPointerPropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.vkGetMemoryWin32HandleNV',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandlePropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetPastPresentationTimingGOOGLE',
--- 'Graphics.Vulkan.Core10.PipelineCache.vkGetPipelineCacheData',
--- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults',
--- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetRefreshCycleDurationGOOGLE',
--- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.vkGetSemaphoreFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.vkGetSemaphoreWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkGetSwapchainCounterEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetSwapchainImagesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.vkGetSwapchainStatusKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkGetValidationCacheDataEXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.vkImportFenceFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.vkImportFenceWin32HandleKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.vkImportSemaphoreFdKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.vkImportSemaphoreWin32HandleKHR',
--- 'Graphics.Vulkan.Core10.Memory.vkInvalidateMappedMemoryRanges',
--- 'Graphics.Vulkan.Core10.Memory.vkMapMemory',
--- 'Graphics.Vulkan.Core10.PipelineCache.vkMergePipelineCaches',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkMergeValidationCachesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDeviceEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkRegisterObjectsNVX',
--- 'Graphics.Vulkan.Core10.CommandPool.vkResetCommandPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkResetDescriptorPool',
--- 'Graphics.Vulkan.Core10.Event.vkResetEvent',
--- 'Graphics.Vulkan.Core10.Fence.vkResetFences',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSetDebugUtilsObjectNameEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSetDebugUtilsObjectTagEXT',
--- 'Graphics.Vulkan.Core10.Event.vkSetEvent',
--- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.vkSetHdrMetadataEXT',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1.vkTrimCommandPool',
--- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.vkTrimCommandPoolKHR',
--- 'Graphics.Vulkan.Core10.Memory.vkUnmapMemory',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkUnregisterObjectsNVX',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplateKHR',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets',
--- 'Graphics.Vulkan.Core10.Fence.vkWaitForFences'
-type VkDevice = Ptr VkDevice_T
--- | vkCreateInstance - Create a new Vulkan instance
---
--- = Parameters
--- #_parameters#
---
--- -   @pCreateInfo@ points to an instance of 'VkInstanceCreateInfo'
---     controlling creation of the instance.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- -   @pInstance@ points a @VkInstance@ handle in which the resulting
---     instance is returned.
---
--- = Description
--- #_description#
---
--- @vkCreateInstance@ verifies that the requested layers exist. If not,
--- @vkCreateInstance@ will return @VK_ERROR_LAYER_NOT_PRESENT@. Next
--- @vkCreateInstance@ verifies that the requested extensions are supported
--- (e.g. in the implementation or in any enabled instance layer) and if any
--- requested extension is not supported, @vkCreateInstance@ /must/ return
--- @VK_ERROR_EXTENSION_NOT_PRESENT@. After verifying and enabling the
--- instance layers and extensions the @VkInstance@ object is created and
--- returned to the application. If a requested extension is only supported
--- by a layer, both the layer and the extension need to be specified at
--- @vkCreateInstance@ time for the creation to succeed.
---
--- == Valid Usage
---
--- -   All
---     <{html_spec_relative}#extended-functionality-extensions-dependencies required extensions>
---     for each extension in the
---     'VkInstanceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also
---     be present in that list.
---
--- == Valid Usage (Implicit)
---
--- -   @pCreateInfo@ /must/ be a valid pointer to a valid
---     @VkInstanceCreateInfo@ structure
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid @VkAllocationCallbacks@ structure
---
--- -   @pInstance@ /must/ be a valid pointer to a @VkInstance@ handle
---
--- == Return Codes
---
--- [<#fundamentals-successcodes Success>]
---     -   @VK_SUCCESS@
---
--- [<#fundamentals-errorcodes Failure>]
---     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
---
---     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
---
---     -   @VK_ERROR_INITIALIZATION_FAILED@
---
---     -   @VK_ERROR_LAYER_NOT_PRESENT@
---
---     -   @VK_ERROR_EXTENSION_NOT_PRESENT@
---
---     -   @VK_ERROR_INCOMPATIBLE_DRIVER@
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks', 'VkInstance', 'VkInstanceCreateInfo'
-foreign import ccall "vkCreateInstance" vkCreateInstance :: ("pCreateInfo" ::: Ptr VkInstanceCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pInstance" ::: Ptr VkInstance) -> IO VkResult
--- | vkDestroyInstance - Destroy an instance of Vulkan
---
--- = Parameters
--- #_parameters#
---
--- -   @instance@ is the handle of the instance to destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   All child objects created using @instance@ /must/ have been
---     destroyed prior to destroying @instance@
---
--- -   If @VkAllocationCallbacks@ were provided when @instance@ was
---     created, a compatible set of callbacks /must/ be provided here
---
--- -   If no @VkAllocationCallbacks@ were provided when @instance@ was
---     created, @pAllocator@ /must/ be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   If @instance@ is not @NULL@, @instance@ /must/ be a valid
---     @VkInstance@ handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid @VkAllocationCallbacks@ structure
---
--- == Host Synchronization
---
--- -   Host access to @instance@ /must/ be externally synchronized
---
--- = See Also
--- #_see_also#
---
--- 'VkAllocationCallbacks', 'VkInstance'
-foreign import ccall "vkDestroyInstance" vkDestroyInstance :: ("instance" ::: VkInstance) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
--- | vkEnumeratePhysicalDevices - Enumerates the physical devices accessible
--- to a Vulkan instance
---
--- = Parameters
--- #_parameters#
---
--- -   @instance@ is a handle to a Vulkan instance previously created with
---     'vkCreateInstance'.
---
--- -   @pPhysicalDeviceCount@ is a pointer to an integer related to the
---     number of physical devices available or queried, as described below.
---
--- -   @pPhysicalDevices@ is either @NULL@ or a pointer to an array of
---     @VkPhysicalDevice@ handles.
---
--- = Description
--- #_description#
---
--- If @pPhysicalDevices@ is @NULL@, then the number of physical devices
--- available is returned in @pPhysicalDeviceCount@. Otherwise,
--- @pPhysicalDeviceCount@ /must/ point to a variable set by the user to the
--- number of elements in the @pPhysicalDevices@ array, and on return the
--- variable is overwritten with the number of handles actually written to
--- @pPhysicalDevices@. If @pPhysicalDeviceCount@ is less than the number of
--- physical devices available, at most @pPhysicalDeviceCount@ structures
--- will be written. If @pPhysicalDeviceCount@ is smaller than the number of
--- physical devices available, @VK_INCOMPLETE@ will be returned instead of
--- @VK_SUCCESS@, to indicate that not all the available physical devices
--- were returned.
---
--- == Valid Usage (Implicit)
---
--- -   @instance@ /must/ be a valid @VkInstance@ handle
---
--- -   @pPhysicalDeviceCount@ /must/ be a valid pointer to a @uint32_t@
---     value
---
--- -   If the value referenced by @pPhysicalDeviceCount@ is not @0@, and
---     @pPhysicalDevices@ is not @NULL@, @pPhysicalDevices@ /must/ be a
---     valid pointer to an array of @pPhysicalDeviceCount@
---     @VkPhysicalDevice@ handles
---
--- == Return Codes
---
--- [<#fundamentals-successcodes Success>]
---     -   @VK_SUCCESS@
---
---     -   @VK_INCOMPLETE@
---
--- [<#fundamentals-errorcodes Failure>]
---     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
---
---     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
---
---     -   @VK_ERROR_INITIALIZATION_FAILED@
---
--- = See Also
--- #_see_also#
---
--- 'VkInstance', 'VkPhysicalDevice'
-foreign import ccall "vkEnumeratePhysicalDevices" vkEnumeratePhysicalDevices :: ("instance" ::: VkInstance) -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr VkPhysicalDevice) -> IO VkResult
--- | vkGetDeviceProcAddr - Return a function pointer for a command
---
--- = Parameters
--- #_parameters#
---
--- The table below defines the various use cases for @vkGetDeviceProcAddr@
--- and expected return value for each case.
---
--- = Description
--- #_description#
---
--- The returned function pointer is of type 'PFN_vkVoidFunction', and must
--- be cast to the type of the command being queried. The function pointer
--- /must/ only be called with a dispatchable object (the first parameter)
--- that is @device@ or a child of @device@.
---
--- > +-----------------------+-----------------------+-----------------------+
--- > | @device@              | @pName@               | return value          |
--- > +=======================+=======================+=======================+
--- > | @NULL@                | *                     | undefined             |
--- > +-----------------------+-----------------------+-----------------------+
--- > | invalid device        | *                     | undefined             |
--- > +-----------------------+-----------------------+-----------------------+
--- > | device                | @NULL@                | undefined             |
--- > +-----------------------+-----------------------+-----------------------+
--- > | device                | core device-level     | fp                    |
--- > |                       | Vulkan command        |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | device                | enabled device        | fp                    |
--- > |                       | extension commands    |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | device                | * (any @pName@ not    | @NULL@                |
--- > |                       | covered above)        |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- >
--- > vkGetDeviceProcAddr behavior
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid @VkDevice@ handle
---
--- -   @pName@ /must/ be a null-terminated UTF-8 string
---
--- = See Also
--- #_see_also#
---
--- 'PFN_vkVoidFunction', 'VkDevice'
-foreign import ccall "vkGetDeviceProcAddr" vkGetDeviceProcAddr :: ("device" ::: VkDevice) -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
--- | vkGetInstanceProcAddr - Return a function pointer for a command
---
--- = Parameters
--- #_parameters#
---
--- -   @instance@ is the instance that the function pointer will be
---     compatible with, or @NULL@ for commands not dependent on any
---     instance.
---
--- -   @pName@ is the name of the command to obtain.
---
--- = Description
--- #_description#
---
--- @vkGetInstanceProcAddr@ itself is obtained in a platform- and loader-
--- specific manner. Typically, the loader library will export this command
--- as a function symbol, so applications /can/ link against the loader
--- library, or load it dynamically and look up the symbol using
--- platform-specific APIs.
---
--- The table below defines the various use cases for
--- @vkGetInstanceProcAddr@ and expected return value (“fp” is “function
--- pointer”) for each case.
---
--- The returned function pointer is of type 'PFN_vkVoidFunction', and must
--- be cast to the type of the command being queried.
---
--- > +-----------------------+-----------------------+-----------------------+
--- > | @instance@            | @pName@               | return value          |
--- > +=======================+=======================+=======================+
--- > | *                     | @NULL@                | undefined             |
--- > +-----------------------+-----------------------+-----------------------+
--- > | invalid instance      | *                     | undefined             |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @NULL@                | 'Graphics.Vulkan.Core | fp                    |
--- > |                       | 10.ExtensionDiscovery |                       |
--- > |                       | .vkEnumerateInstanceE |                       |
--- > |                       | xtensionProperties'   |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @NULL@                | 'Graphics.Vulkan.Core | fp                    |
--- > |                       | 10.LayerDiscovery.vkE |                       |
--- > |                       | numerateInstanceLayer |                       |
--- > |                       | Properties'           |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @NULL@                | 'vkCreateInstance'    | fp                    |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @NULL@                | * (any @pName@ not    | @NULL@                |
--- > |                       | covered above)        |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | instance              | core Vulkan command   | fp1                   |
--- > +-----------------------+-----------------------+-----------------------+
--- > | instance              | enabled instance      | fp1                   |
--- > |                       | extension commands    |                       |
--- > |                       | for @instance@        |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | instance              | available device      | fp1                   |
--- > |                       | extension2 commands   |                       |
--- > |                       | for @instance@        |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | instance              | * (any @pName@ not    | @NULL@                |
--- > |                       | covered above)        |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- >
--- > vkGetInstanceProcAddr behavior
---
--- [1]
---     The returned function pointer /must/ only be called with a
---     dispatchable object (the first parameter) that is @instance@ or a
---     child of @instance@, e.g. 'VkInstance', 'VkPhysicalDevice',
---     'VkDevice', 'Graphics.Vulkan.Core10.Queue.VkQueue', or
---     'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'.
---
--- [2]
---     An “available device extension” is a device extension supported by
---     any physical device enumerated by @instance@.
---
--- == Valid Usage (Implicit)
---
--- -   If @instance@ is not @NULL@, @instance@ /must/ be a valid
---     @VkInstance@ handle
---
--- -   @pName@ /must/ be a null-terminated UTF-8 string
---
--- = See Also
--- #_see_also#
---
--- 'PFN_vkVoidFunction', 'VkInstance'
-foreign import ccall "vkGetInstanceProcAddr" vkGetInstanceProcAddr :: ("instance" ::: VkInstance) -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
--- | vkGetPhysicalDeviceProperties - Returns properties of a physical device
---
--- = Parameters
--- #_parameters#
---
--- -   @physicalDevice@ is the handle to the physical device whose
---     properties will be queried.
---
--- -   @pProperties@ points to an instance of the
---     'VkPhysicalDeviceProperties' structure, that will be filled with
---     returned information.
---
--- = Description
--- #_description#
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
---
--- -   @pProperties@ /must/ be a valid pointer to a
---     @VkPhysicalDeviceProperties@ structure
---
--- = See Also
--- #_see_also#
---
--- 'VkPhysicalDevice', 'VkPhysicalDeviceProperties'
-foreign import ccall "vkGetPhysicalDeviceProperties" vkGetPhysicalDeviceProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pProperties" ::: Ptr VkPhysicalDeviceProperties) -> IO ()
--- | vkGetPhysicalDeviceQueueFamilyProperties - Reports properties of the
--- queues of the specified physical device
---
--- = Parameters
--- #_parameters#
---
--- -   @physicalDevice@ is the handle to the physical device whose
---     properties will be queried.
---
--- -   @pQueueFamilyPropertyCount@ is a pointer to an integer related to
---     the number of queue families available or queried, as described
---     below.
---
--- -   @pQueueFamilyProperties@ is either @NULL@ or a pointer to an array
---     of 'VkQueueFamilyProperties' structures.
---
--- = Description
--- #_description#
---
--- If @pQueueFamilyProperties@ is @NULL@, then the number of queue families
--- available is returned in @pQueueFamilyPropertyCount@. Otherwise,
--- @pQueueFamilyPropertyCount@ /must/ point to a variable set by the user
--- to the number of elements in the @pQueueFamilyProperties@ array, and on
--- return the variable is overwritten with the number of structures
--- actually written to @pQueueFamilyProperties@. If
--- @pQueueFamilyPropertyCount@ is less than the number of queue families
--- available, at most @pQueueFamilyPropertyCount@ structures will be
--- written.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
---
--- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a
---     @uint32_t@ value
---
--- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,
---     and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@
---     /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@
---     @VkQueueFamilyProperties@ structures
---
--- = See Also
--- #_see_also#
---
--- 'VkPhysicalDevice', 'VkQueueFamilyProperties'
-foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties" vkGetPhysicalDeviceQueueFamilyProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr VkQueueFamilyProperties) -> IO ()
--- | vkGetPhysicalDeviceMemoryProperties - Reports memory information for the
--- specified physical device
---
--- = Parameters
--- #_parameters#
---
--- -   @physicalDevice@ is the handle to the device to query.
---
--- -   @pMemoryProperties@ points to an instance of
---     @VkPhysicalDeviceMemoryProperties@ structure in which the properties
---     are returned.
---
--- = Description
--- #_description#
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
---
--- -   @pMemoryProperties@ /must/ be a valid pointer to a
---     @VkPhysicalDeviceMemoryProperties@ structure
---
--- = See Also
--- #_see_also#
---
--- 'VkPhysicalDevice', 'VkPhysicalDeviceMemoryProperties'
-foreign import ccall "vkGetPhysicalDeviceMemoryProperties" vkGetPhysicalDeviceMemoryProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pMemoryProperties" ::: Ptr VkPhysicalDeviceMemoryProperties) -> IO ()
--- | vkGetPhysicalDeviceFeatures - Reports capabilities of a physical device
---
--- = Parameters
--- #_parameters#
---
--- -   @physicalDevice@ is the physical device from which to query the
---     supported features.
---
--- -   @pFeatures@ is a pointer to a 'VkPhysicalDeviceFeatures' structure
---     in which the physical device features are returned. For each
---     feature, a value of @VK_TRUE@ specifies that the feature is
---     supported on this physical device, and @VK_FALSE@ specifies that the
---     feature is not supported.
---
--- = Description
--- #_description#
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
---
--- -   @pFeatures@ /must/ be a valid pointer to a
---     @VkPhysicalDeviceFeatures@ structure
---
--- = See Also
--- #_see_also#
---
--- 'VkPhysicalDevice', 'VkPhysicalDeviceFeatures'
-foreign import ccall "vkGetPhysicalDeviceFeatures" vkGetPhysicalDeviceFeatures :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFeatures" ::: Ptr VkPhysicalDeviceFeatures) -> IO ()
--- | vkGetPhysicalDeviceFormatProperties - Lists physical device’s format
--- capabilities
---
--- = Parameters
--- #_parameters#
---
--- -   @physicalDevice@ is the physical device from which to query the
---     format properties.
---
--- -   @format@ is the format whose properties are queried.
---
--- -   @pFormatProperties@ is a pointer to a 'VkFormatProperties' structure
---     in which physical device properties for @format@ are returned.
---
--- = Description
--- #_description#
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
---
--- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
---     value
---
--- -   @pFormatProperties@ /must/ be a valid pointer to a
---     @VkFormatProperties@ structure
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkFormatProperties',
--- 'VkPhysicalDevice'
-foreign import ccall "vkGetPhysicalDeviceFormatProperties" vkGetPhysicalDeviceFormatProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("pFormatProperties" ::: Ptr VkFormatProperties) -> IO ()
--- | vkGetPhysicalDeviceImageFormatProperties - Lists physical device’s image
--- format capabilities
---
--- = Parameters
--- #_parameters#
---
--- -   @physicalDevice@ is the physical device from which to query the
---     image capabilities.
---
--- -   @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' value
---     specifying the image format, corresponding to
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@format@.
---
--- -   @type@ is a 'VkImageType' value specifying the image type,
---     corresponding to
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@imageType@.
---
--- -   @tiling@ is a 'VkImageTiling' value specifying the image tiling,
---     corresponding to
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@tiling@.
---
--- -   @usage@ is a bitmask of 'VkImageUsageFlagBits' specifying the
---     intended usage of the image, corresponding to
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@usage@.
---
--- -   @flags@ is a bitmask of 'VkImageCreateFlagBits' specifying
---     additional parameters of the image, corresponding to
---     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@flags@.
---
--- -   @pImageFormatProperties@ points to an instance of the
---     'VkImageFormatProperties' structure in which capabilities are
---     returned.
---
--- = Description
--- #_description#
---
--- The @format@, @type@, @tiling@, @usage@, and @flags@ parameters
--- correspond to parameters that would be consumed by
--- 'Graphics.Vulkan.Core10.Image.vkCreateImage' (as members of
--- @VkImageCreateInfo@).
---
--- If @format@ is not a supported image format, or if the combination of
--- @format@, @type@, @tiling@, @usage@, and @flags@ is not supported for
--- images, then @vkGetPhysicalDeviceImageFormatProperties@ returns
--- @VK_ERROR_FORMAT_NOT_SUPPORTED@.
---
--- The limitations on an image format that are reported by
--- @vkGetPhysicalDeviceImageFormatProperties@ have the following property:
--- if @usage1@ and @usage2@ of type 'VkImageUsageFlags' are such that the
--- bits set in @usage1@ are a subset of the bits set in @usage2@, and
--- @flags1@ and @flags2@ of type 'VkImageCreateFlags' are such that the
--- bits set in @flags1@ are a subset of the bits set in @flags2@, then the
--- limitations for @usage1@ and @flags1@ /must/ be no more strict than the
--- limitations for @usage2@ and @flags2@, for all values of @format@,
--- @type@, and @tiling@.
---
--- == Valid Usage (Implicit)
---
--- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
---
--- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
---     value
---
--- -   @type@ /must/ be a valid 'VkImageType' value
---
--- -   @tiling@ /must/ be a valid 'VkImageTiling' value
---
--- -   @usage@ /must/ be a valid combination of 'VkImageUsageFlagBits'
---     values
---
--- -   @usage@ /must/ not be @0@
---
--- -   @flags@ /must/ be a valid combination of 'VkImageCreateFlagBits'
---     values
---
--- -   @pImageFormatProperties@ /must/ be a valid pointer to a
---     @VkImageFormatProperties@ structure
---
--- == Return Codes
---
--- [<#fundamentals-successcodes Success>]
---     -   @VK_SUCCESS@
---
--- [<#fundamentals-errorcodes Failure>]
---     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
---
---     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
---
---     -   @VK_ERROR_FORMAT_NOT_SUPPORTED@
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkImageCreateFlags',
--- 'VkImageFormatProperties', 'VkImageTiling', 'VkImageType',
--- 'VkImageUsageFlags', 'VkPhysicalDevice'
-foreign import ccall "vkGetPhysicalDeviceImageFormatProperties" vkGetPhysicalDeviceImageFormatProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("type" ::: VkImageType) -> ("tiling" ::: VkImageTiling) -> ("usage" ::: VkImageUsageFlags) -> ("flags" ::: VkImageCreateFlags) -> ("pImageFormatProperties" ::: Ptr VkImageFormatProperties) -> IO VkResult
--- | VkExtent3D - Structure specifying a three-dimensional extent
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferImageCopy',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageCopy',
--- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
--- 'VkImageFormatProperties',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageResolve',
--- 'VkQueueFamilyProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryBind'
-data VkExtent3D = VkExtent3D
-  { -- No documentation found for Nested "VkExtent3D" "vkWidth"
-  vkWidth :: Word32
-  , -- No documentation found for Nested "VkExtent3D" "vkHeight"
-  vkHeight :: Word32
-  , -- No documentation found for Nested "VkExtent3D" "vkDepth"
-  vkDepth :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkExtent3D where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkExtent3D <$> peek (ptr `plusPtr` 0)
-                        <*> peek (ptr `plusPtr` 4)
-                        <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent3D))
-                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent3D))
-                *> poke (ptr `plusPtr` 8) (vkDepth (poked :: VkExtent3D))
--- | VkPhysicalDeviceProperties - Structure specifying physical device
--- properties
---
--- = Description
--- #_description#
---
--- The @vendorID@ and @deviceID@ fields are provided to allow applications
--- to adapt to device characteristics that are not adequately exposed by
--- other Vulkan queries.
---
--- __Note__
---
--- These /may/ include performance profiles, hardware errata, or other
--- characteristics.
---
--- The /vendor/ identified by @vendorID@ is the entity responsible for the
--- most salient characteristics of the underlying implementation of the
--- 'VkPhysicalDevice' being queried.
---
--- __Note__
---
--- For example, in the case of a discrete GPU implementation, this /should/
--- be the GPU chipset vendor. In the case of a hardware accelerator
--- integrated into a system-on-chip (SoC), this /should/ be the supplier of
--- the silicon IP used to create the accelerator.
---
--- If the vendor has a
--- <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
--- <{html_spec_relative}#vulkan-styleguide Vulkan Documentation and Extensions>
--- document in the section “Registering a Vendor ID with Khronos”. Khronos
--- vendor IDs are allocated starting at 0x10000, to distinguish them from
--- the PCI vendor ID namespace.
---
--- The vendor is also responsible for the value returned in @deviceID@. If
--- the implementation is driven primarily by a
--- <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
--- #_see_also#
---
--- 'VkPhysicalDeviceLimits',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2',
--- 'VkPhysicalDeviceSparseProperties', 'VkPhysicalDeviceType',
--- 'vkGetPhysicalDeviceProperties'
-data VkPhysicalDeviceProperties = VkPhysicalDeviceProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkApiVersion"
-  vkApiVersion :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkDriverVersion"
-  vkDriverVersion :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkVendorID"
-  vkVendorID :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkDeviceID"
-  vkDeviceID :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkDeviceType"
-  vkDeviceType :: VkPhysicalDeviceType
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkDeviceName"
-  vkDeviceName :: Vector VK_MAX_PHYSICAL_DEVICE_NAME_SIZE CChar
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkPipelineCacheUUID"
-  vkPipelineCacheUUID :: Vector VK_UUID_SIZE Word8
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkLimits"
-  vkLimits :: VkPhysicalDeviceLimits
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties" "vkSparseProperties"
-  vkSparseProperties :: VkPhysicalDeviceSparseProperties
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPhysicalDeviceProperties where
-  sizeOf ~_ = 824
-  alignment ~_ = 8
-  peek ptr = VkPhysicalDeviceProperties <$> peek (ptr `plusPtr` 0)
-                                        <*> peek (ptr `plusPtr` 4)
-                                        <*> peek (ptr `plusPtr` 8)
-                                        <*> peek (ptr `plusPtr` 12)
-                                        <*> peek (ptr `plusPtr` 16)
-                                        <*> peek (ptr `plusPtr` 20)
-                                        <*> peek (ptr `plusPtr` 276)
-                                        <*> peek (ptr `plusPtr` 296)
-                                        <*> peek (ptr `plusPtr` 800)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkApiVersion (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 4) (vkDriverVersion (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 8) (vkVendorID (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 12) (vkDeviceID (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 16) (vkDeviceType (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 20) (vkDeviceName (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 276) (vkPipelineCacheUUID (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 296) (vkLimits (poked :: VkPhysicalDeviceProperties))
-                *> poke (ptr `plusPtr` 800) (vkSparseProperties (poked :: VkPhysicalDeviceProperties))
--- | VkApplicationInfo - Structure specifying application info
---
--- = Description
--- #_description#
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_APPLICATION_INFO@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   If @pApplicationName@ is not @NULL@, @pApplicationName@ /must/ be a
---     null-terminated UTF-8 string
---
--- -   If @pEngineName@ is not @NULL@, @pEngineName@ /must/ be a
---     null-terminated UTF-8 string
---
--- = See Also
--- #_see_also#
---
--- 'VkInstanceCreateInfo', 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkApplicationInfo = VkApplicationInfo
-  { -- No documentation found for Nested "VkApplicationInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkApplicationInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkApplicationInfo" "vkPApplicationName"
-  vkPApplicationName :: Ptr CChar
-  , -- No documentation found for Nested "VkApplicationInfo" "vkApplicationVersion"
-  vkApplicationVersion :: Word32
-  , -- No documentation found for Nested "VkApplicationInfo" "vkPEngineName"
-  vkPEngineName :: Ptr CChar
-  , -- No documentation found for Nested "VkApplicationInfo" "vkEngineVersion"
-  vkEngineVersion :: Word32
-  , -- No documentation found for Nested "VkApplicationInfo" "vkApiVersion"
-  vkApiVersion :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkApplicationInfo where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkApplicationInfo <$> peek (ptr `plusPtr` 0)
-                               <*> peek (ptr `plusPtr` 8)
-                               <*> peek (ptr `plusPtr` 16)
-                               <*> peek (ptr `plusPtr` 24)
-                               <*> peek (ptr `plusPtr` 32)
-                               <*> peek (ptr `plusPtr` 40)
-                               <*> peek (ptr `plusPtr` 44)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkApplicationInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkApplicationInfo))
-                *> poke (ptr `plusPtr` 16) (vkPApplicationName (poked :: VkApplicationInfo))
-                *> poke (ptr `plusPtr` 24) (vkApplicationVersion (poked :: VkApplicationInfo))
-                *> poke (ptr `plusPtr` 32) (vkPEngineName (poked :: VkApplicationInfo))
-                *> poke (ptr `plusPtr` 40) (vkEngineVersion (poked :: VkApplicationInfo))
-                *> poke (ptr `plusPtr` 44) (vkApiVersion (poked :: VkApplicationInfo))
--- | VkAllocationCallbacks - Structure containing callback function pointers
--- for memory allocation
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @pfnAllocation@ /must/ be a valid pointer to a valid user-defined
---     'PFN_vkAllocationFunction'
---
--- -   @pfnReallocation@ /must/ be a valid pointer to a valid user-defined
---     'PFN_vkReallocationFunction'
---
--- -   @pfnFree@ /must/ be a valid pointer to a valid user-defined
---     'PFN_vkFreeFunction'
---
--- -   If either of @pfnInternalAllocation@ or @pfnInternalFree@ is not
---     @NULL@, both /must/ be valid callbacks
---
--- = See Also
--- #_see_also#
---
--- 'PFN_vkAllocationFunction', 'PFN_vkFreeFunction',
--- 'PFN_vkInternalAllocationNotification',
--- 'PFN_vkInternalFreeNotification', 'PFN_vkReallocationFunction',
--- 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory',
--- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.vkCreateAndroidSurfaceKHR',
--- 'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.vkCreateBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.vkCreateCommandPool',
--- 'Graphics.Vulkan.Core10.Pipeline.vkCreateComputePipelines',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkCreateDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCreateDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.vkCreateDevice',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayModeKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayPlaneSurfaceKHR',
--- 'Graphics.Vulkan.Core10.Event.vkCreateEvent',
--- 'Graphics.Vulkan.Core10.Fence.vkCreateFence',
--- 'Graphics.Vulkan.Core10.Pass.vkCreateFramebuffer',
--- 'Graphics.Vulkan.Core10.Pipeline.vkCreateGraphicsPipelines',
--- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.vkCreateIOSSurfaceMVK',
--- 'Graphics.Vulkan.Core10.Image.vkCreateImage',
--- 'Graphics.Vulkan.Core10.ImageView.vkCreateImageView',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateIndirectCommandsLayoutNVX',
--- 'vkCreateInstance',
--- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.vkCreateMacOSSurfaceMVK',
--- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkCreateMirSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateObjectTableNVX',
--- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.vkCreateQueryPool',
--- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass',
--- 'Graphics.Vulkan.Core10.Sampler.vkCreateSampler',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore',
--- 'Graphics.Vulkan.Core10.Shader.vkCreateShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkCreateValidationCacheEXT',
--- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.vkCreateViSurfaceNN',
--- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkCreateWaylandSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkCreateWin32SurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkCreateXcbSurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkCreateXlibSurfaceKHR',
--- 'Graphics.Vulkan.Core10.Buffer.vkDestroyBuffer',
--- 'Graphics.Vulkan.Core10.BufferView.vkDestroyBufferView',
--- 'Graphics.Vulkan.Core10.CommandPool.vkDestroyCommandPool',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDestroyDebugReportCallbackEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkDestroyDebugUtilsMessengerEXT',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorPool',
--- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorSetLayout',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplate',
--- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplateKHR',
--- 'Graphics.Vulkan.Core10.Device.vkDestroyDevice',
--- 'Graphics.Vulkan.Core10.Event.vkDestroyEvent',
--- 'Graphics.Vulkan.Core10.Fence.vkDestroyFence',
--- 'Graphics.Vulkan.Core10.Pass.vkDestroyFramebuffer',
--- 'Graphics.Vulkan.Core10.Image.vkDestroyImage',
--- 'Graphics.Vulkan.Core10.ImageView.vkDestroyImageView',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyIndirectCommandsLayoutNVX',
--- 'vkDestroyInstance',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyObjectTableNVX',
--- 'Graphics.Vulkan.Core10.Pipeline.vkDestroyPipeline',
--- 'Graphics.Vulkan.Core10.PipelineCache.vkDestroyPipelineCache',
--- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout',
--- 'Graphics.Vulkan.Core10.Query.vkDestroyQueryPool',
--- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass',
--- 'Graphics.Vulkan.Core10.Sampler.vkDestroySampler',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversion',
--- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR',
--- 'Graphics.Vulkan.Core10.QueueSemaphore.vkDestroySemaphore',
--- 'Graphics.Vulkan.Core10.Shader.vkDestroyShaderModule',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkDestroySurfaceKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkDestroySwapchainKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkDestroyValidationCacheEXT',
--- 'Graphics.Vulkan.Core10.Memory.vkFreeMemory',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDeviceEventEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT'
-data VkAllocationCallbacks = VkAllocationCallbacks
-  { -- No documentation found for Nested "VkAllocationCallbacks" "vkPUserData"
-  vkPUserData :: Ptr ()
-  , -- No documentation found for Nested "VkAllocationCallbacks" "vkPfnAllocation"
-  vkPfnAllocation :: PFN_vkAllocationFunction
-  , -- No documentation found for Nested "VkAllocationCallbacks" "vkPfnReallocation"
-  vkPfnReallocation :: PFN_vkReallocationFunction
-  , -- No documentation found for Nested "VkAllocationCallbacks" "vkPfnFree"
-  vkPfnFree :: PFN_vkFreeFunction
-  , -- No documentation found for Nested "VkAllocationCallbacks" "vkPfnInternalAllocation"
-  vkPfnInternalAllocation :: PFN_vkInternalAllocationNotification
-  , -- No documentation found for Nested "VkAllocationCallbacks" "vkPfnInternalFree"
-  vkPfnInternalFree :: PFN_vkInternalFreeNotification
-  }
-  deriving (Eq, Show)
-
-instance Storable VkAllocationCallbacks where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkAllocationCallbacks <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 16)
-                                   <*> peek (ptr `plusPtr` 24)
-                                   <*> peek (ptr `plusPtr` 32)
-                                   <*> peek (ptr `plusPtr` 40)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkPUserData (poked :: VkAllocationCallbacks))
-                *> poke (ptr `plusPtr` 8) (vkPfnAllocation (poked :: VkAllocationCallbacks))
-                *> poke (ptr `plusPtr` 16) (vkPfnReallocation (poked :: VkAllocationCallbacks))
-                *> poke (ptr `plusPtr` 24) (vkPfnFree (poked :: VkAllocationCallbacks))
-                *> poke (ptr `plusPtr` 32) (vkPfnInternalAllocation (poked :: VkAllocationCallbacks))
-                *> poke (ptr `plusPtr` 40) (vkPfnInternalFree (poked :: VkAllocationCallbacks))
--- | VkInstanceCreateInfo - Structure specifying parameters of a newly
--- created instance
---
--- = Description
--- #_description#
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO@
---
--- -   Each @pNext@ member of any structure (including this one) in the
---     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
---     instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportCallbackCreateInfoEXT',
---     'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsMessengerCreateInfoEXT',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_validation_flags.VkValidationFlagsEXT'
---
--- -   Each @sType@ member in the @pNext@ chain /must/ be unique
---
--- -   @flags@ /must/ be @0@
---
--- -   If @pApplicationInfo@ is not @NULL@, @pApplicationInfo@ /must/ be a
---     valid pointer to a valid @VkApplicationInfo@ structure
---
--- -   If @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a
---     valid pointer to an array of @enabledLayerCount@ null-terminated
---     UTF-8 strings
---
--- -   If @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@
---     /must/ be a valid pointer to an array of @enabledExtensionCount@
---     null-terminated UTF-8 strings
---
--- = See Also
--- #_see_also#
---
--- 'VkApplicationInfo', 'VkInstanceCreateFlags',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateInstance'
-data VkInstanceCreateInfo = VkInstanceCreateInfo
-  { -- No documentation found for Nested "VkInstanceCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkInstanceCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkInstanceCreateInfo" "vkFlags"
-  vkFlags :: VkInstanceCreateFlags
-  , -- No documentation found for Nested "VkInstanceCreateInfo" "vkPApplicationInfo"
-  vkPApplicationInfo :: Ptr VkApplicationInfo
-  , -- No documentation found for Nested "VkInstanceCreateInfo" "vkEnabledLayerCount"
-  vkEnabledLayerCount :: Word32
-  , -- No documentation found for Nested "VkInstanceCreateInfo" "vkPPEnabledLayerNames"
-  vkPPEnabledLayerNames :: Ptr (Ptr CChar)
-  , -- No documentation found for Nested "VkInstanceCreateInfo" "vkEnabledExtensionCount"
-  vkEnabledExtensionCount :: Word32
-  , -- No documentation found for Nested "VkInstanceCreateInfo" "vkPPEnabledExtensionNames"
-  vkPPEnabledExtensionNames :: Ptr (Ptr CChar)
-  }
-  deriving (Eq, Show)
-
-instance Storable VkInstanceCreateInfo where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkInstanceCreateInfo <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 8)
-                                  <*> peek (ptr `plusPtr` 16)
-                                  <*> peek (ptr `plusPtr` 24)
-                                  <*> peek (ptr `plusPtr` 32)
-                                  <*> peek (ptr `plusPtr` 40)
-                                  <*> peek (ptr `plusPtr` 48)
-                                  <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkInstanceCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkInstanceCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkInstanceCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPApplicationInfo (poked :: VkInstanceCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkInstanceCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPPEnabledLayerNames (poked :: VkInstanceCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkInstanceCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkPPEnabledExtensionNames (poked :: VkInstanceCreateInfo))
--- | VkQueueFamilyProperties - Structure providing information about a queue
--- family
---
--- = Description
--- #_description#
---
--- The value returned in @minImageTransferGranularity@ has a unit of
--- compressed texel blocks for images having a block-compressed format, and
--- a unit of texels otherwise.
---
--- Possible values of @minImageTransferGranularity@ are:
---
--- -   (0,0,0) which indicates that only whole mip levels /must/ be
---     transferred using the image transfer operations on the corresponding
---     queues. In this case, the following restrictions apply to all offset
---     and extent parameters of image transfer operations:
---
---     -   The @x@, @y@, and @z@ members of a
---         'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D'
---         parameter /must/ always be zero.
---
---     -   The @width@, @height@, and @depth@ members of a 'VkExtent3D'
---         parameter /must/ always match the width, height, and depth of
---         the image subresource corresponding to the parameter,
---         respectively.
---
--- -   (Ax, Ay, Az) where Ax, Ay, and Az are all integer powers of two. In
---     this case the following restrictions apply to all image transfer
---     operations:
---
---     -   @x@, @y@, and @z@ of a
---         'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D'
---         parameter /must/ be integer multiples of Ax, Ay, and Az,
---         respectively.
---
---     -   @width@ of a 'VkExtent3D' parameter /must/ be an integer
---         multiple of Ax, or else @x@ + @width@ /must/ equal the width of
---         the image subresource corresponding to the parameter.
---
---     -   @height@ of a 'VkExtent3D' parameter /must/ be an integer
---         multiple of Ay, or else @y@ + @height@ /must/ equal the height
---         of the image subresource corresponding to the parameter.
---
---     -   @depth@ of a 'VkExtent3D' parameter /must/ be an integer
---         multiple of Az, or else @z@ + @depth@ /must/ equal the depth of
---         the image subresource corresponding to the parameter.
---
---     -   If the format of the image corresponding to the parameters is
---         one of the block-compressed formats then for the purposes of the
---         above calculations the granularity /must/ be scaled up by the
---         compressed texel block dimensions.
---
--- Queues supporting graphics and\/or compute operations /must/ report
--- (1,1,1) in @minImageTransferGranularity@, meaning that there are no
--- additional restrictions on the granularity of image transfer operations
--- for these queues. Other queues supporting image transfer operations are
--- only /required/ to support whole mip level transfers, thus
--- @minImageTransferGranularity@ for queues belonging to such queue
--- families /may/ be (0,0,0).
---
--- The <{html_spec_relative}#memory-device Device Memory> section describes
--- memory properties queried from the physical device.
---
--- For physical device feature queries see the
--- <{html_spec_relative}#features Features> chapter.
---
--- = See Also
--- #_see_also#
---
--- 'VkExtent3D',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkQueueFamilyProperties2',
--- 'VkQueueFlags', 'vkGetPhysicalDeviceQueueFamilyProperties'
-data VkQueueFamilyProperties = VkQueueFamilyProperties
-  { -- No documentation found for Nested "VkQueueFamilyProperties" "vkQueueFlags"
-  vkQueueFlags :: VkQueueFlags
-  , -- No documentation found for Nested "VkQueueFamilyProperties" "vkQueueCount"
-  vkQueueCount :: Word32
-  , -- No documentation found for Nested "VkQueueFamilyProperties" "vkTimestampValidBits"
-  vkTimestampValidBits :: Word32
-  , -- No documentation found for Nested "VkQueueFamilyProperties" "vkMinImageTransferGranularity"
-  vkMinImageTransferGranularity :: VkExtent3D
-  }
-  deriving (Eq, Show)
-
-instance Storable VkQueueFamilyProperties where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek ptr = VkQueueFamilyProperties <$> peek (ptr `plusPtr` 0)
-                                     <*> peek (ptr `plusPtr` 4)
-                                     <*> peek (ptr `plusPtr` 8)
-                                     <*> peek (ptr `plusPtr` 12)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkQueueFlags (poked :: VkQueueFamilyProperties))
-                *> poke (ptr `plusPtr` 4) (vkQueueCount (poked :: VkQueueFamilyProperties))
-                *> poke (ptr `plusPtr` 8) (vkTimestampValidBits (poked :: VkQueueFamilyProperties))
-                *> poke (ptr `plusPtr` 12) (vkMinImageTransferGranularity (poked :: VkQueueFamilyProperties))
--- | VkPhysicalDeviceMemoryProperties - Structure specifying physical device
--- memory properties
---
--- = Description
--- #_description#
---
--- The @VkPhysicalDeviceMemoryProperties@ structure describes a number of
--- /memory heaps/ as well as a number of /memory types/ that /can/ be used
--- to access memory allocated in those heaps. Each heap describes a memory
--- resource of a particular size, and each memory type describes a set of
--- memory properties (e.g. host cached vs uncached) that /can/ be used with
--- a given memory heap. Allocations using a particular memory type will
--- consume resources from the heap indicated by that memory type’s heap
--- index. More than one memory type /may/ share each heap, and the heaps
--- and memory types provide a mechanism to advertise an accurate size of
--- the physical memory resources while allowing the memory to be used with
--- a variety of different properties.
---
--- The number of memory heaps is given by @memoryHeapCount@ and is less
--- than or equal to @VK_MAX_MEMORY_HEAPS@. Each heap is described by an
--- element of the @memoryHeaps@ array as a 'VkMemoryHeap' structure. The
--- number of memory types available across all memory heaps is given by
--- @memoryTypeCount@ and is less than or equal to @VK_MAX_MEMORY_TYPES@.
--- Each memory type is described by an element of the @memoryTypes@ array
--- as a 'VkMemoryType' structure.
---
--- At least one heap /must/ include @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ in
--- 'VkMemoryHeap'::@flags@. If there are multiple heaps that all have
--- similar performance characteristics, they /may/ all include
--- @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@. In a unified memory architecture
--- (UMA) system there is often only a single memory heap which is
--- considered to be equally “local” to the host and to the device, and such
--- an implementation /must/ advertise the heap as device-local.
---
--- Each memory type returned by 'vkGetPhysicalDeviceMemoryProperties'
--- /must/ have its @propertyFlags@ set to one of the following values:
---
--- -   0
---
--- -   @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
---
--- -   @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@
---
--- -   @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
---
--- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@
---
--- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
---
--- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@
---
--- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ |
---     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
---
--- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
---     @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@
---
--- There /must/ be at least one memory type with both the
--- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ and
--- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ bits set in its @propertyFlags@.
--- There /must/ be at least one memory type with the
--- @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ bit set in its @propertyFlags@.
---
--- For each pair of elements __X__ and __Y__ returned in @memoryTypes@,
--- __X__ /must/ be placed at a lower index position than __Y__ if:
---
--- -   either the set of bit flags returned in the @propertyFlags@ member
---     of __X__ is a strict subset of the set of bit flags returned in the
---     @propertyFlags@ member of __Y__.
---
--- -   or the @propertyFlags@ members of __X__ and __Y__ are equal, and
---     __X__ belongs to a memory heap with greater performance (as
---     determined in an implementation-specific manner).
---
--- __Note__
---
--- There is no ordering requirement between __X__ and __Y__ elements for
--- the case their @propertyFlags@ members are not in a subset relation.
--- That potentially allows more than one possible way to order the same set
--- of memory types. Notice that the
--- <{html_spec_relative}#memory-device-bitmask-list list of all allowed memory property flag combinations>
--- is written in the required order. But if instead
--- @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ was before
--- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
--- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@, the list would still be in the
--- required order.
---
--- This ordering requirement enables applications to use a simple search
--- loop to select the desired memory type along the lines of:
---
--- > // Find a memory in `memoryTypeBitsRequirement` that includes all of `requiredProperties`
--- > int32_t findProperties(const VkPhysicalDeviceMemoryProperties* pMemoryProperties,
--- >                        uint32_t memoryTypeBitsRequirement,
--- >                        VkMemoryPropertyFlags requiredProperties) {
--- >     const uint32_t memoryCount = pMemoryProperties->memoryTypeCount;
--- >     for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
--- >         const uint32_t memoryTypeBits = (1 << memoryIndex);
--- >         const bool isRequiredMemoryType = memoryTypeBitsRequirement & memoryTypeBits;
--- >
--- >         const VkMemoryPropertyFlags properties =
--- >             pMemoryProperties->memoryTypes[memoryIndex].propertyFlags;
--- >         const bool hasRequiredProperties =
--- >             (properties & requiredProperties) == requiredProperties;
--- >
--- >         if (isRequiredMemoryType && hasRequiredProperties)
--- >             return static_cast<int32_t>(memoryIndex);
--- >     }
--- >
--- >     // failed to find memory type
--- >     return -1;
--- > }
--- >
--- > // Try to find an optimal memory type, or if it does not exist try fallback memory type
--- > // `device` is the VkDevice
--- > // `image` is the VkImage that requires memory to be bound
--- > // `memoryProperties` properties as returned by vkGetPhysicalDeviceMemoryProperties
--- > // `requiredProperties` are the property flags that must be present
--- > // `optimalProperties` are the property flags that are preferred by the application
--- > VkMemoryRequirements memoryRequirements;
--- > vkGetImageMemoryRequirements(device, image, &memoryRequirements);
--- > int32_t memoryType =
--- >     findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, optimalProperties);
--- > if (memoryType == -1) // not found; try fallback properties
--- >     memoryType =
--- >         findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, requiredProperties);
---
--- = See Also
--- #_see_also#
---
--- 'VkMemoryHeap', 'VkMemoryType',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceMemoryProperties2',
--- 'vkGetPhysicalDeviceMemoryProperties'
-data VkPhysicalDeviceMemoryProperties = VkPhysicalDeviceMemoryProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties" "vkMemoryTypeCount"
-  vkMemoryTypeCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties" "vkMemoryTypes"
-  vkMemoryTypes :: Vector VK_MAX_MEMORY_TYPES VkMemoryType
-  , -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties" "vkMemoryHeapCount"
-  vkMemoryHeapCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties" "vkMemoryHeaps"
-  vkMemoryHeaps :: Vector VK_MAX_MEMORY_HEAPS VkMemoryHeap
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPhysicalDeviceMemoryProperties where
-  sizeOf ~_ = 520
-  alignment ~_ = 8
-  peek ptr = VkPhysicalDeviceMemoryProperties <$> peek (ptr `plusPtr` 0)
-                                              <*> peek (ptr `plusPtr` 4)
-                                              <*> peek (ptr `plusPtr` 260)
-                                              <*> peek (ptr `plusPtr` 264)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMemoryTypeCount (poked :: VkPhysicalDeviceMemoryProperties))
-                *> poke (ptr `plusPtr` 4) (vkMemoryTypes (poked :: VkPhysicalDeviceMemoryProperties))
-                *> poke (ptr `plusPtr` 260) (vkMemoryHeapCount (poked :: VkPhysicalDeviceMemoryProperties))
-                *> poke (ptr `plusPtr` 264) (vkMemoryHeaps (poked :: VkPhysicalDeviceMemoryProperties))
--- | VkMemoryType - Structure specifying memory type
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'VkMemoryPropertyFlags', 'VkPhysicalDeviceMemoryProperties'
-data VkMemoryType = VkMemoryType
-  { -- No documentation found for Nested "VkMemoryType" "vkPropertyFlags"
-  vkPropertyFlags :: VkMemoryPropertyFlags
-  , -- No documentation found for Nested "VkMemoryType" "vkHeapIndex"
-  vkHeapIndex :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkMemoryType where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek ptr = VkMemoryType <$> peek (ptr `plusPtr` 0)
-                          <*> peek (ptr `plusPtr` 4)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkPropertyFlags (poked :: VkMemoryType))
-                *> poke (ptr `plusPtr` 4) (vkHeapIndex (poked :: VkMemoryType))
--- | VkMemoryHeap - Structure specifying a memory heap
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- @VkDeviceSize@, 'VkMemoryHeapFlags', 'VkPhysicalDeviceMemoryProperties'
-data VkMemoryHeap = VkMemoryHeap
-  { -- No documentation found for Nested "VkMemoryHeap" "vkSize"
-  vkSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkMemoryHeap" "vkFlags"
-  vkFlags :: VkMemoryHeapFlags
-  }
-  deriving (Eq, Show)
-
-instance Storable VkMemoryHeap where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek ptr = VkMemoryHeap <$> peek (ptr `plusPtr` 0)
-                          <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryHeap))
-                *> poke (ptr `plusPtr` 8) (vkFlags (poked :: VkMemoryHeap))
--- | VkFormatProperties - Structure specifying image format properties
---
--- = Description
--- #_description#
---
--- __Note__
---
--- If no format feature flags are supported, then the only possible use
--- would be image transfers - which alone are not useful. As such, if no
--- format feature flags are supported, the format itself is not supported,
--- and images of that format cannot be created.
---
--- If @format@ is a block-compression format, then buffers /must/ not
--- support any features for the format.
---
--- = See Also
--- #_see_also#
---
--- 'VkFormatFeatureFlags',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkFormatProperties2',
--- 'vkGetPhysicalDeviceFormatProperties'
-data VkFormatProperties = VkFormatProperties
-  { -- No documentation found for Nested "VkFormatProperties" "vkLinearTilingFeatures"
-  vkLinearTilingFeatures :: VkFormatFeatureFlags
-  , -- No documentation found for Nested "VkFormatProperties" "vkOptimalTilingFeatures"
-  vkOptimalTilingFeatures :: VkFormatFeatureFlags
-  , -- No documentation found for Nested "VkFormatProperties" "vkBufferFeatures"
-  vkBufferFeatures :: VkFormatFeatureFlags
-  }
-  deriving (Eq, Show)
-
-instance Storable VkFormatProperties where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkFormatProperties <$> peek (ptr `plusPtr` 0)
-                                <*> peek (ptr `plusPtr` 4)
-                                <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkLinearTilingFeatures (poked :: VkFormatProperties))
-                *> poke (ptr `plusPtr` 4) (vkOptimalTilingFeatures (poked :: VkFormatProperties))
-                *> poke (ptr `plusPtr` 8) (vkBufferFeatures (poked :: VkFormatProperties))
--- | VkImageFormatProperties - Structure specifying a image format properties
---
--- = Members
--- #_members#
---
--- -   @maxExtent@ are the maximum image dimensions. See the
---     <{html_spec_relative}#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 ⌈log2(max(@width@, @height@,
---     @depth@))⌉ + 1, where @width@, @height@, and @depth@ are taken from
---     the corresponding members of @maxExtent@, except when one of the
---     following conditions is true, in which case it /may/ instead be @1@:
---
---     -   @vkGetPhysicalDeviceImageFormatProperties@::@tiling@ was
---         @VK_IMAGE_TILING_LINEAR@
---
--- -   @maxArrayLayers@ is the maximum number of array layers.
---     @maxArrayLayers@ /must/ either be equal to 1 or be greater than or
---     equal to the @maxImageArrayLayers@ member of
---     'VkPhysicalDeviceLimits'. A value of 1 is valid only if @tiling@ is
---     @VK_IMAGE_TILING_LINEAR@ or if @type@ is @VK_IMAGE_TYPE_3D@.
---
--- -   @sampleCounts@ is a bitmask of 'VkSampleCountFlagBits' specifying
---     all the supported sample counts for this image as described
---     <{html_spec_relative}#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
--- #_description#
---
--- __Note__
---
--- There is no mechanism to query the size of an image before creating it,
--- to compare that size against @maxResourceSize@. If an application
--- attempts to create an image that exceeds this limit, the creation will
--- fail and 'Graphics.Vulkan.Core10.Image.vkCreateImage' will return
--- @VK_ERROR_OUT_OF_DEVICE_MEMORY@. While the advertised limit /must/ be at
--- least 231, it /may/ not be possible to create an image that approaches
--- that size, particularly for @VK_IMAGE_TYPE_1D@.
---
--- If the combination of parameters to
--- @vkGetPhysicalDeviceImageFormatProperties@ is not supported by the
--- implementation for use in 'Graphics.Vulkan.Core10.Image.vkCreateImage',
--- then all members of @VkImageFormatProperties@ will be filled with zero.
---
--- __Note__
---
--- Filling @VkImageFormatProperties@ with zero for unsupported formats is
--- an exception to the usual rule that output structures have undefined
--- contents on error. This exception was unintentional, but is preserved
--- for backwards compatibility.
---
--- = See Also
--- #_see_also#
---
--- @VkDeviceSize@, 'VkExtent3D',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalImageFormatPropertiesNV',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkImageFormatProperties2',
--- 'VkSampleCountFlags', 'vkGetPhysicalDeviceImageFormatProperties'
-data VkImageFormatProperties = VkImageFormatProperties
-  { -- No documentation found for Nested "VkImageFormatProperties" "vkMaxExtent"
-  vkMaxExtent :: VkExtent3D
-  , -- No documentation found for Nested "VkImageFormatProperties" "vkMaxMipLevels"
-  vkMaxMipLevels :: Word32
-  , -- No documentation found for Nested "VkImageFormatProperties" "vkMaxArrayLayers"
-  vkMaxArrayLayers :: Word32
-  , -- No documentation found for Nested "VkImageFormatProperties" "vkSampleCounts"
-  vkSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkImageFormatProperties" "vkMaxResourceSize"
-  vkMaxResourceSize :: VkDeviceSize
-  }
-  deriving (Eq, Show)
-
-instance Storable VkImageFormatProperties where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkImageFormatProperties <$> peek (ptr `plusPtr` 0)
-                                     <*> peek (ptr `plusPtr` 12)
-                                     <*> peek (ptr `plusPtr` 16)
-                                     <*> peek (ptr `plusPtr` 20)
-                                     <*> peek (ptr `plusPtr` 24)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxExtent (poked :: VkImageFormatProperties))
-                *> poke (ptr `plusPtr` 12) (vkMaxMipLevels (poked :: VkImageFormatProperties))
-                *> poke (ptr `plusPtr` 16) (vkMaxArrayLayers (poked :: VkImageFormatProperties))
-                *> poke (ptr `plusPtr` 20) (vkSampleCounts (poked :: VkImageFormatProperties))
-                *> poke (ptr `plusPtr` 24) (vkMaxResourceSize (poked :: VkImageFormatProperties))
--- | VkPhysicalDeviceFeatures - Structure describing the fine-grained
--- features that can be supported by an implementation
---
--- = Members
--- #_members#
---
--- The members of the @VkPhysicalDeviceFeatures@ structure describe the
--- following features:
---
--- = Description
--- #_description#
---
--- -   @robustBufferAccess@ specifies that accesses to buffers are
---     bounds-checked against the range of the buffer descriptor (as
---     determined by @VkDescriptorBufferInfo@::@range@,
---     @VkBufferViewCreateInfo@::@range@, or the size of the buffer). Out
---     of bounds accesses /must/ not cause application termination, and the
---     effects of shader loads, stores, and atomics /must/ conform to an
---     implementation-dependent behavior as described below.
---
---     -   A buffer access is considered to be out of bounds if any of the
---         following are true:
---
---         -   The pointer was formed by @OpImageTexelPointer@ and the
---             coordinate is less than zero or greater than or equal to the
---             number of whole elements in the bound range.
---
---         -   The pointer was not formed by @OpImageTexelPointer@ and the
---             object pointed to is not wholly contained within the bound
---             range.
---
---             __Note__
---
---             If a SPIR-V @OpLoad@ instruction loads a structure and the
---             tail end of the structure is out of bounds, then all members
---             of the structure are considered out of bounds even if the
---             members at the end are not statically used.
---
---         -   If any buffer access in a given SPIR-V block is determined
---             to be out of bounds, then any other access of the same type
---             (load, store, or atomic) in the same SPIR-V block that
---             accesses an address less than 16 bytes away from the out of
---             bounds address /may/ also be considered out of bounds.
---
---     -   Out-of-bounds buffer loads will return any of the following
---         values:
---
---         -   Values from anywhere within the memory range(s) bound to the
---             buffer (possibly including bytes of memory past the end of
---             the buffer, up to the end of the bound range).
---
---         -   Zero values, or (0,0,0,x) vectors for vector reads where x
---             is a valid value represented in the type of the vector
---             components and /may/ be any of:
---
---             -   0, 1, or the maximum representable positive integer
---                 value, for signed or unsigned integer components
---
---             -   0.0 or 1.0, for floating-point components
---
---     -   Out-of-bounds writes /may/ modify values within the memory
---         range(s) bound to the buffer, but /must/ not modify any other
---         memory.
---
---     -   Out-of-bounds atomics /may/ modify values within the memory
---         range(s) bound to the buffer, but /must/ not modify any other
---         memory, and return an undefined value.
---
---     -   Vertex input attributes are considered out of bounds if the
---         offset of the attribute in the bound vertex buffer range plus
---         the size of the attribute is greater than either:
---
---         -   @vertexBufferRangeSize@, if @bindingStride@ == 0; or
---
---         -   (@vertexBufferRangeSize@ - (@vertexBufferRangeSize@ %
---             @bindingStride@))
---
---         where @vertexBufferRangeSize@ is the byte size of the memory
---         range bound to the vertex buffer binding and @bindingStride@ is
---         the byte stride of the corresponding vertex input binding.
---         Further, if any vertex input attribute using a specific vertex
---         input binding is out of bounds, then all vertex input attributes
---         using that vertex input binding for that vertex shader
---         invocation are considered out of bounds.
---
---         -   If a vertex input attribute is out of bounds, it will be
---             assigned one of the following values:
---
---             -   Values from anywhere within the memory range(s) bound to
---                 the buffer, converted according to the format of the
---                 attribute.
---
---             -   Zero values, format converted according to the format of
---                 the attribute.
---
---             -   Zero values, or (0,0,0,x) vectors, as described above.
---
---     -   If @robustBufferAccess@ is not enabled, out of bounds accesses
---         /may/ corrupt any memory within the process and cause undefined
---         behavior up to and including application termination.
---
--- -   @fullDrawIndexUint32@ specifies the full 32-bit range of indices is
---     supported for indexed draw calls when using a
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType' of
---     @VK_INDEX_TYPE_UINT32@. @maxDrawIndexedIndexValue@ is the maximum
---     index value that /may/ be used (aside from the primitive restart
---     index, which is always 232-1 when the
---     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType' is
---     @VK_INDEX_TYPE_UINT32@). If this feature is supported,
---     @maxDrawIndexedIndexValue@ /must/ be 232-1; otherwise it /must/ be
---     no smaller than 224-1. See
---     <{html_spec_relative}#features-limits-maxDrawIndexedIndexValue maxDrawIndexedIndexValue>.
---
--- -   @imageCubeArray@ specifies whether image views with a
---     'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
---     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@ /can/ be created, and that the
---     corresponding @SampledCubeArray@ and @ImageCubeArray@ SPIR-V
---     capabilities /can/ be used in shader code.
---
--- -   @independentBlend@ specifies whether the
---     @VkPipelineColorBlendAttachmentState@ settings are controlled
---     independently per-attachment. If this feature is not enabled, the
---     @VkPipelineColorBlendAttachmentState@ settings for all color
---     attachments /must/ be identical. Otherwise, a different
---     @VkPipelineColorBlendAttachmentState@ /can/ be provided for each
---     bound color attachment.
---
--- -   @geometryShader@ specifies whether geometry shaders are supported.
---     If this feature is not enabled, the @VK_SHADER_STAGE_GEOMETRY_BIT@
---     and @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@ enum values /must/ not
---     be used. This also specifies whether shader modules /can/ declare
---     the @Geometry@ capability.
---
--- -   @tessellationShader@ specifies whether tessellation control and
---     evaluation shaders are supported. If this feature is not enabled,
---     the @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@,
---     @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@,
---     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@,
---     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@, and
---     @VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO@ enum
---     values /must/ not be used. This also specifies whether shader
---     modules /can/ declare the @Tessellation@ capability.
---
--- -   @sampleRateShading@ specifies whether
---     <{html_spec_relative}#primsrast-sampleshading Sample Shading> and
---     multisample interpolation are supported. If this feature is not
---     enabled, the @sampleShadingEnable@ member of the
---     @VkPipelineMultisampleStateCreateInfo@ structure /must/ be set to
---     @VK_FALSE@ and the @minSampleShading@ member is ignored. This also
---     specifies whether shader modules /can/ declare the
---     @SampleRateShading@ capability.
---
--- -   @dualSrcBlend@ specifies whether blend operations which take two
---     sources are supported. If this feature is not enabled, the
---     @VK_BLEND_FACTOR_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_SRC1_ALPHA@, and
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@ enum values /must/ not be
---     used as source or destination blending factors. See
---     <{html_spec_relative}#framebuffer-dsb {html_spec_relative}#framebuffer-dsb>.
---
--- -   @logicOp@ specifies whether logic operations are supported. If this
---     feature is not enabled, the @logicOpEnable@ member of the
---     @VkPipelineColorBlendStateCreateInfo@ structure /must/ be set to
---     @VK_FALSE@, and the @logicOp@ member is ignored.
---
--- -   @multiDrawIndirect@ specifies whether multiple draw indirect is
---     supported. If this feature is not enabled, the @drawCount@ parameter
---     to the @vkCmdDrawIndirect@ and @vkCmdDrawIndexedIndirect@ commands
---     /must/ be 0 or 1. The @maxDrawIndirectCount@ member of the
---     @VkPhysicalDeviceLimits@ structure /must/ also be 1 if this feature
---     is not supported. See
---     <{html_spec_relative}#features-limits-maxDrawIndirectCount maxDrawIndirectCount>.
---
--- -   @drawIndirectFirstInstance@ specifies whether indirect draw calls
---     support the @firstInstance@ parameter. If this feature is not
---     enabled, the @firstInstance@ member of all @VkDrawIndirectCommand@
---     and @VkDrawIndexedIndirectCommand@ structures that are provided to
---     the @vkCmdDrawIndirect@ and @vkCmdDrawIndexedIndirect@ commands
---     /must/ be 0.
---
--- -   @depthClamp@ specifies whether depth clamping is supported. If this
---     feature is not enabled, the @depthClampEnable@ member of the
---     @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set to
---     @VK_FALSE@. Otherwise, setting @depthClampEnable@ to @VK_TRUE@ will
---     enable depth clamping.
---
--- -   @depthBiasClamp@ specifies whether depth bias clamping is supported.
---     If this feature is not enabled, the @depthBiasClamp@ member of the
---     @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set to
---     0.0 unless the @VK_DYNAMIC_STATE_DEPTH_BIAS@ dynamic state is
---     enabled, and the @depthBiasClamp@ parameter to @vkCmdSetDepthBias@
---     /must/ be set to 0.0.
---
--- -   @fillModeNonSolid@ specifies whether point and wireframe fill modes
---     are supported. If this feature is not enabled, the
---     @VK_POLYGON_MODE_POINT@ and @VK_POLYGON_MODE_LINE@ enum values
---     /must/ not be used.
---
--- -   @depthBounds@ specifies whether depth bounds tests are supported. If
---     this feature is not enabled, the @depthBoundsTestEnable@ member of
---     the @VkPipelineDepthStencilStateCreateInfo@ structure /must/ be set
---     to @VK_FALSE@. When @depthBoundsTestEnable@ is set to @VK_FALSE@,
---     the @minDepthBounds@ and @maxDepthBounds@ members of the
---     @VkPipelineDepthStencilStateCreateInfo@ structure are ignored.
---
--- -   @wideLines@ specifies whether lines with width other than 1.0 are
---     supported. If this feature is not enabled, the @lineWidth@ member of
---     the @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set
---     to 1.0 unless the @VK_DYNAMIC_STATE_LINE_WIDTH@ dynamic state is
---     enabled, and the @lineWidth@ parameter to @vkCmdSetLineWidth@ /must/
---     be set to 1.0. When this feature is supported, the range and
---     granularity of supported line widths are indicated by the
---     @lineWidthRange@ and @lineWidthGranularity@ members of the
---     @VkPhysicalDeviceLimits@ structure, respectively.
---
--- -   @largePoints@ specifies whether points with size greater than 1.0
---     are supported. If this feature is not enabled, only a point size of
---     1.0 written by a shader is supported. The range and granularity of
---     supported point sizes are indicated by the @pointSizeRange@ and
---     @pointSizeGranularity@ members of the @VkPhysicalDeviceLimits@
---     structure, respectively.
---
--- -   @alphaToOne@ specifies whether the implementation is able to replace
---     the alpha value of the color fragment output from the fragment
---     shader with the maximum representable alpha value for fixed-point
---     colors or 1.0 for floating-point colors. If this feature is not
---     enabled, then the @alphaToOneEnable@ member of the
---     @VkPipelineMultisampleStateCreateInfo@ structure /must/ be set to
---     @VK_FALSE@. Otherwise setting @alphaToOneEnable@ to @VK_TRUE@ will
---     enable alpha-to-one behavior.
---
--- -   @multiViewport@ specifies whether more than one viewport is
---     supported. If this feature is not enabled, the @viewportCount@ and
---     @scissorCount@ members of the @VkPipelineViewportStateCreateInfo@
---     structure /must/ be set to 1. Similarly, the @viewportCount@
---     parameter to the @vkCmdSetViewport@ command and the @scissorCount@
---     parameter to the @vkCmdSetScissor@ command /must/ be 1, and the
---     @firstViewport@ parameter to the @vkCmdSetViewport@ command and the
---     @firstScissor@ parameter to the @vkCmdSetScissor@ command /must/ be
---     0.
---
--- -   @samplerAnisotropy@ specifies whether anisotropic filtering is
---     supported. If this feature is not enabled, the @anisotropyEnable@
---     member of the @VkSamplerCreateInfo@ structure /must/ be @VK_FALSE@.
---
--- -   @textureCompressionETC2@ specifies whether all of the ETC2 and EAC
---     compressed texture formats are supported. If this feature is
---     enabled, then the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
---     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/
---     be supported in @optimalTilingFeatures@ for the following formats:
---
---     -   @VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK@
---
---     -   @VK_FORMAT_EAC_R11_UNORM_BLOCK@
---
---     -   @VK_FORMAT_EAC_R11_SNORM_BLOCK@
---
---     -   @VK_FORMAT_EAC_R11G11_UNORM_BLOCK@
---
---     -   @VK_FORMAT_EAC_R11G11_SNORM_BLOCK@
---
---     'vkGetPhysicalDeviceFormatProperties' and
---     'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check
---     for additional supported properties of individual formats.
---
--- -   @textureCompressionASTC_LDR@ specifies whether all of the ASTC LDR
---     compressed texture formats are supported. If this feature is
---     enabled, then the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
---     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/
---     be supported in @optimalTilingFeatures@ for the following formats:
---
---     -   @VK_FORMAT_ASTC_4x4_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_4x4_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_5x4_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_5x4_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_5x5_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_5x5_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_6x5_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_6x5_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_6x6_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_6x6_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_8x5_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_8x5_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_8x6_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_8x6_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_8x8_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_8x8_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x5_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x5_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x6_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x6_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x8_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x8_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x10_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_10x10_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_12x10_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_12x10_SRGB_BLOCK@
---
---     -   @VK_FORMAT_ASTC_12x12_UNORM_BLOCK@
---
---     -   @VK_FORMAT_ASTC_12x12_SRGB_BLOCK@
---
---     'vkGetPhysicalDeviceFormatProperties' and
---     'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check
---     for additional supported properties of individual formats.
---
--- -   @textureCompressionBC@ specifies whether all of the BC compressed
---     texture formats are supported. If this feature is enabled, then the
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
---     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and
---     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/
---     be supported in @optimalTilingFeatures@ for the following formats:
---
---     -   @VK_FORMAT_BC1_RGB_UNORM_BLOCK@
---
---     -   @VK_FORMAT_BC1_RGB_SRGB_BLOCK@
---
---     -   @VK_FORMAT_BC1_RGBA_UNORM_BLOCK@
---
---     -   @VK_FORMAT_BC1_RGBA_SRGB_BLOCK@
---
---     -   @VK_FORMAT_BC2_UNORM_BLOCK@
---
---     -   @VK_FORMAT_BC2_SRGB_BLOCK@
---
---     -   @VK_FORMAT_BC3_UNORM_BLOCK@
---
---     -   @VK_FORMAT_BC3_SRGB_BLOCK@
---
---     -   @VK_FORMAT_BC4_UNORM_BLOCK@
---
---     -   @VK_FORMAT_BC4_SNORM_BLOCK@
---
---     -   @VK_FORMAT_BC5_UNORM_BLOCK@
---
---     -   @VK_FORMAT_BC5_SNORM_BLOCK@
---
---     -   @VK_FORMAT_BC6H_UFLOAT_BLOCK@
---
---     -   @VK_FORMAT_BC6H_SFLOAT_BLOCK@
---
---     -   @VK_FORMAT_BC7_UNORM_BLOCK@
---
---     -   @VK_FORMAT_BC7_SRGB_BLOCK@
---
---     'vkGetPhysicalDeviceFormatProperties' and
---     'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check
---     for additional supported properties of individual formats.
---
--- -   @occlusionQueryPrecise@ specifies whether occlusion queries
---     returning actual sample counts are supported. Occlusion queries are
---     created in a @VkQueryPool@ by specifying the @queryType@ of
---     @VK_QUERY_TYPE_OCCLUSION@ in the @VkQueryPoolCreateInfo@ structure
---     which is passed to @vkCreateQueryPool@. If this feature is enabled,
---     queries of this type /can/ enable @VK_QUERY_CONTROL_PRECISE_BIT@ in
---     the @flags@ parameter to @vkCmdBeginQuery@. If this feature is not
---     supported, the implementation supports only boolean occlusion
---     queries. When any samples are passed, boolean queries will return a
---     non-zero result value, otherwise a result value of zero is returned.
---     When this feature is enabled and @VK_QUERY_CONTROL_PRECISE_BIT@ is
---     set, occlusion queries will report the actual number of samples
---     passed.
---
--- -   @pipelineStatisticsQuery@ specifies whether the pipeline statistics
---     queries are supported. If this feature is not enabled, queries of
---     type @VK_QUERY_TYPE_PIPELINE_STATISTICS@ /cannot/ be created, and
---     none of the
---     'Graphics.Vulkan.Core10.Query.VkQueryPipelineStatisticFlagBits' bits
---     /can/ be set in the @pipelineStatistics@ member of the
---     @VkQueryPoolCreateInfo@ structure.
---
--- -   @vertexPipelineStoresAndAtomics@ specifies whether storage buffers
---     and images support stores and atomic operations in the vertex,
---     tessellation, and geometry shader stages. If this feature is not
---     enabled, all storage image, storage texel buffers, and storage
---     buffer variables used by these stages in shader modules /must/ be
---     decorated with the @NonWriteable@ decoration (or the @readonly@
---     memory qualifier in GLSL).
---
--- -   @fragmentStoresAndAtomics@ specifies whether storage buffers and
---     images support stores and atomic operations in the fragment shader
---     stage. If this feature is not enabled, all storage image, storage
---     texel buffers, and storage buffer variables used by the fragment
---     stage in shader modules /must/ be decorated with the @NonWriteable@
---     decoration (or the @readonly@ memory qualifier in GLSL).
---
--- -   @shaderTessellationAndGeometryPointSize@ specifies whether the
---     @PointSize@ built-in decoration is available in the tessellation
---     control, tessellation evaluation, and geometry shader stages. If
---     this feature is not enabled, members decorated with the @PointSize@
---     built-in decoration /must/ not be read from or written to and all
---     points written from a tessellation or geometry shader will have a
---     size of 1.0. This also specifies whether shader modules /can/
---     declare the @TessellationPointSize@ capability for tessellation
---     control and evaluation shaders, or if the shader modules /can/
---     declare the @GeometryPointSize@ capability for geometry shaders. An
---     implementation supporting this feature /must/ also support one or
---     both of the
---     <{html_spec_relative}#features-features-tessellationShader tessellationShader>
---     or
---     <{html_spec_relative}#features-features-geometryShader geometryShader>
---     features.
---
--- -   @shaderImageGatherExtended@ specifies whether the extended set of
---     image gather instructions are available in shader code. If this
---     feature is not enabled, the @OpImage@*@Gather@ instructions do not
---     support the @Offset@ and @ConstOffsets@ operands. This also
---     specifies whether shader modules /can/ declare the
---     @ImageGatherExtended@ capability.
---
--- -   @shaderStorageImageExtendedFormats@ specifies whether the extended
---     storage image formats are available in shader code. If this feature
---     is not enabled, the formats requiring the
---     @StorageImageExtendedFormats@ capability are not supported for
---     storage images. This also specifies whether shader modules /can/
---     declare the @StorageImageExtendedFormats@ capability.
---
--- -   @shaderStorageImageMultisample@ specifies whether multisampled
---     storage images are supported. If this feature is not enabled, images
---     that are created with a @usage@ that includes
---     @VK_IMAGE_USAGE_STORAGE_BIT@ /must/ be created with @samples@ equal
---     to @VK_SAMPLE_COUNT_1_BIT@. This also specifies whether shader
---     modules /can/ declare the @StorageImageMultisample@ capability.
---
--- -   @shaderStorageImageReadWithoutFormat@ specifies whether storage
---     images require a format qualifier to be specified when reading from
---     storage images. If this feature is not enabled, the @OpImageRead@
---     instruction /must/ not have an @OpTypeImage@ of @Unknown@. This also
---     specifies whether shader modules /can/ declare the
---     @StorageImageReadWithoutFormat@ capability.
---
--- -   @shaderStorageImageWriteWithoutFormat@ specifies whether storage
---     images require a format qualifier to be specified when writing to
---     storage images. If this feature is not enabled, the @OpImageWrite@
---     instruction /must/ not have an @OpTypeImage@ of @Unknown@. This also
---     specifies whether shader modules /can/ declare the
---     @StorageImageWriteWithoutFormat@ capability.
---
--- -   @shaderUniformBufferArrayDynamicIndexing@ specifies whether arrays
---     of uniform buffers /can/ be indexed by /dynamically uniform/ integer
---     expressions in shader code. If this feature is not enabled,
---     resources with a descriptor type of
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ /must/ be indexed only
---     by constant integral expressions when aggregated into arrays in
---     shader code. This also specifies whether shader modules /can/
---     declare the @UniformBufferArrayDynamicIndexing@ capability.
---
--- -   @shaderSampledImageArrayDynamicIndexing@ specifies whether arrays of
---     samplers or sampled images /can/ be indexed by dynamically uniform
---     integer expressions in shader code. If this feature is not enabled,
---     resources with a descriptor type of @VK_DESCRIPTOR_TYPE_SAMPLER@,
---     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, or
---     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ /must/ be indexed only by
---     constant integral expressions when aggregated into arrays in shader
---     code. This also specifies whether shader modules /can/ declare the
---     @SampledImageArrayDynamicIndexing@ capability.
---
--- -   @shaderStorageBufferArrayDynamicIndexing@ specifies whether arrays
---     of storage buffers /can/ be indexed by dynamically uniform integer
---     expressions in shader code. If this feature is not enabled,
---     resources with a descriptor type of
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ /must/ be indexed only
---     by constant integral expressions when aggregated into arrays in
---     shader code. This also specifies whether shader modules /can/
---     declare the @StorageBufferArrayDynamicIndexing@ capability.
---
--- -   @shaderStorageImageArrayDynamicIndexing@ specifies whether arrays of
---     storage images /can/ be indexed by dynamically uniform integer
---     expressions in shader code. If this feature is not enabled,
---     resources with a descriptor type of
---     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ /must/ be indexed only by
---     constant integral expressions when aggregated into arrays in shader
---     code. This also specifies whether shader modules /can/ declare the
---     @StorageImageArrayDynamicIndexing@ capability.
---
--- -   @shaderClipDistance@ specifies whether clip distances are supported
---     in shader code. If this feature is not enabled, any members
---     decorated with the @ClipDistance@ built-in decoration /must/ not be
---     read from or written to in shader modules. This also specifies
---     whether shader modules /can/ declare the @ClipDistance@ capability.
---
--- -   @shaderCullDistance@ specifies whether cull distances are supported
---     in shader code. If this feature is not enabled, any members
---     decorated with the @CullDistance@ built-in decoration /must/ not be
---     read from or written to in shader modules. This also specifies
---     whether shader modules /can/ declare the @CullDistance@ capability.
---
--- -   @shaderFloat64@ specifies whether 64-bit floats (doubles) are
---     supported in shader code. If this feature is not enabled, 64-bit
---     floating-point types /must/ not be used in shader code. This also
---     specifies whether shader modules /can/ declare the @Float64@
---     capability.
---
--- -   @shaderInt64@ specifies whether 64-bit integers (signed and
---     unsigned) are supported in shader code. If this feature is not
---     enabled, 64-bit integer types /must/ not be used in shader code.
---     This also specifies whether shader modules /can/ declare the @Int64@
---     capability.
---
--- -   @shaderInt16@ specifies whether 16-bit integers (signed and
---     unsigned) are supported in shader code. If this feature is not
---     enabled, 16-bit integer types /must/ not be used in shader code.
---     This also specifies whether shader modules /can/ declare the @Int16@
---     capability.
---
--- -   @shaderResourceResidency@ specifies whether image operations that
---     return resource residency information are supported in shader code.
---     If this feature is not enabled, the @OpImageSparse@* instructions
---     /must/ not be used in shader code. This also specifies whether
---     shader modules /can/ declare the @SparseResidency@ capability. The
---     feature requires at least one of the @sparseResidency*@ features to
---     be supported.
---
--- -   @shaderResourceMinLod@ specifies whether image operations that
---     specify the minimum resource LOD are supported in shader code. If
---     this feature is not enabled, the @MinLod@ image operand /must/ not
---     be used in shader code. This also specifies whether shader modules
---     /can/ declare the @MinLod@ capability.
---
--- -   @sparseBinding@ specifies whether resource memory /can/ be managed
---     at opaque sparse block level instead of at the object level. If this
---     feature is not enabled, resource memory /must/ be bound only on a
---     per-object basis using the @vkBindBufferMemory@ and
---     @vkBindImageMemory@ commands. In this case, buffers and images
---     /must/ not be created with @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ and
---     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ set in the @flags@ member of
---     the @VkBufferCreateInfo@ and @VkImageCreateInfo@ structures,
---     respectively. Otherwise resource memory /can/ be managed as
---     described in
---     <{html_spec_relative}#sparsememory-sparseresourcefeatures Sparse Resource Features>.
---
--- -   @sparseResidencyBuffer@ specifies whether the device /can/ access
---     partially resident buffers. If this feature is not enabled, buffers
---     /must/ not be created with @VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT@
---     set in the @flags@ member of the @VkBufferCreateInfo@ structure.
---
--- -   @sparseResidencyImage2D@ specifies whether the device /can/ access
---     partially resident 2D images with 1 sample per pixel. If this
---     feature is not enabled, images with an @imageType@ of
---     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_1_BIT@
---     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
---     set in the @flags@ member of the @VkImageCreateInfo@ structure.
---
--- -   @sparseResidencyImage3D@ specifies whether the device /can/ access
---     partially resident 3D images. If this feature is not enabled, images
---     with an @imageType@ of @VK_IMAGE_TYPE_3D@ /must/ not be created with
---     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ set in the @flags@ member of
---     the @VkImageCreateInfo@ structure.
---
--- -   @sparseResidency2Samples@ specifies whether the physical device
---     /can/ access partially resident 2D images with 2 samples per pixel.
---     If this feature is not enabled, images with an @imageType@ of
---     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_2_BIT@
---     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
---     set in the @flags@ member of the @VkImageCreateInfo@ structure.
---
--- -   @sparseResidency4Samples@ specifies whether the physical device
---     /can/ access partially resident 2D images with 4 samples per pixel.
---     If this feature is not enabled, images with an @imageType@ of
---     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_4_BIT@
---     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
---     set in the @flags@ member of the @VkImageCreateInfo@ structure.
---
--- -   @sparseResidency8Samples@ specifies whether the physical device
---     /can/ access partially resident 2D images with 8 samples per pixel.
---     If this feature is not enabled, images with an @imageType@ of
---     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_8_BIT@
---     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
---     set in the @flags@ member of the @VkImageCreateInfo@ structure.
---
--- -   @sparseResidency16Samples@ specifies whether the physical device
---     /can/ access partially resident 2D images with 16 samples per pixel.
---     If this feature is not enabled, images with an @imageType@ of
---     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_16_BIT@
---     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
---     set in the @flags@ member of the @VkImageCreateInfo@ structure.
---
--- -   @sparseResidencyAliased@ specifies whether the physical device /can/
---     correctly access data aliased into multiple locations. If this
---     feature is not enabled, the @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@
---     and @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ enum values /must/ not be
---     used in @flags@ members of the @VkBufferCreateInfo@ and
---     @VkImageCreateInfo@ structures, respectively.
---
--- -   @variableMultisampleRate@ specifies whether all pipelines that will
---     be bound to a command buffer during a subpass with no attachments
---     /must/ have the same value for
---     @VkPipelineMultisampleStateCreateInfo@::@rasterizationSamples@. If
---     set to @VK_TRUE@, the implementation supports variable multisample
---     rates in a subpass with no attachments. If set to @VK_FALSE@, then
---     all pipelines bound in such a subpass /must/ have the same
---     multisample rate. This has no effect in situations where a subpass
---     uses any attachments.
---
--- -   @inheritedQueries@ specifies whether a secondary command buffer
---     /may/ be executed while a query is active.
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
--- 'vkGetPhysicalDeviceFeatures'
-data VkPhysicalDeviceFeatures = VkPhysicalDeviceFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkRobustBufferAccess"
-  vkRobustBufferAccess :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkFullDrawIndexUint32"
-  vkFullDrawIndexUint32 :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkImageCubeArray"
-  vkImageCubeArray :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkIndependentBlend"
-  vkIndependentBlend :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkGeometryShader"
-  vkGeometryShader :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkTessellationShader"
-  vkTessellationShader :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSampleRateShading"
-  vkSampleRateShading :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkDualSrcBlend"
-  vkDualSrcBlend :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkLogicOp"
-  vkLogicOp :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkMultiDrawIndirect"
-  vkMultiDrawIndirect :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkDrawIndirectFirstInstance"
-  vkDrawIndirectFirstInstance :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkDepthClamp"
-  vkDepthClamp :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkDepthBiasClamp"
-  vkDepthBiasClamp :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkFillModeNonSolid"
-  vkFillModeNonSolid :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkDepthBounds"
-  vkDepthBounds :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkWideLines"
-  vkWideLines :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkLargePoints"
-  vkLargePoints :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkAlphaToOne"
-  vkAlphaToOne :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkMultiViewport"
-  vkMultiViewport :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSamplerAnisotropy"
-  vkSamplerAnisotropy :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkTextureCompressionETC2"
-  vkTextureCompressionETC2 :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkTextureCompressionASTC_LDR"
-  vkTextureCompressionASTC_LDR :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkTextureCompressionBC"
-  vkTextureCompressionBC :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkOcclusionQueryPrecise"
-  vkOcclusionQueryPrecise :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkPipelineStatisticsQuery"
-  vkPipelineStatisticsQuery :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkVertexPipelineStoresAndAtomics"
-  vkVertexPipelineStoresAndAtomics :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkFragmentStoresAndAtomics"
-  vkFragmentStoresAndAtomics :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderTessellationAndGeometryPointSize"
-  vkShaderTessellationAndGeometryPointSize :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderImageGatherExtended"
-  vkShaderImageGatherExtended :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderStorageImageExtendedFormats"
-  vkShaderStorageImageExtendedFormats :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderStorageImageMultisample"
-  vkShaderStorageImageMultisample :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderStorageImageReadWithoutFormat"
-  vkShaderStorageImageReadWithoutFormat :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderStorageImageWriteWithoutFormat"
-  vkShaderStorageImageWriteWithoutFormat :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderUniformBufferArrayDynamicIndexing"
-  vkShaderUniformBufferArrayDynamicIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderSampledImageArrayDynamicIndexing"
-  vkShaderSampledImageArrayDynamicIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderStorageBufferArrayDynamicIndexing"
-  vkShaderStorageBufferArrayDynamicIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderStorageImageArrayDynamicIndexing"
-  vkShaderStorageImageArrayDynamicIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderClipDistance"
-  vkShaderClipDistance :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderCullDistance"
-  vkShaderCullDistance :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderFloat64"
-  vkShaderFloat64 :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderInt64"
-  vkShaderInt64 :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderInt16"
-  vkShaderInt16 :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderResourceResidency"
-  vkShaderResourceResidency :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkShaderResourceMinLod"
-  vkShaderResourceMinLod :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseBinding"
-  vkSparseBinding :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidencyBuffer"
-  vkSparseResidencyBuffer :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidencyImage2D"
-  vkSparseResidencyImage2D :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidencyImage3D"
-  vkSparseResidencyImage3D :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidency2Samples"
-  vkSparseResidency2Samples :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidency4Samples"
-  vkSparseResidency4Samples :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidency8Samples"
-  vkSparseResidency8Samples :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidency16Samples"
-  vkSparseResidency16Samples :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkSparseResidencyAliased"
-  vkSparseResidencyAliased :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkVariableMultisampleRate"
-  vkVariableMultisampleRate :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vkInheritedQueries"
-  vkInheritedQueries :: VkBool32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPhysicalDeviceFeatures where
-  sizeOf ~_ = 220
-  alignment ~_ = 4
-  peek ptr = VkPhysicalDeviceFeatures <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 4)
-                                      <*> peek (ptr `plusPtr` 8)
-                                      <*> peek (ptr `plusPtr` 12)
-                                      <*> peek (ptr `plusPtr` 16)
-                                      <*> peek (ptr `plusPtr` 20)
-                                      <*> peek (ptr `plusPtr` 24)
-                                      <*> peek (ptr `plusPtr` 28)
-                                      <*> peek (ptr `plusPtr` 32)
-                                      <*> peek (ptr `plusPtr` 36)
-                                      <*> peek (ptr `plusPtr` 40)
-                                      <*> peek (ptr `plusPtr` 44)
-                                      <*> peek (ptr `plusPtr` 48)
-                                      <*> peek (ptr `plusPtr` 52)
-                                      <*> peek (ptr `plusPtr` 56)
-                                      <*> peek (ptr `plusPtr` 60)
-                                      <*> peek (ptr `plusPtr` 64)
-                                      <*> peek (ptr `plusPtr` 68)
-                                      <*> peek (ptr `plusPtr` 72)
-                                      <*> peek (ptr `plusPtr` 76)
-                                      <*> peek (ptr `plusPtr` 80)
-                                      <*> peek (ptr `plusPtr` 84)
-                                      <*> peek (ptr `plusPtr` 88)
-                                      <*> peek (ptr `plusPtr` 92)
-                                      <*> peek (ptr `plusPtr` 96)
-                                      <*> peek (ptr `plusPtr` 100)
-                                      <*> peek (ptr `plusPtr` 104)
-                                      <*> peek (ptr `plusPtr` 108)
-                                      <*> peek (ptr `plusPtr` 112)
-                                      <*> peek (ptr `plusPtr` 116)
-                                      <*> peek (ptr `plusPtr` 120)
-                                      <*> peek (ptr `plusPtr` 124)
-                                      <*> peek (ptr `plusPtr` 128)
-                                      <*> peek (ptr `plusPtr` 132)
-                                      <*> peek (ptr `plusPtr` 136)
-                                      <*> peek (ptr `plusPtr` 140)
-                                      <*> peek (ptr `plusPtr` 144)
-                                      <*> peek (ptr `plusPtr` 148)
-                                      <*> peek (ptr `plusPtr` 152)
-                                      <*> peek (ptr `plusPtr` 156)
-                                      <*> peek (ptr `plusPtr` 160)
-                                      <*> peek (ptr `plusPtr` 164)
-                                      <*> peek (ptr `plusPtr` 168)
-                                      <*> peek (ptr `plusPtr` 172)
-                                      <*> peek (ptr `plusPtr` 176)
-                                      <*> peek (ptr `plusPtr` 180)
-                                      <*> peek (ptr `plusPtr` 184)
-                                      <*> peek (ptr `plusPtr` 188)
-                                      <*> peek (ptr `plusPtr` 192)
-                                      <*> peek (ptr `plusPtr` 196)
-                                      <*> peek (ptr `plusPtr` 200)
-                                      <*> peek (ptr `plusPtr` 204)
-                                      <*> peek (ptr `plusPtr` 208)
-                                      <*> peek (ptr `plusPtr` 212)
-                                      <*> peek (ptr `plusPtr` 216)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkRobustBufferAccess (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 4) (vkFullDrawIndexUint32 (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 8) (vkImageCubeArray (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 12) (vkIndependentBlend (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 16) (vkGeometryShader (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 20) (vkTessellationShader (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 24) (vkSampleRateShading (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 28) (vkDualSrcBlend (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 32) (vkLogicOp (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 36) (vkMultiDrawIndirect (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 40) (vkDrawIndirectFirstInstance (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 44) (vkDepthClamp (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 52) (vkFillModeNonSolid (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 56) (vkDepthBounds (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 60) (vkWideLines (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 64) (vkLargePoints (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 68) (vkAlphaToOne (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 72) (vkMultiViewport (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 76) (vkSamplerAnisotropy (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 80) (vkTextureCompressionETC2 (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 84) (vkTextureCompressionASTC_LDR (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 88) (vkTextureCompressionBC (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 92) (vkOcclusionQueryPrecise (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 96) (vkPipelineStatisticsQuery (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 100) (vkVertexPipelineStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 104) (vkFragmentStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 108) (vkShaderTessellationAndGeometryPointSize (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 112) (vkShaderImageGatherExtended (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 116) (vkShaderStorageImageExtendedFormats (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 120) (vkShaderStorageImageMultisample (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 124) (vkShaderStorageImageReadWithoutFormat (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 128) (vkShaderStorageImageWriteWithoutFormat (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 132) (vkShaderUniformBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 136) (vkShaderSampledImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 140) (vkShaderStorageBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 144) (vkShaderStorageImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 148) (vkShaderClipDistance (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 152) (vkShaderCullDistance (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 156) (vkShaderFloat64 (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 160) (vkShaderInt64 (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 164) (vkShaderInt16 (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 168) (vkShaderResourceResidency (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 172) (vkShaderResourceMinLod (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 176) (vkSparseBinding (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 180) (vkSparseResidencyBuffer (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 184) (vkSparseResidencyImage2D (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 188) (vkSparseResidencyImage3D (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 192) (vkSparseResidency2Samples (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 196) (vkSparseResidency4Samples (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 200) (vkSparseResidency8Samples (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 204) (vkSparseResidency16Samples (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 208) (vkSparseResidencyAliased (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 212) (vkVariableMultisampleRate (poked :: VkPhysicalDeviceFeatures))
-                *> poke (ptr `plusPtr` 216) (vkInheritedQueries (poked :: VkPhysicalDeviceFeatures))
--- | VkPhysicalDeviceSparseProperties - Structure specifying physical device
--- sparse memory properties
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, 'VkPhysicalDeviceProperties'
-data VkPhysicalDeviceSparseProperties = VkPhysicalDeviceSparseProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceSparseProperties" "vkResidencyStandard2DBlockShape"
-  vkResidencyStandard2DBlockShape :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseProperties" "vkResidencyStandard2DMultisampleBlockShape"
-  vkResidencyStandard2DMultisampleBlockShape :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseProperties" "vkResidencyStandard3DBlockShape"
-  vkResidencyStandard3DBlockShape :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseProperties" "vkResidencyAlignedMipSize"
-  vkResidencyAlignedMipSize :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseProperties" "vkResidencyNonResidentStrict"
-  vkResidencyNonResidentStrict :: VkBool32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPhysicalDeviceSparseProperties where
-  sizeOf ~_ = 20
-  alignment ~_ = 4
-  peek ptr = VkPhysicalDeviceSparseProperties <$> peek (ptr `plusPtr` 0)
-                                              <*> peek (ptr `plusPtr` 4)
-                                              <*> peek (ptr `plusPtr` 8)
-                                              <*> peek (ptr `plusPtr` 12)
-                                              <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkResidencyStandard2DBlockShape (poked :: VkPhysicalDeviceSparseProperties))
-                *> poke (ptr `plusPtr` 4) (vkResidencyStandard2DMultisampleBlockShape (poked :: VkPhysicalDeviceSparseProperties))
-                *> poke (ptr `plusPtr` 8) (vkResidencyStandard3DBlockShape (poked :: VkPhysicalDeviceSparseProperties))
-                *> poke (ptr `plusPtr` 12) (vkResidencyAlignedMipSize (poked :: VkPhysicalDeviceSparseProperties))
-                *> poke (ptr `plusPtr` 16) (vkResidencyNonResidentStrict (poked :: VkPhysicalDeviceSparseProperties))
--- | VkPhysicalDeviceLimits - Structure reporting implementation-dependent
--- physical device limits
---
--- = Members
--- #_members#
---
--- -   @maxImageDimension1D@ is the maximum dimension (@width@) supported
---     for all images created with an @imageType@ of @VK_IMAGE_TYPE_1D@.
---
--- -   @maxImageDimension2D@ is the maximum dimension (@width@ or @height@)
---     supported for all images created with an @imageType@ of
---     @VK_IMAGE_TYPE_2D@ and without @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@
---     set in @flags@.
---
--- -   @maxImageDimension3D@ is the maximum dimension (@width@, @height@,
---     or @depth@) supported for all images created with an @imageType@ of
---     @VK_IMAGE_TYPE_3D@.
---
--- -   @maxImageDimensionCube@ is the maximum dimension (@width@ or
---     @height@) supported for all images created with an @imageType@ of
---     @VK_IMAGE_TYPE_2D@ and with @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@
---     set in @flags@.
---
--- -   @maxImageArrayLayers@ is the maximum number of layers
---     (@arrayLayers@) for an image.
---
--- -   @maxTexelBufferElements@ is the maximum number of addressable texels
---     for a buffer view created on a buffer which was created with the
---     @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or
---     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ set in the @usage@ member
---     of the @VkBufferCreateInfo@ structure.
---
--- -   @maxUniformBufferRange@ is the maximum value that /can/ be specified
---     in the @range@ member of any
---     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo'
---     structures passed to a call to
---     'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets' for
---     descriptors of type @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@.
---
--- -   @maxStorageBufferRange@ is the maximum value that /can/ be specified
---     in the @range@ member of any
---     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo'
---     structures passed to a call to
---     'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets' for
---     descriptors of type @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@.
---
--- -   @maxPushConstantsSize@ is the maximum size, in bytes, of the pool of
---     push constant memory. For each of the push constant ranges indicated
---     by the @pPushConstantRanges@ member of the
---     @VkPipelineLayoutCreateInfo@ structure, (@offset@ + @size@) /must/
---     be less than or equal to this limit.
---
--- -   @maxMemoryAllocationCount@ is the maximum number of device memory
---     allocations, as created by
---     'Graphics.Vulkan.Core10.Memory.vkAllocateMemory', which /can/
---     simultaneously exist.
---
--- -   @maxSamplerAllocationCount@ is the maximum number of sampler
---     objects, as created by
---     'Graphics.Vulkan.Core10.Sampler.vkCreateSampler', which /can/
---     simultaneously exist on a device.
---
--- -   @bufferImageGranularity@ is the granularity, in bytes, at which
---     buffer or linear image resources, and optimal image resources /can/
---     be bound to adjacent offsets in the same @VkDeviceMemory@ object
---     without aliasing. See
---     <{html_spec_relative}#resources-bufferimagegranularity Buffer-Image Granularity>
---     for more details.
---
--- -   @sparseAddressSpaceSize@ is the total amount of address space
---     available, in bytes, for sparse memory resources. This is an upper
---     bound on the sum of the size of all sparse resources, regardless of
---     whether any memory is bound to them.
---
--- -   @maxBoundDescriptorSets@ is the maximum number of descriptor sets
---     that /can/ be simultaneously used by a pipeline. All @DescriptorSet@
---     decorations in shader modules /must/ have a value less than
---     @maxBoundDescriptorSets@. See
---     <{html_spec_relative}#descriptorsets-sets {html_spec_relative}#descriptorsets-sets>.
---
--- -   @maxPerStageDescriptorSamplers@ is the maximum number of samplers
---     that /can/ be accessible to a single shader stage in a pipeline
---     layout. Descriptors with a type of @VK_DESCRIPTOR_TYPE_SAMPLER@ or
---     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ count against this
---     limit. A descriptor is accessible to a shader stage when the
---     @stageFlags@ member of the @VkDescriptorSetLayoutBinding@ structure
---     has the bit for that shader stage set. See
---     <{html_spec_relative}#descriptorsets-sampler {html_spec_relative}#descriptorsets-sampler>
---     and
---     <{html_spec_relative}#descriptorsets-combinedimagesampler {html_spec_relative}#descriptorsets-combinedimagesampler>.
---
--- -   @maxPerStageDescriptorUniformBuffers@ is the maximum number of
---     uniform buffers that /can/ be accessible to a single shader stage in
---     a pipeline layout. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this
---     limit. A descriptor is accessible to a shader stage when the
---     @stageFlags@ member of the @VkDescriptorSetLayoutBinding@ structure
---     has the bit for that shader stage set. See
---     <{html_spec_relative}#descriptorsets-uniformbuffer {html_spec_relative}#descriptorsets-uniformbuffer>
---     and
---     <{html_spec_relative}#descriptorsets-uniformbufferdynamic {html_spec_relative}#descriptorsets-uniformbufferdynamic>.
---
--- -   @maxPerStageDescriptorStorageBuffers@ is the maximum number of
---     storage buffers that /can/ be accessible to a single shader stage in
---     a pipeline layout. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this
---     limit. A descriptor is accessible to a pipeline shader stage when
---     the @stageFlags@ member of the @VkDescriptorSetLayoutBinding@
---     structure has the bit for that shader stage set. See
---     <{html_spec_relative}#descriptorsets-storagebuffer {html_spec_relative}#descriptorsets-storagebuffer>
---     and
---     <{html_spec_relative}#descriptorsets-storagebufferdynamic {html_spec_relative}#descriptorsets-storagebufferdynamic>.
---
--- -   @maxPerStageDescriptorSampledImages@ is the maximum number of
---     sampled images that /can/ be accessible to a single shader stage in
---     a pipeline layout. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
---     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, or
---     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ count against this limit.
---     A descriptor is accessible to a pipeline shader stage when the
---     @stageFlags@ member of the @VkDescriptorSetLayoutBinding@ structure
---     has the bit for that shader stage set. See
---     <{html_spec_relative}#descriptorsets-combinedimagesampler {html_spec_relative}#descriptorsets-combinedimagesampler>,
---     <{html_spec_relative}#descriptorsets-sampledimage {html_spec_relative}#descriptorsets-sampledimage>,
---     and
---     <{html_spec_relative}#descriptorsets-uniformtexelbuffer {html_spec_relative}#descriptorsets-uniformtexelbuffer>.
---
--- -   @maxPerStageDescriptorStorageImages@ is the maximum number of
---     storage images that /can/ be accessible to a single shader stage in
---     a pipeline layout. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or
---     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ count against this limit.
---     A descriptor is accessible to a pipeline shader stage when the
---     @stageFlags@ member of the @VkDescriptorSetLayoutBinding@ structure
---     has the bit for that shader stage set. See
---     <{html_spec_relative}#descriptorsets-storageimage {html_spec_relative}#descriptorsets-storageimage>,
---     and
---     <{html_spec_relative}#descriptorsets-storagetexelbuffer {html_spec_relative}#descriptorsets-storagetexelbuffer>.
---
--- -   @maxPerStageDescriptorInputAttachments@ is the maximum number of
---     input attachments that /can/ be accessible to a single shader stage
---     in a pipeline layout. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. A
---     descriptor is accessible to a pipeline shader stage when the
---     @stageFlags@ member of the @VkDescriptorSetLayoutBinding@ structure
---     has the bit for that shader stage set. These are only supported for
---     the fragment stage. See
---     <{html_spec_relative}#descriptorsets-inputattachment {html_spec_relative}#descriptorsets-inputattachment>.
---
--- -   @maxPerStageResources@ is the maximum number of resources that /can/
---     be accessible to a single shader stage in a pipeline layout.
---     Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
---     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@,
---     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@,
---     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@,
---     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@,
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@,
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@,
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@,
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, or
---     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. For
---     the fragment shader stage the framebuffer color attachments also
---     count against this limit.
---
--- -   @maxDescriptorSetSamplers@ is the maximum number of samplers that
---     /can/ be included in descriptor bindings in a pipeline layout across
---     all pipeline shader stages and descriptor set numbers. Descriptors
---     with a type of @VK_DESCRIPTOR_TYPE_SAMPLER@ or
---     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ count against this
---     limit. See
---     <{html_spec_relative}#descriptorsets-sampler {html_spec_relative}#descriptorsets-sampler>
---     and
---     <{html_spec_relative}#descriptorsets-combinedimagesampler {html_spec_relative}#descriptorsets-combinedimagesampler>.
---
--- -   @maxDescriptorSetUniformBuffers@ is the maximum number of uniform
---     buffers that /can/ be included in descriptor bindings in a pipeline
---     layout across all pipeline shader stages and descriptor set numbers.
---     Descriptors with a type of @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this
---     limit. See
---     <{html_spec_relative}#descriptorsets-uniformbuffer {html_spec_relative}#descriptorsets-uniformbuffer>
---     and
---     <{html_spec_relative}#descriptorsets-uniformbufferdynamic {html_spec_relative}#descriptorsets-uniformbufferdynamic>.
---
--- -   @maxDescriptorSetUniformBuffersDynamic@ is the maximum number of
---     dynamic uniform buffers that /can/ be included in descriptor
---     bindings in a pipeline layout across all pipeline shader stages and
---     descriptor set numbers. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this
---     limit. See
---     <{html_spec_relative}#descriptorsets-uniformbufferdynamic {html_spec_relative}#descriptorsets-uniformbufferdynamic>.
---
--- -   @maxDescriptorSetStorageBuffers@ is the maximum number of storage
---     buffers that /can/ be included in descriptor bindings in a pipeline
---     layout across all pipeline shader stages and descriptor set numbers.
---     Descriptors with a type of @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this
---     limit. See
---     <{html_spec_relative}#descriptorsets-storagebuffer {html_spec_relative}#descriptorsets-storagebuffer>
---     and
---     <{html_spec_relative}#descriptorsets-storagebufferdynamic {html_spec_relative}#descriptorsets-storagebufferdynamic>.
---
--- -   @maxDescriptorSetStorageBuffersDynamic@ is the maximum number of
---     dynamic storage buffers that /can/ be included in descriptor
---     bindings in a pipeline layout across all pipeline shader stages and
---     descriptor set numbers. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this
---     limit. See
---     <{html_spec_relative}#descriptorsets-storagebufferdynamic {html_spec_relative}#descriptorsets-storagebufferdynamic>.
---
--- -   @maxDescriptorSetSampledImages@ is the maximum number of sampled
---     images that /can/ be included in descriptor bindings in a pipeline
---     layout across all pipeline shader stages and descriptor set numbers.
---     Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
---     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, or
---     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ count against this limit.
---     See
---     <{html_spec_relative}#descriptorsets-combinedimagesampler {html_spec_relative}#descriptorsets-combinedimagesampler>,
---     <{html_spec_relative}#descriptorsets-sampledimage {html_spec_relative}#descriptorsets-sampledimage>,
---     and
---     <{html_spec_relative}#descriptorsets-uniformtexelbuffer {html_spec_relative}#descriptorsets-uniformtexelbuffer>.
---
--- -   @maxDescriptorSetStorageImages@ is the maximum number of storage
---     images that /can/ be included in descriptor bindings in a pipeline
---     layout across all pipeline shader stages and descriptor set numbers.
---     Descriptors with a type of @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or
---     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ count against this limit.
---     See
---     <{html_spec_relative}#descriptorsets-storageimage {html_spec_relative}#descriptorsets-storageimage>,
---     and
---     <{html_spec_relative}#descriptorsets-storagetexelbuffer {html_spec_relative}#descriptorsets-storagetexelbuffer>.
---
--- -   @maxDescriptorSetInputAttachments@ is the maximum number of input
---     attachments that /can/ be included in descriptor bindings in a
---     pipeline layout across all pipeline shader stages and descriptor set
---     numbers. Descriptors with a type of
---     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. See
---     <{html_spec_relative}#descriptorsets-inputattachment {html_spec_relative}#descriptorsets-inputattachment>.
---
--- -   @maxVertexInputAttributes@ is the maximum number of vertex input
---     attributes that /can/ be specified for a graphics pipeline. These
---     are described in the array of @VkVertexInputAttributeDescription@
---     structures that are provided at graphics pipeline creation time via
---     the @pVertexAttributeDescriptions@ member of the
---     @VkPipelineVertexInputStateCreateInfo@ structure. See
---     <{html_spec_relative}#fxvertex-attrib {html_spec_relative}#fxvertex-attrib>
---     and
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>.
---
--- -   @maxVertexInputBindings@ is the maximum number of vertex buffers
---     that /can/ be specified for providing vertex attributes to a
---     graphics pipeline. These are described in the array of
---     @VkVertexInputBindingDescription@ structures that are provided at
---     graphics pipeline creation time via the @pVertexBindingDescriptions@
---     member of the @VkPipelineVertexInputStateCreateInfo@ structure. The
---     @binding@ member of @VkVertexInputBindingDescription@ /must/ be less
---     than this limit. See
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>.
---
--- -   @maxVertexInputAttributeOffset@ is the maximum vertex input
---     attribute offset that /can/ be added to the vertex input binding
---     stride. The @offset@ member of the
---     @VkVertexInputAttributeDescription@ structure /must/ be less than or
---     equal to this limit. See
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>.
---
--- -   @maxVertexInputBindingStride@ is the maximum vertex input binding
---     stride that /can/ be specified in a vertex input binding. The
---     @stride@ member of the @VkVertexInputBindingDescription@ structure
---     /must/ be less than or equal to this limit. See
---     <{html_spec_relative}#fxvertex-input {html_spec_relative}#fxvertex-input>.
---
--- -   @maxVertexOutputComponents@ is the maximum number of components of
---     output variables which /can/ be output by a vertex shader. See
---     <{html_spec_relative}#shaders-vertex {html_spec_relative}#shaders-vertex>.
---
--- -   @maxTessellationGenerationLevel@ is the maximum tessellation
---     generation level supported by the fixed-function tessellation
---     primitive generator. See
---     <{html_spec_relative}#tessellation {html_spec_relative}#tessellation>.
---
--- -   @maxTessellationPatchSize@ is the maximum patch size, in vertices,
---     of patches that /can/ be processed by the tessellation control
---     shader and tessellation primitive generator. The
---     @patchControlPoints@ member of the
---     @VkPipelineTessellationStateCreateInfo@ structure specified at
---     pipeline creation time and the value provided in the
---     @OutputVertices@ execution mode of shader modules /must/ be less
---     than or equal to this limit. See
---     <{html_spec_relative}#tessellation {html_spec_relative}#tessellation>.
---
--- -   @maxTessellationControlPerVertexInputComponents@ is the maximum
---     number of components of input variables which /can/ be provided as
---     per-vertex inputs to the tessellation control shader stage.
---
--- -   @maxTessellationControlPerVertexOutputComponents@ is the maximum
---     number of components of per-vertex output variables which /can/ be
---     output from the tessellation control shader stage.
---
--- -   @maxTessellationControlPerPatchOutputComponents@ is the maximum
---     number of components of per-patch output variables which /can/ be
---     output from the tessellation control shader stage.
---
--- -   @maxTessellationControlTotalOutputComponents@ is the maximum total
---     number of components of per-vertex and per-patch output variables
---     which /can/ be output from the tessellation control shader stage.
---
--- -   @maxTessellationEvaluationInputComponents@ is the maximum number of
---     components of input variables which /can/ be provided as per-vertex
---     inputs to the tessellation evaluation shader stage.
---
--- -   @maxTessellationEvaluationOutputComponents@ is the maximum number of
---     components of per-vertex output variables which /can/ be output from
---     the tessellation evaluation shader stage.
---
--- -   @maxGeometryShaderInvocations@ is the maximum invocation count
---     supported for instanced geometry shaders. The value provided in the
---     @Invocations@ execution mode of shader modules /must/ be less than
---     or equal to this limit. See
---     <{html_spec_relative}#geometry {html_spec_relative}#geometry>.
---
--- -   @maxGeometryInputComponents@ is the maximum number of components of
---     input variables which /can/ be provided as inputs to the geometry
---     shader stage.
---
--- -   @maxGeometryOutputComponents@ is the maximum number of components of
---     output variables which /can/ be output from the geometry shader
---     stage.
---
--- -   @maxGeometryOutputVertices@ is the maximum number of vertices which
---     /can/ be emitted by any geometry shader.
---
--- -   @maxGeometryTotalOutputComponents@ is the maximum total number of
---     components of output, across all emitted vertices, which /can/ be
---     output from the geometry shader stage.
---
--- -   @maxFragmentInputComponents@ is the maximum number of components of
---     input variables which /can/ be provided as inputs to the fragment
---     shader stage.
---
--- -   @maxFragmentOutputAttachments@ is the maximum number of output
---     attachments which /can/ be written to by the fragment shader stage.
---
--- -   @maxFragmentDualSrcAttachments@ is the maximum number of output
---     attachments which /can/ be written to by the fragment shader stage
---     when blending is enabled and one of the dual source blend modes is
---     in use. See
---     <{html_spec_relative}#framebuffer-dsb {html_spec_relative}#framebuffer-dsb>
---     and
---     <{html_spec_relative}#features-features-dualSrcBlend dualSrcBlend>.
---
--- -   @maxFragmentCombinedOutputResources@ is the total number of storage
---     buffers, storage images, and output buffers which /can/ be used in
---     the fragment shader stage.
---
--- -   @maxComputeSharedMemorySize@ is the maximum total storage size, in
---     bytes, of all variables declared with the @WorkgroupLocal@ storage
---     class in shader modules (or with the @shared@ storage qualifier in
---     GLSL) in the compute shader stage.
---
--- -   @maxComputeWorkGroupCount@[3] is the maximum number of local
---     workgroups that /can/ be dispatched by a single dispatch command.
---     These three values represent the maximum number of local workgroups
---     for the X, Y, and Z dimensions, respectively. The workgroup count
---     parameters to the dispatch commands /must/ be less than or equal to
---     the corresponding limit. See
---     <{html_spec_relative}#dispatch {html_spec_relative}#dispatch>.
---
--- -   @maxComputeWorkGroupInvocations@ is the maximum total number of
---     compute shader invocations in a single local workgroup. The product
---     of the X, Y, and Z sizes as specified by the @LocalSize@ execution
---     mode in shader modules and by the object decorated by the
---     @WorkgroupSize@ decoration /must/ be less than or equal to this
---     limit.
---
--- -   @maxComputeWorkGroupSize@[3] is the maximum size of a local compute
---     workgroup, per dimension. These three values represent the maximum
---     local workgroup size in the X, Y, and Z dimensions, respectively.
---     The @x@, @y@, and @z@ sizes specified by the @LocalSize@ execution
---     mode and by the object decorated by the @WorkgroupSize@ decoration
---     in shader modules /must/ be less than or equal to the corresponding
---     limit.
---
--- -   @subPixelPrecisionBits@ is the number of bits of subpixel precision
---     in framebuffer coordinates xf and yf. See
---     <{html_spec_relative}#primsrast {html_spec_relative}#primsrast>.
---
--- -   @subTexelPrecisionBits@ is the number of bits of precision in the
---     division along an axis of an image used for minification and
---     magnification filters. 2@subTexelPrecisionBits@ is the actual number
---     of divisions along each axis of the image represented. Sub-texel
---     values calculated during image sampling will snap to these locations
---     when generating the filtered results.
---
--- -   @mipmapPrecisionBits@ is the number of bits of division that the LOD
---     calculation for mipmap fetching get snapped to when determining the
---     contribution from each mip level to the mip filtered results.
---     2@mipmapPrecisionBits@ is the actual number of divisions.
---
---     __Note__
---
---     For example, if this value is 2 bits then when linearly filtering
---     between two levels, each level could: contribute: 0%, 33%, 66%, or
---     100% (this is just an example and the amount of contribution
---     /should/ be covered by different equations in the spec).
---
--- -   @maxDrawIndexedIndexValue@ is the maximum index value that /can/ be
---     used for indexed draw calls when using 32-bit indices. This excludes
---     the primitive restart index value of 0xFFFFFFFF. See
---     <{html_spec_relative}#features-features-fullDrawIndexUint32 fullDrawIndexUint32>.
---
--- -   @maxDrawIndirectCount@ is the maximum draw count that is supported
---     for indirect draw calls. See
---     <{html_spec_relative}#features-features-multiDrawIndirect multiDrawIndirect>.
---
--- -   @maxSamplerLodBias@ is the maximum absolute sampler LOD bias. The
---     sum of the @mipLodBias@ member of the @VkSamplerCreateInfo@
---     structure and the @Bias@ operand of image sampling operations in
---     shader modules (or 0 if no @Bias@ operand is provided to an image
---     sampling operation) are clamped to the range
---     [-@maxSamplerLodBias@,+@maxSamplerLodBias@]. See
---     <{html_spec_relative}#samplers-mipLodBias {html_spec_relative}#samplers-mipLodBias>.
---
--- -   @maxSamplerAnisotropy@ is the maximum degree of sampler anisotropy.
---     The maximum degree of anisotropic filtering used for an image
---     sampling operation is the minimum of the @maxAnisotropy@ member of
---     the @VkSamplerCreateInfo@ structure and this limit. See
---     <{html_spec_relative}#samplers-maxAnisotropy {html_spec_relative}#samplers-maxAnisotropy>.
---
--- -   @maxViewports@ is the maximum number of active viewports. The
---     @viewportCount@ member of the @VkPipelineViewportStateCreateInfo@
---     structure that is provided at pipeline creation /must/ be less than
---     or equal to this limit.
---
--- -   @maxViewportDimensions@[2] are the maximum viewport dimensions in
---     the X (width) and Y (height) dimensions, respectively. The maximum
---     viewport dimensions /must/ be greater than or equal to the largest
---     image which /can/ be created and used as a framebuffer attachment.
---     See
---     <{html_spec_relative}#vertexpostproc-viewport Controlling the Viewport>.
---
--- -   @viewportBoundsRange@[2] is the [minimum, maximum] range that the
---     corners of a viewport /must/ be contained in. This range /must/ be
---     at least [-2 × @size@, 2 × @size@ - 1], where @size@ =
---     max(@maxViewportDimensions@[0], @maxViewportDimensions@[1]). See
---     <{html_spec_relative}#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.
---
--- -   @viewportSubPixelBits@ is the number of bits of subpixel precision
---     for viewport bounds. The subpixel precision that floating-point
---     viewport bounds are interpreted at is given by this limit.
---
--- -   @minMemoryMapAlignment@ is the minimum /required/ alignment, in
---     bytes, of host visible memory allocations within the host address
---     space. When mapping a memory allocation with
---     'Graphics.Vulkan.Core10.Memory.vkMapMemory', subtracting @offset@
---     bytes from the returned pointer will always produce an integer
---     multiple of this limit. See
---     <{html_spec_relative}#memory-device-hostaccess {html_spec_relative}#memory-device-hostaccess>.
---
--- -   @minTexelBufferOffsetAlignment@ is the minimum /required/ alignment,
---     in bytes, for the @offset@ member of the @VkBufferViewCreateInfo@
---     structure for texel buffers. When a buffer view is created for a
---     buffer which was created with
---     @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or
---     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ set in the @usage@ member
---     of the @VkBufferCreateInfo@ structure, the @offset@ /must/ be an
---     integer multiple of this limit.
---
--- -   @minUniformBufferOffsetAlignment@ is the minimum /required/
---     alignment, in bytes, for the @offset@ member of the
---     @VkDescriptorBufferInfo@ structure for uniform buffers. When a
---     descriptor of type @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ is updated, the @offset@
---     /must/ be an integer multiple of this limit. Similarly, dynamic
---     offsets for uniform buffers /must/ be multiples of this limit.
---
--- -   @minStorageBufferOffsetAlignment@ is the minimum /required/
---     alignment, in bytes, for the @offset@ member of the
---     @VkDescriptorBufferInfo@ structure for storage buffers. When a
---     descriptor of type @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ is updated, the @offset@
---     /must/ be an integer multiple of this limit. Similarly, dynamic
---     offsets for storage buffers /must/ be multiples of this limit.
---
--- -   @minTexelOffset@ is the minimum offset value for the @ConstOffset@
---     image operand of any of the @OpImageSample@* or @OpImageFetch@*
---     image instructions.
---
--- -   @maxTexelOffset@ is the maximum offset value for the @ConstOffset@
---     image operand of any of the @OpImageSample@* or @OpImageFetch@*
---     image instructions.
---
--- -   @minTexelGatherOffset@ is the minimum offset value for the @Offset@
---     or @ConstOffsets@ image operands of any of the @OpImage@*@Gather@
---     image instructions.
---
--- -   @maxTexelGatherOffset@ is the maximum offset value for the @Offset@
---     or @ConstOffsets@ image operands of any of the @OpImage@*@Gather@
---     image instructions.
---
--- -   @minInterpolationOffset@ is the minimum negative offset value for
---     the @offset@ operand of the @InterpolateAtOffset@ extended
---     instruction.
---
--- -   @maxInterpolationOffset@ is the maximum positive offset value for
---     the @offset@ operand of the @InterpolateAtOffset@ extended
---     instruction.
---
--- -   @subPixelInterpolationOffsetBits@ is the number of subpixel
---     fractional bits that the @x@ and @y@ offsets to the
---     @InterpolateAtOffset@ extended instruction /may/ be rounded to as
---     fixed-point values.
---
--- -   @maxFramebufferWidth@ is the maximum width for a framebuffer. The
---     @width@ member of the @VkFramebufferCreateInfo@ structure /must/ be
---     less than or equal to this limit.
---
--- -   @maxFramebufferHeight@ is the maximum height for a framebuffer. The
---     @height@ member of the @VkFramebufferCreateInfo@ structure /must/ be
---     less than or equal to this limit.
---
--- -   @maxFramebufferLayers@ is the maximum layer count for a layered
---     framebuffer. The @layers@ member of the @VkFramebufferCreateInfo@
---     structure /must/ be less than or equal to this limit.
---
--- -   @framebufferColorSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the color sample counts that are
---     supported for all framebuffer color attachments with floating- or
---     fixed-point formats. There is no limit that specifies the color
---     sample counts that are supported for all color attachments with
---     integer formats.
---
--- -   @framebufferDepthSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the supported depth sample counts
---     for all framebuffer depth\/stencil attachments, when the format
---     includes a depth component.
---
--- -   @framebufferStencilSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the supported stencil sample
---     counts for all framebuffer depth\/stencil attachments, when the
---     format includes a stencil component.
---
--- -   @framebufferNoAttachmentsSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the supported sample counts for a
---     framebuffer with no attachments.
---
--- -   @maxColorAttachments@ is the maximum number of color attachments
---     that /can/ be used by a subpass in a render pass. The
---     @colorAttachmentCount@ member of the @VkSubpassDescription@
---     structure /must/ be less than or equal to this limit.
---
--- -   @sampledImageColorSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the sample counts supported for
---     all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@
---     containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and a non-integer color
---     format.
---
--- -   @sampledImageIntegerSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the sample counts supported for
---     all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@
---     containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and an integer color
---     format.
---
--- -   @sampledImageDepthSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the sample counts supported for
---     all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@
---     containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and a depth format.
---
--- -   @sampledImageStencilSampleCounts@ is a bitmask1 of
---     'VkSampleCountFlagBits' indicating the sample supported for all 2D
---     images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@ containing
---     @VK_IMAGE_USAGE_SAMPLED_BIT@, and a stencil format.
---
--- -   @storageImageSampleCounts@ is a bitmask1 of 'VkSampleCountFlagBits'
---     indicating the sample counts supported for all 2D images created
---     with @VK_IMAGE_TILING_OPTIMAL@, and @usage@ containing
---     @VK_IMAGE_USAGE_STORAGE_BIT@.
---
--- -   @maxSampleMaskWords@ is the maximum number of array elements of a
---     variable decorated with the @SampleMask@ built-in decoration.
---
--- -   @timestampComputeAndGraphics@ specifies support for timestamps on
---     all graphics and compute queues. If this limit is set to @VK_TRUE@,
---     all queues that advertise the @VK_QUEUE_GRAPHICS_BIT@ or
---     @VK_QUEUE_COMPUTE_BIT@ in the
---     @VkQueueFamilyProperties@::@queueFlags@ support
---     @VkQueueFamilyProperties@::@timestampValidBits@ of at least 36. See
---     <{html_spec_relative}#queries-timestamps Timestamp Queries>.
---
--- -   @timestampPeriod@ is the number of nanoseconds /required/ for a
---     timestamp query to be incremented by 1. See
---     <{html_spec_relative}#queries-timestamps Timestamp Queries>.
---
--- -   @maxClipDistances@ is the maximum number of clip distances that
---     /can/ be used in a single shader stage. The size of any array
---     declared with the @ClipDistance@ built-in decoration in a shader
---     module /must/ be less than or equal to this limit.
---
--- -   @maxCullDistances@ is the maximum number of cull distances that
---     /can/ be used in a single shader stage. The size of any array
---     declared with the @CullDistance@ built-in decoration in a shader
---     module /must/ be less than or equal to this limit.
---
--- -   @maxCombinedClipAndCullDistances@ is the maximum combined number of
---     clip and cull distances that /can/ be used in a single shader stage.
---     The sum of the sizes of any pair of arrays declared with the
---     @ClipDistance@ and @CullDistance@ built-in decoration used by a
---     single shader stage in a shader module /must/ be less than or equal
---     to this limit.
---
--- -   @discreteQueuePriorities@ is the number of discrete priorities that
---     /can/ be assigned to a queue based on the value of each member of
---     @VkDeviceQueueCreateInfo@::@pQueuePriorities@. This /must/ be at
---     least 2, and levels /must/ be spread evenly over the range, with at
---     least one level at 1.0, and another at 0.0. See
---     <{html_spec_relative}#devsandqueues-priority {html_spec_relative}#devsandqueues-priority>.
---
--- -   @pointSizeRange@[2] is the range [@minimum@,@maximum@] of supported
---     sizes for points. Values written to variables decorated with the
---     @PointSize@ built-in decoration are clamped to this range.
---
--- -   @lineWidthRange@[2] is the range [@minimum@,@maximum@] of supported
---     widths for lines. Values specified by the @lineWidth@ member of the
---     @VkPipelineRasterizationStateCreateInfo@ or the @lineWidth@
---     parameter to @vkCmdSetLineWidth@ are clamped to this range.
---
--- -   @pointSizeGranularity@ is the granularity of supported point sizes.
---     Not all point sizes in the range defined by @pointSizeRange@ are
---     supported. This limit specifies the granularity (or increment)
---     between successive supported point sizes.
---
--- -   @lineWidthGranularity@ is the granularity of supported line widths.
---     Not all line widths in the range defined by @lineWidthRange@ are
---     supported. This limit specifies the granularity (or increment)
---     between successive supported line widths.
---
--- -   @strictLines@ specifies whether lines are rasterized according to
---     the preferred method of rasterization. If set to @VK_FALSE@, lines
---     /may/ be rasterized under a relaxed set of rules. If set to
---     @VK_TRUE@, lines are rasterized as per the strict definition. See
---     <{html_spec_relative}#primsrast-lines-basic Basic Line Segment Rasterization>.
---
--- -   @standardSampleLocations@ specifies whether rasterization uses the
---     standard sample locations as documented in
---     <{html_spec_relative}#primsrast-multisampling Multisampling>. If set
---     to @VK_TRUE@, the implementation uses the documented sample
---     locations. If set to @VK_FALSE@, the implementation /may/ use
---     different sample locations.
---
--- -   @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset
---     alignment in bytes for @vkCmdCopyBufferToImage@ and
---     @vkCmdCopyImageToBuffer@. The per texel alignment requirements are
---     enforced, but applications /should/ use the optimal alignment for
---     optimal performance and power use.
---
--- -   @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch
---     alignment in bytes for @vkCmdCopyBufferToImage@ and
---     @vkCmdCopyImageToBuffer@. Row pitch is the number of bytes between
---     texels with the same X coordinate in adjacent rows (Y coordinates
---     differ by one). The per texel alignment requirements are enforced,
---     but applications /should/ use the optimal alignment for optimal
---     performance and power use.
---
--- -   @nonCoherentAtomSize@ is the size and alignment in bytes that bounds
---     concurrent access to
---     <{html_spec_relative}#memory-device-hostaccess host-mapped device memory>.
---
--- = Description
--- #_description#
---
--- [1]
---     For all bitmasks of 'VkSampleCountFlagBits', the sample count limits
---     defined above represent the minimum supported sample counts for each
---     image type. Individual images /may/ support additional sample
---     counts, which are queried using
---     'vkGetPhysicalDeviceImageFormatProperties' as described in
---     <{html_spec_relative}#features-supported-sample-counts Supported Sample Counts>.
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, @VkDeviceSize@, 'VkPhysicalDeviceProperties',
--- 'VkSampleCountFlags'
-data VkPhysicalDeviceLimits = VkPhysicalDeviceLimits
-  { -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxImageDimension1D"
-  vkMaxImageDimension1D :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxImageDimension2D"
-  vkMaxImageDimension2D :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxImageDimension3D"
-  vkMaxImageDimension3D :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxImageDimensionCube"
-  vkMaxImageDimensionCube :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxImageArrayLayers"
-  vkMaxImageArrayLayers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTexelBufferElements"
-  vkMaxTexelBufferElements :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxUniformBufferRange"
-  vkMaxUniformBufferRange :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxStorageBufferRange"
-  vkMaxStorageBufferRange :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPushConstantsSize"
-  vkMaxPushConstantsSize :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxMemoryAllocationCount"
-  vkMaxMemoryAllocationCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxSamplerAllocationCount"
-  vkMaxSamplerAllocationCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkBufferImageGranularity"
-  vkBufferImageGranularity :: VkDeviceSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSparseAddressSpaceSize"
-  vkSparseAddressSpaceSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxBoundDescriptorSets"
-  vkMaxBoundDescriptorSets :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPerStageDescriptorSamplers"
-  vkMaxPerStageDescriptorSamplers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPerStageDescriptorUniformBuffers"
-  vkMaxPerStageDescriptorUniformBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPerStageDescriptorStorageBuffers"
-  vkMaxPerStageDescriptorStorageBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPerStageDescriptorSampledImages"
-  vkMaxPerStageDescriptorSampledImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPerStageDescriptorStorageImages"
-  vkMaxPerStageDescriptorStorageImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPerStageDescriptorInputAttachments"
-  vkMaxPerStageDescriptorInputAttachments :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxPerStageResources"
-  vkMaxPerStageResources :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetSamplers"
-  vkMaxDescriptorSetSamplers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetUniformBuffers"
-  vkMaxDescriptorSetUniformBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetUniformBuffersDynamic"
-  vkMaxDescriptorSetUniformBuffersDynamic :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetStorageBuffers"
-  vkMaxDescriptorSetStorageBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetStorageBuffersDynamic"
-  vkMaxDescriptorSetStorageBuffersDynamic :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetSampledImages"
-  vkMaxDescriptorSetSampledImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetStorageImages"
-  vkMaxDescriptorSetStorageImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDescriptorSetInputAttachments"
-  vkMaxDescriptorSetInputAttachments :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxVertexInputAttributes"
-  vkMaxVertexInputAttributes :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxVertexInputBindings"
-  vkMaxVertexInputBindings :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxVertexInputAttributeOffset"
-  vkMaxVertexInputAttributeOffset :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxVertexInputBindingStride"
-  vkMaxVertexInputBindingStride :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxVertexOutputComponents"
-  vkMaxVertexOutputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationGenerationLevel"
-  vkMaxTessellationGenerationLevel :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationPatchSize"
-  vkMaxTessellationPatchSize :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationControlPerVertexInputComponents"
-  vkMaxTessellationControlPerVertexInputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationControlPerVertexOutputComponents"
-  vkMaxTessellationControlPerVertexOutputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationControlPerPatchOutputComponents"
-  vkMaxTessellationControlPerPatchOutputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationControlTotalOutputComponents"
-  vkMaxTessellationControlTotalOutputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationEvaluationInputComponents"
-  vkMaxTessellationEvaluationInputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTessellationEvaluationOutputComponents"
-  vkMaxTessellationEvaluationOutputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxGeometryShaderInvocations"
-  vkMaxGeometryShaderInvocations :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxGeometryInputComponents"
-  vkMaxGeometryInputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxGeometryOutputComponents"
-  vkMaxGeometryOutputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxGeometryOutputVertices"
-  vkMaxGeometryOutputVertices :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxGeometryTotalOutputComponents"
-  vkMaxGeometryTotalOutputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxFragmentInputComponents"
-  vkMaxFragmentInputComponents :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxFragmentOutputAttachments"
-  vkMaxFragmentOutputAttachments :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxFragmentDualSrcAttachments"
-  vkMaxFragmentDualSrcAttachments :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxFragmentCombinedOutputResources"
-  vkMaxFragmentCombinedOutputResources :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxComputeSharedMemorySize"
-  vkMaxComputeSharedMemorySize :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxComputeWorkGroupCount"
-  vkMaxComputeWorkGroupCount :: Vector 3 Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxComputeWorkGroupInvocations"
-  vkMaxComputeWorkGroupInvocations :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxComputeWorkGroupSize"
-  vkMaxComputeWorkGroupSize :: Vector 3 Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSubPixelPrecisionBits"
-  vkSubPixelPrecisionBits :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSubTexelPrecisionBits"
-  vkSubTexelPrecisionBits :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMipmapPrecisionBits"
-  vkMipmapPrecisionBits :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDrawIndexedIndexValue"
-  vkMaxDrawIndexedIndexValue :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxDrawIndirectCount"
-  vkMaxDrawIndirectCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxSamplerLodBias"
-  vkMaxSamplerLodBias :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxSamplerAnisotropy"
-  vkMaxSamplerAnisotropy :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxViewports"
-  vkMaxViewports :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxViewportDimensions"
-  vkMaxViewportDimensions :: Vector 2 Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkViewportBoundsRange"
-  vkViewportBoundsRange :: Vector 2 CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkViewportSubPixelBits"
-  vkViewportSubPixelBits :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMinMemoryMapAlignment"
-  vkMinMemoryMapAlignment :: CSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMinTexelBufferOffsetAlignment"
-  vkMinTexelBufferOffsetAlignment :: VkDeviceSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMinUniformBufferOffsetAlignment"
-  vkMinUniformBufferOffsetAlignment :: VkDeviceSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMinStorageBufferOffsetAlignment"
-  vkMinStorageBufferOffsetAlignment :: VkDeviceSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMinTexelOffset"
-  vkMinTexelOffset :: Int32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTexelOffset"
-  vkMaxTexelOffset :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMinTexelGatherOffset"
-  vkMinTexelGatherOffset :: Int32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxTexelGatherOffset"
-  vkMaxTexelGatherOffset :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMinInterpolationOffset"
-  vkMinInterpolationOffset :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxInterpolationOffset"
-  vkMaxInterpolationOffset :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSubPixelInterpolationOffsetBits"
-  vkSubPixelInterpolationOffsetBits :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxFramebufferWidth"
-  vkMaxFramebufferWidth :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxFramebufferHeight"
-  vkMaxFramebufferHeight :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxFramebufferLayers"
-  vkMaxFramebufferLayers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkFramebufferColorSampleCounts"
-  vkFramebufferColorSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkFramebufferDepthSampleCounts"
-  vkFramebufferDepthSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkFramebufferStencilSampleCounts"
-  vkFramebufferStencilSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkFramebufferNoAttachmentsSampleCounts"
-  vkFramebufferNoAttachmentsSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxColorAttachments"
-  vkMaxColorAttachments :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSampledImageColorSampleCounts"
-  vkSampledImageColorSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSampledImageIntegerSampleCounts"
-  vkSampledImageIntegerSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSampledImageDepthSampleCounts"
-  vkSampledImageDepthSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkSampledImageStencilSampleCounts"
-  vkSampledImageStencilSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkStorageImageSampleCounts"
-  vkStorageImageSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxSampleMaskWords"
-  vkMaxSampleMaskWords :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkTimestampComputeAndGraphics"
-  vkTimestampComputeAndGraphics :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkTimestampPeriod"
-  vkTimestampPeriod :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxClipDistances"
-  vkMaxClipDistances :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxCullDistances"
-  vkMaxCullDistances :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkMaxCombinedClipAndCullDistances"
-  vkMaxCombinedClipAndCullDistances :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkDiscreteQueuePriorities"
-  vkDiscreteQueuePriorities :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkPointSizeRange"
-  vkPointSizeRange :: Vector 2 CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkLineWidthRange"
-  vkLineWidthRange :: Vector 2 CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkPointSizeGranularity"
-  vkPointSizeGranularity :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkLineWidthGranularity"
-  vkLineWidthGranularity :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkStrictLines"
-  vkStrictLines :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkStandardSampleLocations"
-  vkStandardSampleLocations :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkOptimalBufferCopyOffsetAlignment"
-  vkOptimalBufferCopyOffsetAlignment :: VkDeviceSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkOptimalBufferCopyRowPitchAlignment"
-  vkOptimalBufferCopyRowPitchAlignment :: VkDeviceSize
-  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "vkNonCoherentAtomSize"
-  vkNonCoherentAtomSize :: VkDeviceSize
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPhysicalDeviceLimits where
-  sizeOf ~_ = 504
-  alignment ~_ = 8
-  peek ptr = VkPhysicalDeviceLimits <$> peek (ptr `plusPtr` 0)
-                                    <*> peek (ptr `plusPtr` 4)
-                                    <*> peek (ptr `plusPtr` 8)
-                                    <*> peek (ptr `plusPtr` 12)
-                                    <*> peek (ptr `plusPtr` 16)
-                                    <*> peek (ptr `plusPtr` 20)
-                                    <*> peek (ptr `plusPtr` 24)
-                                    <*> peek (ptr `plusPtr` 28)
-                                    <*> peek (ptr `plusPtr` 32)
-                                    <*> peek (ptr `plusPtr` 36)
-                                    <*> peek (ptr `plusPtr` 40)
-                                    <*> peek (ptr `plusPtr` 48)
-                                    <*> peek (ptr `plusPtr` 56)
-                                    <*> peek (ptr `plusPtr` 64)
-                                    <*> peek (ptr `plusPtr` 68)
-                                    <*> peek (ptr `plusPtr` 72)
-                                    <*> peek (ptr `plusPtr` 76)
-                                    <*> peek (ptr `plusPtr` 80)
-                                    <*> peek (ptr `plusPtr` 84)
-                                    <*> peek (ptr `plusPtr` 88)
-                                    <*> peek (ptr `plusPtr` 92)
-                                    <*> peek (ptr `plusPtr` 96)
-                                    <*> peek (ptr `plusPtr` 100)
-                                    <*> peek (ptr `plusPtr` 104)
-                                    <*> peek (ptr `plusPtr` 108)
-                                    <*> peek (ptr `plusPtr` 112)
-                                    <*> peek (ptr `plusPtr` 116)
-                                    <*> peek (ptr `plusPtr` 120)
-                                    <*> peek (ptr `plusPtr` 124)
-                                    <*> peek (ptr `plusPtr` 128)
-                                    <*> peek (ptr `plusPtr` 132)
-                                    <*> peek (ptr `plusPtr` 136)
-                                    <*> peek (ptr `plusPtr` 140)
-                                    <*> peek (ptr `plusPtr` 144)
-                                    <*> peek (ptr `plusPtr` 148)
-                                    <*> peek (ptr `plusPtr` 152)
-                                    <*> peek (ptr `plusPtr` 156)
-                                    <*> peek (ptr `plusPtr` 160)
-                                    <*> peek (ptr `plusPtr` 164)
-                                    <*> peek (ptr `plusPtr` 168)
-                                    <*> peek (ptr `plusPtr` 172)
-                                    <*> peek (ptr `plusPtr` 176)
-                                    <*> peek (ptr `plusPtr` 180)
-                                    <*> peek (ptr `plusPtr` 184)
-                                    <*> peek (ptr `plusPtr` 188)
-                                    <*> peek (ptr `plusPtr` 192)
-                                    <*> peek (ptr `plusPtr` 196)
-                                    <*> peek (ptr `plusPtr` 200)
-                                    <*> peek (ptr `plusPtr` 204)
-                                    <*> peek (ptr `plusPtr` 208)
-                                    <*> peek (ptr `plusPtr` 212)
-                                    <*> peek (ptr `plusPtr` 216)
-                                    <*> peek (ptr `plusPtr` 220)
-                                    <*> peek (ptr `plusPtr` 232)
-                                    <*> peek (ptr `plusPtr` 236)
-                                    <*> peek (ptr `plusPtr` 248)
-                                    <*> peek (ptr `plusPtr` 252)
-                                    <*> peek (ptr `plusPtr` 256)
-                                    <*> peek (ptr `plusPtr` 260)
-                                    <*> peek (ptr `plusPtr` 264)
-                                    <*> peek (ptr `plusPtr` 268)
-                                    <*> peek (ptr `plusPtr` 272)
-                                    <*> peek (ptr `plusPtr` 276)
-                                    <*> peek (ptr `plusPtr` 280)
-                                    <*> peek (ptr `plusPtr` 288)
-                                    <*> peek (ptr `plusPtr` 296)
-                                    <*> peek (ptr `plusPtr` 304)
-                                    <*> peek (ptr `plusPtr` 312)
-                                    <*> peek (ptr `plusPtr` 320)
-                                    <*> peek (ptr `plusPtr` 328)
-                                    <*> peek (ptr `plusPtr` 336)
-                                    <*> peek (ptr `plusPtr` 340)
-                                    <*> peek (ptr `plusPtr` 344)
-                                    <*> peek (ptr `plusPtr` 348)
-                                    <*> peek (ptr `plusPtr` 352)
-                                    <*> peek (ptr `plusPtr` 356)
-                                    <*> peek (ptr `plusPtr` 360)
-                                    <*> peek (ptr `plusPtr` 364)
-                                    <*> peek (ptr `plusPtr` 368)
-                                    <*> peek (ptr `plusPtr` 372)
-                                    <*> peek (ptr `plusPtr` 376)
-                                    <*> peek (ptr `plusPtr` 380)
-                                    <*> peek (ptr `plusPtr` 384)
-                                    <*> peek (ptr `plusPtr` 388)
-                                    <*> peek (ptr `plusPtr` 392)
-                                    <*> peek (ptr `plusPtr` 396)
-                                    <*> peek (ptr `plusPtr` 400)
-                                    <*> peek (ptr `plusPtr` 404)
-                                    <*> peek (ptr `plusPtr` 408)
-                                    <*> peek (ptr `plusPtr` 412)
-                                    <*> peek (ptr `plusPtr` 416)
-                                    <*> peek (ptr `plusPtr` 420)
-                                    <*> peek (ptr `plusPtr` 424)
-                                    <*> peek (ptr `plusPtr` 428)
-                                    <*> peek (ptr `plusPtr` 432)
-                                    <*> peek (ptr `plusPtr` 436)
-                                    <*> peek (ptr `plusPtr` 440)
-                                    <*> peek (ptr `plusPtr` 444)
-                                    <*> peek (ptr `plusPtr` 452)
-                                    <*> peek (ptr `plusPtr` 460)
-                                    <*> peek (ptr `plusPtr` 464)
-                                    <*> peek (ptr `plusPtr` 468)
-                                    <*> peek (ptr `plusPtr` 472)
-                                    <*> peek (ptr `plusPtr` 480)
-                                    <*> peek (ptr `plusPtr` 488)
-                                    <*> peek (ptr `plusPtr` 496)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxImageDimension1D (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 4) (vkMaxImageDimension2D (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 8) (vkMaxImageDimension3D (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 12) (vkMaxImageDimensionCube (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 16) (vkMaxImageArrayLayers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 20) (vkMaxTexelBufferElements (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 24) (vkMaxUniformBufferRange (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 28) (vkMaxStorageBufferRange (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 32) (vkMaxPushConstantsSize (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 36) (vkMaxMemoryAllocationCount (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 40) (vkMaxSamplerAllocationCount (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 48) (vkBufferImageGranularity (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 56) (vkSparseAddressSpaceSize (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 64) (vkMaxBoundDescriptorSets (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 68) (vkMaxPerStageDescriptorSamplers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 72) (vkMaxPerStageDescriptorUniformBuffers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 76) (vkMaxPerStageDescriptorStorageBuffers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 80) (vkMaxPerStageDescriptorSampledImages (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 84) (vkMaxPerStageDescriptorStorageImages (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 88) (vkMaxPerStageDescriptorInputAttachments (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 92) (vkMaxPerStageResources (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 96) (vkMaxDescriptorSetSamplers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 100) (vkMaxDescriptorSetUniformBuffers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 104) (vkMaxDescriptorSetUniformBuffersDynamic (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 108) (vkMaxDescriptorSetStorageBuffers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 112) (vkMaxDescriptorSetStorageBuffersDynamic (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 116) (vkMaxDescriptorSetSampledImages (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 120) (vkMaxDescriptorSetStorageImages (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 124) (vkMaxDescriptorSetInputAttachments (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 128) (vkMaxVertexInputAttributes (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 132) (vkMaxVertexInputBindings (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 136) (vkMaxVertexInputAttributeOffset (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 140) (vkMaxVertexInputBindingStride (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 144) (vkMaxVertexOutputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 148) (vkMaxTessellationGenerationLevel (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 152) (vkMaxTessellationPatchSize (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 156) (vkMaxTessellationControlPerVertexInputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 160) (vkMaxTessellationControlPerVertexOutputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 164) (vkMaxTessellationControlPerPatchOutputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 168) (vkMaxTessellationControlTotalOutputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 172) (vkMaxTessellationEvaluationInputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 176) (vkMaxTessellationEvaluationOutputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 180) (vkMaxGeometryShaderInvocations (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 184) (vkMaxGeometryInputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 188) (vkMaxGeometryOutputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 192) (vkMaxGeometryOutputVertices (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 196) (vkMaxGeometryTotalOutputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 200) (vkMaxFragmentInputComponents (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 204) (vkMaxFragmentOutputAttachments (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 208) (vkMaxFragmentDualSrcAttachments (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 212) (vkMaxFragmentCombinedOutputResources (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 216) (vkMaxComputeSharedMemorySize (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 220) (vkMaxComputeWorkGroupCount (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 232) (vkMaxComputeWorkGroupInvocations (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 236) (vkMaxComputeWorkGroupSize (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 248) (vkSubPixelPrecisionBits (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 252) (vkSubTexelPrecisionBits (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 256) (vkMipmapPrecisionBits (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 260) (vkMaxDrawIndexedIndexValue (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 264) (vkMaxDrawIndirectCount (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 268) (vkMaxSamplerLodBias (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 272) (vkMaxSamplerAnisotropy (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 276) (vkMaxViewports (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 280) (vkMaxViewportDimensions (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 288) (vkViewportBoundsRange (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 296) (vkViewportSubPixelBits (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 304) (vkMinMemoryMapAlignment (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 312) (vkMinTexelBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 320) (vkMinUniformBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 328) (vkMinStorageBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 336) (vkMinTexelOffset (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 340) (vkMaxTexelOffset (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 344) (vkMinTexelGatherOffset (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 348) (vkMaxTexelGatherOffset (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 352) (vkMinInterpolationOffset (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 356) (vkMaxInterpolationOffset (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 360) (vkSubPixelInterpolationOffsetBits (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 364) (vkMaxFramebufferWidth (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 368) (vkMaxFramebufferHeight (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 372) (vkMaxFramebufferLayers (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 376) (vkFramebufferColorSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 380) (vkFramebufferDepthSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 384) (vkFramebufferStencilSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 388) (vkFramebufferNoAttachmentsSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 392) (vkMaxColorAttachments (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 396) (vkSampledImageColorSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 400) (vkSampledImageIntegerSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 404) (vkSampledImageDepthSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 408) (vkSampledImageStencilSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 412) (vkStorageImageSampleCounts (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 416) (vkMaxSampleMaskWords (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 420) (vkTimestampComputeAndGraphics (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 424) (vkTimestampPeriod (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 428) (vkMaxClipDistances (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 432) (vkMaxCullDistances (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 436) (vkMaxCombinedClipAndCullDistances (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 440) (vkDiscreteQueuePriorities (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 444) (vkPointSizeRange (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 452) (vkLineWidthRange (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 460) (vkPointSizeGranularity (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 464) (vkLineWidthGranularity (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 468) (vkStrictLines (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 472) (vkStandardSampleLocations (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 480) (vkOptimalBufferCopyOffsetAlignment (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 488) (vkOptimalBufferCopyRowPitchAlignment (poked :: VkPhysicalDeviceLimits))
-                *> poke (ptr `plusPtr` 496) (vkNonCoherentAtomSize (poked :: VkPhysicalDeviceLimits))
--- | VkQueueFlags - Bitmask of VkQueueFlagBits
---
--- = Description
--- #_description#
---
--- @VkQueueFlags@ is a bitmask type for setting a mask of zero or more
--- 'VkQueueFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkQueueFamilyProperties', 'VkQueueFlagBits'
-type VkQueueFlags = VkQueueFlagBits
--- | VkMemoryPropertyFlags - Bitmask of VkMemoryPropertyFlagBits
---
--- = Description
--- #_description#
---
--- @VkMemoryPropertyFlags@ is a bitmask type for setting a mask of zero or
--- more 'VkMemoryPropertyFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkMemoryPropertyFlagBits', 'VkMemoryType'
-type VkMemoryPropertyFlags = VkMemoryPropertyFlagBits
--- | VkMemoryHeapFlags - Bitmask of VkMemoryHeapFlagBits
---
--- = Description
--- #_description#
---
--- @VkMemoryHeapFlags@ is a bitmask type for setting a mask of zero or more
--- 'VkMemoryHeapFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkMemoryHeap', 'VkMemoryHeapFlagBits'
-type VkMemoryHeapFlags = VkMemoryHeapFlagBits
--- | VkImageUsageFlags - Bitmask of VkImageUsageFlagBits
---
--- = Description
--- #_description#
---
--- @VkImageUsageFlags@ is a bitmask type for setting a mask of zero or more
--- 'VkImageUsageFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
--- 'VkImageUsageFlagBits',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
--- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'vkGetPhysicalDeviceImageFormatProperties',
--- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
-type VkImageUsageFlags = VkImageUsageFlagBits
--- | VkImageCreateFlags - Bitmask of VkImageCreateFlagBits
---
--- = Description
--- #_description#
---
--- @VkImageCreateFlags@ is a bitmask type for setting a mask of zero or
--- more 'VkImageCreateFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkImageCreateFlagBits',
--- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
--- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
--- 'vkGetPhysicalDeviceImageFormatProperties'
-type VkImageCreateFlags = VkImageCreateFlagBits
--- | VkFormatFeatureFlags - Bitmask of VkFormatFeatureFlagBits
---
--- = Description
--- #_description#
---
--- @VkFormatFeatureFlags@ is a bitmask type for setting a mask of zero or
--- more 'VkFormatFeatureFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
--- 'VkFormatFeatureFlagBits', 'VkFormatProperties'
-type VkFormatFeatureFlags = VkFormatFeatureFlagBits
--- | VkSampleCountFlags - Bitmask of VkSampleCountFlagBits
---
--- = Description
--- #_description#
---
--- @VkSampleCountFlags@ is a bitmask type for setting a mask of zero or
--- more 'VkSampleCountFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkImageFormatProperties', 'VkPhysicalDeviceLimits',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT',
--- 'VkSampleCountFlagBits'
-type VkSampleCountFlags = VkSampleCountFlagBits
--- | VkDeviceSize - Vulkan device memory size and offsets
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'vkGetPhysicalDeviceImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
+newtype VkImageTiling = VkImageTiling Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkImageTiling where
+  showsPrec _ VK_IMAGE_TILING_OPTIMAL = showString "VK_IMAGE_TILING_OPTIMAL"
+  showsPrec _ VK_IMAGE_TILING_LINEAR = showString "VK_IMAGE_TILING_LINEAR"
+  showsPrec p (VkImageTiling x) = showParen (p >= 11) (showString "VkImageTiling " . showsPrec 11 x)
+
+instance Read VkImageTiling where
+  readPrec = parens ( choose [ ("VK_IMAGE_TILING_OPTIMAL", pure VK_IMAGE_TILING_OPTIMAL)
+                             , ("VK_IMAGE_TILING_LINEAR",  pure VK_IMAGE_TILING_LINEAR)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageTiling")
+                        v <- step readPrec
+                        pure (VkImageTiling v)
+                        )
+                    )
+
+-- | @VK_IMAGE_TILING_OPTIMAL@ specifies optimal tiling (texels are laid out
+-- in an implementation-dependent arrangement, for more optimal memory
+-- access).
+pattern VK_IMAGE_TILING_OPTIMAL :: VkImageTiling
+pattern VK_IMAGE_TILING_OPTIMAL = VkImageTiling 0
+
+-- | @VK_IMAGE_TILING_LINEAR@ specifies linear tiling (texels are laid out in
+-- memory in row-major order, possibly with some padding on each row).
+pattern VK_IMAGE_TILING_LINEAR :: VkImageTiling
+pattern VK_IMAGE_TILING_LINEAR = VkImageTiling 1
+-- ** VkImageType
+
+-- | VkImageType - Specifies the type of an image object
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'vkGetPhysicalDeviceImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
+newtype VkImageType = VkImageType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkImageType where
+  showsPrec _ VK_IMAGE_TYPE_1D = showString "VK_IMAGE_TYPE_1D"
+  showsPrec _ VK_IMAGE_TYPE_2D = showString "VK_IMAGE_TYPE_2D"
+  showsPrec _ VK_IMAGE_TYPE_3D = showString "VK_IMAGE_TYPE_3D"
+  showsPrec p (VkImageType x) = showParen (p >= 11) (showString "VkImageType " . showsPrec 11 x)
+
+instance Read VkImageType where
+  readPrec = parens ( choose [ ("VK_IMAGE_TYPE_1D", pure VK_IMAGE_TYPE_1D)
+                             , ("VK_IMAGE_TYPE_2D", pure VK_IMAGE_TYPE_2D)
+                             , ("VK_IMAGE_TYPE_3D", pure VK_IMAGE_TYPE_3D)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageType")
+                        v <- step readPrec
+                        pure (VkImageType v)
+                        )
+                    )
+
+-- | @VK_IMAGE_TYPE_1D@ specifies a one-dimensional image.
+pattern VK_IMAGE_TYPE_1D :: VkImageType
+pattern VK_IMAGE_TYPE_1D = VkImageType 0
+
+-- | @VK_IMAGE_TYPE_2D@ specifies a two-dimensional image.
+pattern VK_IMAGE_TYPE_2D :: VkImageType
+pattern VK_IMAGE_TYPE_2D = VkImageType 1
+
+-- | @VK_IMAGE_TYPE_3D@ specifies a three-dimensional image.
+pattern VK_IMAGE_TYPE_3D :: VkImageType
+pattern VK_IMAGE_TYPE_3D = VkImageType 2
+-- ** VkPhysicalDeviceType
+
+-- | VkPhysicalDeviceType - Supported physical device types
+--
+-- = Description
+--
+-- -   @VK_PHYSICAL_DEVICE_TYPE_OTHER@ - the device does not match any
+--     other available types.
+--
+-- -   @VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU@ - the device is typically
+--     one embedded in or tightly coupled with the host.
+--
+-- -   @VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU@ - the device is typically a
+--     separate processor connected to the host via an interlink.
+--
+-- -   @VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU@ - the device is typically a
+--     virtual node in a virtualization environment.
+--
+-- -   @VK_PHYSICAL_DEVICE_TYPE_CPU@ - the device is typically running on
+--     the same processors as the host.
+--
+-- The physical device type is advertised for informational purposes only,
+-- and does not directly affect the operation of the system. However, the
+-- device type /may/ correlate with other advertised properties or
+-- capabilities of the system, such as how many memory heaps there are.
+--
+-- = See Also
+--
+-- 'VkPhysicalDeviceProperties'
+newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkPhysicalDeviceType where
+  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_OTHER = showString "VK_PHYSICAL_DEVICE_TYPE_OTHER"
+  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
+  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
+  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = showString "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
+  showsPrec _ VK_PHYSICAL_DEVICE_TYPE_CPU = showString "VK_PHYSICAL_DEVICE_TYPE_CPU"
+  showsPrec p (VkPhysicalDeviceType x) = showParen (p >= 11) (showString "VkPhysicalDeviceType " . showsPrec 11 x)
+
+instance Read VkPhysicalDeviceType where
+  readPrec = parens ( choose [ ("VK_PHYSICAL_DEVICE_TYPE_OTHER",          pure VK_PHYSICAL_DEVICE_TYPE_OTHER)
+                             , ("VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU", pure VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU)
+                             , ("VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU",   pure VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
+                             , ("VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU",    pure VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU)
+                             , ("VK_PHYSICAL_DEVICE_TYPE_CPU",            pure VK_PHYSICAL_DEVICE_TYPE_CPU)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPhysicalDeviceType")
+                        v <- step readPrec
+                        pure (VkPhysicalDeviceType v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_OTHER"
+pattern VK_PHYSICAL_DEVICE_TYPE_OTHER :: VkPhysicalDeviceType
+pattern VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0
+
+-- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU"
+pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU :: VkPhysicalDeviceType
+pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = VkPhysicalDeviceType 1
+
+-- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU"
+pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU :: VkPhysicalDeviceType
+pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = VkPhysicalDeviceType 2
+
+-- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU"
+pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU :: VkPhysicalDeviceType
+pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = VkPhysicalDeviceType 3
+
+-- No documentation found for Nested "VkPhysicalDeviceType" "VK_PHYSICAL_DEVICE_TYPE_CPU"
+pattern VK_PHYSICAL_DEVICE_TYPE_CPU :: VkPhysicalDeviceType
+pattern VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4
+-- ** VkSystemAllocationScope
+
+-- | VkSystemAllocationScope - Allocation scope
+--
+-- = Description
+--
+-- -   @VK_SYSTEM_ALLOCATION_SCOPE_COMMAND@ specifies that the allocation
+--     is scoped to the duration of the Vulkan command.
+--
+-- -   @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@ specifies that the allocation is
+--     scoped to the lifetime of the Vulkan object that is being created or
+--     used.
+--
+-- -   @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@ specifies that the allocation is
+--     scoped to the lifetime of a @VkPipelineCache@ or
+--     @VkValidationCacheEXT@ object.
+--
+-- -   @VK_SYSTEM_ALLOCATION_SCOPE_DEVICE@ specifies that the allocation is
+--     scoped to the lifetime of the Vulkan device.
+--
+-- -   @VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE@ specifies that the allocation
+--     is scoped to the lifetime of the Vulkan instance.
+--
+-- Most Vulkan commands operate on a single object, or there is a sole
+-- object that is being created or manipulated. When an allocation uses an
+-- allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@ or
+-- @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@, the allocation is scoped to the
+-- object being created or manipulated.
+--
+-- When an implementation requires host memory, it will make callbacks to
+-- the application using the most specific allocator and allocation scope
+-- available:
+--
+-- -   If an allocation is scoped to the duration of a command, the
+--     allocator will use the @VK_SYSTEM_ALLOCATION_SCOPE_COMMAND@
+--     allocation scope. The most specific allocator available is used: if
+--     the object being created or manipulated has an allocator, that
+--     object’s allocator will be used, else if the parent @VkDevice@ has
+--     an allocator it will be used, else if the parent @VkInstance@ has an
+--     allocator it will be used. Else,
+--
+-- -   If an allocation is associated with an object of type
+--     @VkValidationCacheEXT@ or @VkPipelineCache@, the allocator will use
+--     the @VK_SYSTEM_ALLOCATION_SCOPE_CACHE@ allocation scope. The most
+--     specific allocator available is used (cache, else device, else
+--     instance). Else,
+--
+-- -   If an allocation is scoped to the lifetime of an object, that object
+--     is being created or manipulated by the command, and that object’s
+--     type is not @VkDevice@ or @VkInstance@, the allocator will use an
+--     allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_OBJECT@. The most
+--     specific allocator available is used (object, else device, else
+--     instance). Else,
+--
+-- -   If an allocation is scoped to the lifetime of a device, the
+--     allocator will use an allocation scope of
+--     @VK_SYSTEM_ALLOCATION_SCOPE_DEVICE@. The most specific allocator
+--     available is used (device, else instance). Else,
+--
+-- -   If the allocation is scoped to the lifetime of an instance and the
+--     instance has an allocator, its allocator will be used with an
+--     allocation scope of @VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE@.
+--
+-- -   Otherwise an implementation will allocate memory through an
+--     alternative mechanism that is unspecified.
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks'
+newtype VkSystemAllocationScope = VkSystemAllocationScope Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSystemAllocationScope where
+  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = showString "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"
+  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = showString "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"
+  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_CACHE = showString "VK_SYSTEM_ALLOCATION_SCOPE_CACHE"
+  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = showString "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"
+  showsPrec _ VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = showString "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"
+  showsPrec p (VkSystemAllocationScope x) = showParen (p >= 11) (showString "VkSystemAllocationScope " . showsPrec 11 x)
+
+instance Read VkSystemAllocationScope where
+  readPrec = parens ( choose [ ("VK_SYSTEM_ALLOCATION_SCOPE_COMMAND",  pure VK_SYSTEM_ALLOCATION_SCOPE_COMMAND)
+                             , ("VK_SYSTEM_ALLOCATION_SCOPE_OBJECT",   pure VK_SYSTEM_ALLOCATION_SCOPE_OBJECT)
+                             , ("VK_SYSTEM_ALLOCATION_SCOPE_CACHE",    pure VK_SYSTEM_ALLOCATION_SCOPE_CACHE)
+                             , ("VK_SYSTEM_ALLOCATION_SCOPE_DEVICE",   pure VK_SYSTEM_ALLOCATION_SCOPE_DEVICE)
+                             , ("VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE", pure VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSystemAllocationScope")
+                        v <- step readPrec
+                        pure (VkSystemAllocationScope v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_COMMAND"
+pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND :: VkSystemAllocationScope
+pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = VkSystemAllocationScope 0
+
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_OBJECT"
+pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT :: VkSystemAllocationScope
+pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = VkSystemAllocationScope 1
+
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_CACHE"
+pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE :: VkSystemAllocationScope
+pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE = VkSystemAllocationScope 2
+
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_DEVICE"
+pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE :: VkSystemAllocationScope
+pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = VkSystemAllocationScope 3
+
+-- No documentation found for Nested "VkSystemAllocationScope" "VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE"
+pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE :: VkSystemAllocationScope
+pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = VkSystemAllocationScope 4
+-- ** VkInternalAllocationType
+
+-- | VkInternalAllocationType - Allocation type
+--
+-- = See Also
+--
+-- 'PFN_vkInternalAllocationNotification', 'PFN_vkInternalFreeNotification'
+newtype VkInternalAllocationType = VkInternalAllocationType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkInternalAllocationType where
+  showsPrec _ VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = showString "VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE"
+  showsPrec p (VkInternalAllocationType x) = showParen (p >= 11) (showString "VkInternalAllocationType " . showsPrec 11 x)
+
+instance Read VkInternalAllocationType where
+  readPrec = parens ( choose [ ("VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE", pure VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkInternalAllocationType")
+                        v <- step readPrec
+                        pure (VkInternalAllocationType v)
+                        )
+                    )
+
+-- | @VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE@ specifies that the allocation
+-- is intended for execution by the host.
+pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE :: VkInternalAllocationType
+pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = VkInternalAllocationType 0
+-- ** VkInstanceCreateFlags
+
+-- | VkInstanceCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkInstanceCreateFlags@ is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkInstanceCreateInfo'
+newtype VkInstanceCreateFlags = VkInstanceCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkInstanceCreateFlags where
+  
+  showsPrec p (VkInstanceCreateFlags x) = showParen (p >= 11) (showString "VkInstanceCreateFlags " . showsPrec 11 x)
+
+instance Read VkInstanceCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkInstanceCreateFlags")
+                        v <- step readPrec
+                        pure (VkInstanceCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkQueueFlagBits
+
+-- | VkQueueFlagBits - Bitmask specifying capabilities of queues in a queue
+-- family
+--
+-- = Description
+--
+-- -   @VK_QUEUE_GRAPHICS_BIT@ specifies that queues in this queue family
+--     support graphics operations.
+--
+-- -   @VK_QUEUE_COMPUTE_BIT@ specifies that queues in this queue family
+--     support compute operations.
+--
+-- -   @VK_QUEUE_TRANSFER_BIT@ specifies that queues in this queue family
+--     support transfer operations.
+--
+-- -   @VK_QUEUE_SPARSE_BINDING_BIT@ specifies that queues in this queue
+--     family support sparse memory management operations (see [Sparse
+--     Resources](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory)).
+--     If any of the sparse resource features are enabled, then at least
+--     one queue family /must/ support this bit.
+--
+-- If an implementation exposes any queue family that supports graphics
+-- operations, at least one queue family of at least one physical device
+-- exposed by the implementation /must/ support both graphics and compute
+-- operations.
+--
+-- __Note__
+--
+-- All commands that are allowed on a queue that supports transfer
+-- operations are also allowed on a queue that supports either graphics or
+-- compute operations. Thus, if the capabilities of a queue family include
+-- @VK_QUEUE_GRAPHICS_BIT@ or @VK_QUEUE_COMPUTE_BIT@, then reporting the
+-- @VK_QUEUE_TRANSFER_BIT@ capability separately for that queue family is
+-- /optional/.
+--
+-- For further details see
+-- [Queues](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-queues).
+--
+-- = See Also
+--
+-- 'VkQueueFlags'
+newtype VkQueueFlagBits = VkQueueFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkQueueFlagBits where
+  showsPrec _ VK_QUEUE_GRAPHICS_BIT = showString "VK_QUEUE_GRAPHICS_BIT"
+  showsPrec _ VK_QUEUE_COMPUTE_BIT = showString "VK_QUEUE_COMPUTE_BIT"
+  showsPrec _ VK_QUEUE_TRANSFER_BIT = showString "VK_QUEUE_TRANSFER_BIT"
+  showsPrec _ VK_QUEUE_SPARSE_BINDING_BIT = showString "VK_QUEUE_SPARSE_BINDING_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkQueueFlagBits 0x00000010) = showString "VK_QUEUE_PROTECTED_BIT"
+  showsPrec p (VkQueueFlagBits x) = showParen (p >= 11) (showString "VkQueueFlagBits " . showsPrec 11 x)
+
+instance Read VkQueueFlagBits where
+  readPrec = parens ( choose [ ("VK_QUEUE_GRAPHICS_BIT",       pure VK_QUEUE_GRAPHICS_BIT)
+                             , ("VK_QUEUE_COMPUTE_BIT",        pure VK_QUEUE_COMPUTE_BIT)
+                             , ("VK_QUEUE_TRANSFER_BIT",       pure VK_QUEUE_TRANSFER_BIT)
+                             , ("VK_QUEUE_SPARSE_BINDING_BIT", pure VK_QUEUE_SPARSE_BINDING_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_QUEUE_PROTECTED_BIT", pure (VkQueueFlagBits 0x00000010))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkQueueFlagBits")
+                        v <- step readPrec
+                        pure (VkQueueFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_GRAPHICS_BIT"
+pattern VK_QUEUE_GRAPHICS_BIT :: VkQueueFlagBits
+pattern VK_QUEUE_GRAPHICS_BIT = VkQueueFlagBits 0x00000001
+
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_COMPUTE_BIT"
+pattern VK_QUEUE_COMPUTE_BIT :: VkQueueFlagBits
+pattern VK_QUEUE_COMPUTE_BIT = VkQueueFlagBits 0x00000002
+
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_TRANSFER_BIT"
+pattern VK_QUEUE_TRANSFER_BIT :: VkQueueFlagBits
+pattern VK_QUEUE_TRANSFER_BIT = VkQueueFlagBits 0x00000004
+
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_SPARSE_BINDING_BIT"
+pattern VK_QUEUE_SPARSE_BINDING_BIT :: VkQueueFlagBits
+pattern VK_QUEUE_SPARSE_BINDING_BIT = VkQueueFlagBits 0x00000008
+-- ** VkMemoryPropertyFlagBits
+
+-- | VkMemoryPropertyFlagBits - Bitmask specifying properties for a memory
+-- type
+--
+-- = See Also
+--
+-- 'VkMemoryPropertyFlags'
+newtype VkMemoryPropertyFlagBits = VkMemoryPropertyFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkMemoryPropertyFlagBits where
+  showsPrec _ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = showString "VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"
+  showsPrec _ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = showString "VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"
+  showsPrec _ VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = showString "VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"
+  showsPrec _ VK_MEMORY_PROPERTY_HOST_CACHED_BIT = showString "VK_MEMORY_PROPERTY_HOST_CACHED_BIT"
+  showsPrec _ VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = showString "VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkMemoryPropertyFlagBits 0x00000020) = showString "VK_MEMORY_PROPERTY_PROTECTED_BIT"
+  showsPrec p (VkMemoryPropertyFlagBits x) = showParen (p >= 11) (showString "VkMemoryPropertyFlagBits " . showsPrec 11 x)
+
+instance Read VkMemoryPropertyFlagBits where
+  readPrec = parens ( choose [ ("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT",     pure VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
+                             , ("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT",     pure VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
+                             , ("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT",    pure VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
+                             , ("VK_MEMORY_PROPERTY_HOST_CACHED_BIT",      pure VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
+                             , ("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT", pure VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_MEMORY_PROPERTY_PROTECTED_BIT", pure (VkMemoryPropertyFlagBits 0x00000020))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkMemoryPropertyFlagBits")
+                        v <- step readPrec
+                        pure (VkMemoryPropertyFlagBits v)
+                        )
+                    )
+
+-- | @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ bit specifies that memory
+-- allocated with this type is the most efficient for device access. This
+-- property will be set if and only if the memory type belongs to a heap
+-- with the @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ set.
+pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT :: VkMemoryPropertyFlagBits
+pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = VkMemoryPropertyFlagBits 0x00000001
+
+-- | @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ bit specifies that memory
+-- allocated with this type /can/ be mapped for host access using
+-- 'Graphics.Vulkan.Core10.Memory.vkMapMemory'.
+pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT :: VkMemoryPropertyFlagBits
+pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = VkMemoryPropertyFlagBits 0x00000002
+
+-- | @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ bit specifies that the host cache
+-- management commands
+-- 'Graphics.Vulkan.Core10.Memory.vkFlushMappedMemoryRanges' and
+-- 'Graphics.Vulkan.Core10.Memory.vkInvalidateMappedMemoryRanges' are not
+-- needed to flush host writes to the device or make device writes visible
+-- to the host, respectively.
+pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT :: VkMemoryPropertyFlagBits
+pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = VkMemoryPropertyFlagBits 0x00000004
+
+-- | @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ bit specifies that memory allocated
+-- with this type is cached on the host. Host memory accesses to uncached
+-- memory are slower than to cached memory, however uncached memory is
+-- always host coherent.
+pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT :: VkMemoryPropertyFlagBits
+pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT = VkMemoryPropertyFlagBits 0x00000008
+
+-- | @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ bit specifies that the memory
+-- type only allows device access to the memory. Memory types /must/ not
+-- have both @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ and
+-- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ set. Additionally, the object’s
+-- backing memory /may/ be provided by the implementation lazily as
+-- specified in [Lazily Allocated
+-- Memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-lazy_allocation).
+pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT :: VkMemoryPropertyFlagBits
+pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = VkMemoryPropertyFlagBits 0x00000010
+-- ** VkMemoryHeapFlagBits
+
+-- | VkMemoryHeapFlagBits - Bitmask specifying attribute flags for a heap
+--
+-- = See Also
+--
+-- 'VkMemoryHeapFlags'
+newtype VkMemoryHeapFlagBits = VkMemoryHeapFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkMemoryHeapFlagBits where
+  showsPrec _ VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = showString "VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkMemoryHeapFlagBits 0x00000002) = showString "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"
+  showsPrec p (VkMemoryHeapFlagBits x) = showParen (p >= 11) (showString "VkMemoryHeapFlagBits " . showsPrec 11 x)
+
+instance Read VkMemoryHeapFlagBits where
+  readPrec = parens ( choose [ ("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT", pure VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_MEMORY_HEAP_MULTI_INSTANCE_BIT", pure (VkMemoryHeapFlagBits 0x00000002))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkMemoryHeapFlagBits")
+                        v <- step readPrec
+                        pure (VkMemoryHeapFlagBits v)
+                        )
+                    )
+
+-- | @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ specifies that the heap corresponds to
+-- device local memory. Device local memory /may/ have different
+-- performance characteristics than host local memory, and /may/ support
+-- different memory property flags.
+pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT :: VkMemoryHeapFlagBits
+pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = VkMemoryHeapFlagBits 0x00000001
+-- ** VkImageUsageFlagBits
+
+-- | VkImageUsageFlagBits - Bitmask specifying intended usage of an image
+--
+-- = See Also
+--
+-- 'VkImageUsageFlags'
+newtype VkImageUsageFlagBits = VkImageUsageFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkImageUsageFlagBits where
+  showsPrec _ VK_IMAGE_USAGE_TRANSFER_SRC_BIT = showString "VK_IMAGE_USAGE_TRANSFER_SRC_BIT"
+  showsPrec _ VK_IMAGE_USAGE_TRANSFER_DST_BIT = showString "VK_IMAGE_USAGE_TRANSFER_DST_BIT"
+  showsPrec _ VK_IMAGE_USAGE_SAMPLED_BIT = showString "VK_IMAGE_USAGE_SAMPLED_BIT"
+  showsPrec _ VK_IMAGE_USAGE_STORAGE_BIT = showString "VK_IMAGE_USAGE_STORAGE_BIT"
+  showsPrec _ VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"
+  showsPrec _ VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"
+  showsPrec _ VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"
+  showsPrec _ VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = showString "VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"
+  showsPrec p (VkImageUsageFlagBits x) = showParen (p >= 11) (showString "VkImageUsageFlagBits " . showsPrec 11 x)
+
+instance Read VkImageUsageFlagBits where
+  readPrec = parens ( choose [ ("VK_IMAGE_USAGE_TRANSFER_SRC_BIT",             pure VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
+                             , ("VK_IMAGE_USAGE_TRANSFER_DST_BIT",             pure VK_IMAGE_USAGE_TRANSFER_DST_BIT)
+                             , ("VK_IMAGE_USAGE_SAMPLED_BIT",                  pure VK_IMAGE_USAGE_SAMPLED_BIT)
+                             , ("VK_IMAGE_USAGE_STORAGE_BIT",                  pure VK_IMAGE_USAGE_STORAGE_BIT)
+                             , ("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT",         pure VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
+                             , ("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT", pure VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
+                             , ("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT",     pure VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
+                             , ("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT",         pure VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageUsageFlagBits")
+                        v <- step readPrec
+                        pure (VkImageUsageFlagBits v)
+                        )
+                    )
+
+-- | @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ specifies that the image /can/ be used
+-- as the source of a transfer command.
+pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT = VkImageUsageFlagBits 0x00000001
+
+-- | @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ specifies that the image /can/ be used
+-- as the destination of a transfer command.
+pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT = VkImageUsageFlagBits 0x00000002
+
+-- | @VK_IMAGE_USAGE_SAMPLED_BIT@ specifies that the image /can/ be used to
+-- create a @VkImageView@ suitable for occupying a @VkDescriptorSet@ slot
+-- either of type @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ or
+-- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, and be sampled by a shader.
+pattern VK_IMAGE_USAGE_SAMPLED_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_SAMPLED_BIT = VkImageUsageFlagBits 0x00000004
+
+-- | @VK_IMAGE_USAGE_STORAGE_BIT@ specifies that the image /can/ be used to
+-- create a @VkImageView@ suitable for occupying a @VkDescriptorSet@ slot
+-- of type @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@.
+pattern VK_IMAGE_USAGE_STORAGE_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_STORAGE_BIT = VkImageUsageFlagBits 0x00000008
+
+-- | @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ specifies that the image /can/ be
+-- used to create a @VkImageView@ suitable for use as a color or resolve
+-- attachment in a @VkFramebuffer@.
+pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000010
+
+-- | @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ specifies that the image
+-- /can/ be used to create a @VkImageView@ suitable for use as a
+-- depth\/stencil attachment in a @VkFramebuffer@.
+pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000020
+
+-- | @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@ specifies that the memory
+-- bound to this image will have been allocated with the
+-- @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ (see
+-- [{html_spec_relative}#memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory)
+-- for more detail). This bit /can/ be set for any image that /can/ be used
+-- to create a @VkImageView@ suitable for use as a color, resolve,
+-- depth\/stencil, or input attachment.
+pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000040
+
+-- | @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ specifies that the image /can/ be
+-- used to create a @VkImageView@ suitable for occupying @VkDescriptorSet@
+-- slot of type @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@; be read from a
+-- shader as an input attachment; and be used as an input attachment in a
+-- framebuffer.
+pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT :: VkImageUsageFlagBits
+pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x00000080
+-- ** VkImageCreateFlagBits
+
+-- | VkImageCreateFlagBits - Bitmask specifying additional parameters of an
+-- image
+--
+-- = Description
+--
+-- -   @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ specifies that the image will
+--     be backed using sparse memory binding.
+--
+-- -   @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ specifies that the image
+--     /can/ be partially backed using sparse memory binding. Images
+--     created with this flag /must/ also be created with the
+--     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ flag.
+--
+-- -   @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ specifies that the image will
+--     be backed using sparse memory binding with memory ranges that might
+--     also simultaneously be backing another image (or another portion of
+--     the same image). Images created with this flag /must/ also be
+--     created with the @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ flag
+--
+-- -   @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ specifies that the image /can/
+--     be used to create a @VkImageView@ with a different format from the
+--     image. For
+--     [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     formats, @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ specifies that a
+--     @VkImageView@ can be created of a /plane/ of the image.
+--
+-- -   @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ specifies that the image /can/
+--     be used to create a @VkImageView@ of type @VK_IMAGE_VIEW_TYPE_CUBE@
+--     or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@.
+--
+-- -   @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ specifies that the image
+--     /can/ be used to create a @VkImageView@ of type
+--     @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@.
+--
+-- -   @VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT@ specifies that the
+--     image /can/ be used with a non-zero value of the
+--     @splitInstanceBindRegionCount@ member of a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo'
+--     structure passed into
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2'.
+--     This flag also has the effect of making the image use the standard
+--     sparse image block dimensions.
+--
+-- -   @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ specifies that the
+--     image having a compressed format /can/ be used to create a
+--     @VkImageView@ with an uncompressed format where each texel in the
+--     image view corresponds to a compressed texel block of the image.
+--
+-- -   @VK_IMAGE_CREATE_EXTENDED_USAGE_BIT@ specifies that the image /can/
+--     be created with usage flags that are not supported for the format
+--     the image is created with but are supported for at least one format
+--     a @VkImageView@ created from the image /can/ have.
+--
+-- -   @VK_IMAGE_CREATE_DISJOINT_BIT@ specifies that an image with a
+--     [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     /must/ have each plane separately bound to memory, rather than
+--     having a single memory binding for the whole image; the presence of
+--     this bit distinguishes a /disjoint image/ from an image without this
+--     bit set.
+--
+-- -   @VK_IMAGE_CREATE_ALIAS_BIT@ specifies that two images created with
+--     the same creation parameters and aliased to the same memory /can/
+--     interpret the contents of the memory consistently with each other,
+--     subject to the rules described in the [Memory
+--     Aliasing](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-memory-aliasing)
+--     section. This flag further specifies that each plane of a /disjoint/
+--     image /can/ share an in-memory non-linear representation with
+--     single-plane images, and that a single-plane image /can/ share an
+--     in-memory non-linear representation with a plane of a multi-planar
+--     disjoint image, according to the rules in
+--     [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes).
+--     If the @pNext@ chain includes a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV'
+--     structure whose @handleTypes@ member is not @0@, it is as if
+--     @VK_IMAGE_CREATE_ALIAS_BIT@ is set.
+--
+-- -   @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@
+--     specifies that an image with a depth or depth\/stencil format /can/
+--     be used with custom sample locations when used as a depth\/stencil
+--     attachment.
+--
+-- See [Sparse Resource
+-- Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures)
+-- and [Sparse Physical Device
+-- Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-physicalfeatures)
+-- for more details.
+--
+-- = See Also
+--
+-- 'VkImageCreateFlags'
+newtype VkImageCreateFlagBits = VkImageCreateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkImageCreateFlagBits where
+  showsPrec _ VK_IMAGE_CREATE_SPARSE_BINDING_BIT = showString "VK_IMAGE_CREATE_SPARSE_BINDING_BIT"
+  showsPrec _ VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = showString "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"
+  showsPrec _ VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = showString "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"
+  showsPrec _ VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = showString "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"
+  showsPrec _ VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = showString "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkImageCreateFlagBits 0x00000400) = showString "VK_IMAGE_CREATE_ALIAS_BIT"
+  showsPrec _ (VkImageCreateFlagBits 0x00000040) = showString "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"
+  showsPrec _ (VkImageCreateFlagBits 0x00000020) = showString "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"
+  showsPrec _ (VkImageCreateFlagBits 0x00000080) = showString "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"
+  showsPrec _ (VkImageCreateFlagBits 0x00000100) = showString "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"
+  showsPrec _ (VkImageCreateFlagBits 0x00000800) = showString "VK_IMAGE_CREATE_PROTECTED_BIT"
+  showsPrec _ (VkImageCreateFlagBits 0x00000200) = showString "VK_IMAGE_CREATE_DISJOINT_BIT"
+  showsPrec _ (VkImageCreateFlagBits 0x00001000) = showString "VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"
+  showsPrec p (VkImageCreateFlagBits x) = showParen (p >= 11) (showString "VkImageCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkImageCreateFlagBits where
+  readPrec = parens ( choose [ ("VK_IMAGE_CREATE_SPARSE_BINDING_BIT",   pure VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
+                             , ("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT", pure VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
+                             , ("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT",   pure VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
+                             , ("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT",   pure VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
+                             , ("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT",  pure VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_IMAGE_CREATE_ALIAS_BIT",                                 pure (VkImageCreateFlagBits 0x00000400))
+                             , ("VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT",           pure (VkImageCreateFlagBits 0x00000040))
+                             , ("VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT",                   pure (VkImageCreateFlagBits 0x00000020))
+                             , ("VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT",           pure (VkImageCreateFlagBits 0x00000080))
+                             , ("VK_IMAGE_CREATE_EXTENDED_USAGE_BIT",                        pure (VkImageCreateFlagBits 0x00000100))
+                             , ("VK_IMAGE_CREATE_PROTECTED_BIT",                             pure (VkImageCreateFlagBits 0x00000800))
+                             , ("VK_IMAGE_CREATE_DISJOINT_BIT",                              pure (VkImageCreateFlagBits 0x00000200))
+                             , ("VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT", pure (VkImageCreateFlagBits 0x00001000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkImageCreateFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_BINDING_BIT"
+pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT = VkImageCreateFlagBits 0x00000001
+
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"
+pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = VkImageCreateFlagBits 0x00000002
+
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"
+pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = VkImageCreateFlagBits 0x00000004
+
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"
+pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = VkImageCreateFlagBits 0x00000008
+
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"
+pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = VkImageCreateFlagBits 0x00000010
+-- ** VkFormatFeatureFlagBits
+
+-- | VkFormatFeatureFlagBits - Bitmask specifying features supported by a
+-- buffer
+--
+-- = Description
+--
+-- The following bits /may/ be set in @linearTilingFeatures@ and
+-- @optimalTilingFeatures@, specifying that the features are supported by
+-- [images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkImage)
+-- or [image
+-- views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkImageView)
+-- created with the queried
+-- 'vkGetPhysicalDeviceFormatProperties'::@format@:
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ specifies that an image view
+--     /can/ be [sampled
+--     from](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage).
+--
+-- -   @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@ specifies that an image view
+--     /can/ be used as a [storage
+--     images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage).
+--
+-- -   @VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT@ specifies that an image
+--     view /can/ be used as storage image that supports atomic operations.
+--
+-- -   @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ specifies that an image
+--     view /can/ be used as a framebuffer color attachment and as an input
+--     attachment.
+--
+-- -   @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT@ specifies that an
+--     image view /can/ be used as a framebuffer color attachment that
+--     supports blending and as an input attachment.
+--
+-- -   @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@ specifies that an
+--     image view /can/ be used as a framebuffer depth\/stencil attachment
+--     and as an input attachment.
+--
+-- -   @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ specifies that an image /can/ be
+--     used as @srcImage@ for the @vkCmdBlitImage@ command.
+--
+-- -   @VK_FORMAT_FEATURE_BLIT_DST_BIT@ specifies that an image /can/ be
+--     used as @dstImage@ for the @vkCmdBlitImage@ command.
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ specifies that
+--     if @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ is also set, an image view
+--     /can/ be used with a sampler that has either of @magFilter@ or
+--     @minFilter@ set to @VK_FILTER_LINEAR@, or @mipmapMode@ set to
+--     @VK_SAMPLER_MIPMAP_MODE_LINEAR@. If @VK_FORMAT_FEATURE_BLIT_SRC_BIT@
+--     is also set, an image can be used as the @srcImage@ to
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBlitImage' with a
+--     @filter@ of @VK_FILTER_LINEAR@. This bit /must/ only be exposed for
+--     formats that also support the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@
+--     or @VK_FORMAT_FEATURE_BLIT_SRC_BIT@.
+--
+--     If the format being queried is a depth\/stencil format, this bit
+--     only specifies that the depth aspect (not the stencil aspect) of an
+--     image of this format supports linear filtering, and that linear
+--     filtering of the depth aspect is supported whether depth compare is
+--     enabled in the sampler or not. If this bit is not present, linear
+--     filtering with depth compare disabled is unsupported and linear
+--     filtering with depth compare enabled is supported, but /may/ compute
+--     the filtered value in an implementation-dependent manner which
+--     differs from the normal rules of linear filtering. The resulting
+--     value /must/ be in the range [0,1] and /should/ be proportional to,
+--     or a weighted average of, the number of comparison passes or
+--     failures.
+--
+-- -   @VK_FORMAT_FEATURE_TRANSFER_SRC_BIT@ specifies that an image /can/
+--     be used as a source image for [copy
+--     commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies).
+--
+-- -   @VK_FORMAT_FEATURE_TRANSFER_DST_BIT@ specifies that an image /can/
+--     be used as a destination image for [copy
+--     commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies)
+--     and [clear
+--     commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears).
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT@ specifies
+--     @VkImage@ /can/ be used as a sampled image with a min or max
+--     'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkSamplerReductionModeEXT'.
+--     This bit /must/ only be exposed for formats that also support the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@.
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG@ specifies
+--     that @VkImage@ /can/ be used with a sampler that has either of
+--     @magFilter@ or @minFilter@ set to @VK_FILTER_CUBIC_IMG@, or be the
+--     source image for a blit with @filter@ set to @VK_FILTER_CUBIC_IMG@.
+--     This bit /must/ only be exposed for formats that also support the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@. If the format being queried
+--     is a depth\/stencil format, this only specifies that the depth
+--     aspect is cubic filterable.
+--
+-- -   @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@ specifies that an
+--     application /can/ define a [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+--     using this format as a source, and that an image of this format
+--     /can/ be used with a @VkSamplerYcbcrConversionCreateInfo@
+--     @xChromaOffset@ and\/or @yChromaOffset@ of
+--     @VK_CHROMA_LOCATION_MIDPOINT@. Otherwise both @xChromaOffset@ and
+--     @yChromaOffset@ /must/ be @VK_CHROMA_LOCATION_COSITED_EVEN@. If a
+--     format does not incorporate chroma downsampling (it is not a “422”
+--     or “420” format) but the implementation supports sampler Y’CBCR
+--     conversion for this format, the implementation /must/ set
+--     @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@.
+--
+-- -   @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@ specifies that an
+--     application /can/ define a [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+--     using this format as a source, and that an image of this format
+--     /can/ be used with a @VkSamplerYcbcrConversionCreateInfo@
+--     @xChromaOffset@ and\/or @yChromaOffset@ of
+--     @VK_CHROMA_LOCATION_COSITED_EVEN@. Otherwise both @xChromaOffset@
+--     and @yChromaOffset@ /must/ be @VK_CHROMA_LOCATION_MIDPOINT@. If
+--     neither @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@ nor
+--     @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@ is set, the
+--     application /must/ not define a [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+--     using this format as a source.
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT@
+--     specifies that the format can do linear sampler filtering
+--     (min\/magFilter) whilst sampler Y’CBCR conversion is enabled.
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT@
+--     specifies that the format can have different chroma, min, and mag
+--     filters.
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT@
+--     specifies that reconstruction is explicit, as described in
+--     [{html_spec_relative}#textures-chroma-reconstruction](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction).
+--     If this bit is not present, reconstruction is implicit by default.
+--
+-- -   @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT@
+--     specifies that reconstruction /can/ be forcibly made explicit by
+--     setting
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'::@forceExplicitReconstruction@
+--     to @VK_TRUE@.
+--
+-- -   @VK_FORMAT_FEATURE_DISJOINT_BIT@ specifies that a multi-planar image
+--     /can/ have the @VK_IMAGE_CREATE_DISJOINT_BIT@ set during image
+--     creation. An implementation /must/ not set
+--     @VK_FORMAT_FEATURE_DISJOINT_BIT@ for /single-plane formats/.
+--
+-- The following bits /may/ be set in @bufferFeatures@, specifying that the
+-- features are supported by
+-- [buffers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkBuffer)
+-- or [buffer
+-- views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkBufferView)
+-- created with the queried 'vkGetPhysicalDeviceProperties'::@format@:
+--
+-- -   @VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT@ specifies that the
+--     format /can/ be used to create a buffer view that /can/ be bound to
+--     a @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ descriptor.
+--
+-- -   @VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT@ specifies that the
+--     format /can/ be used to create a buffer view that /can/ be bound to
+--     a @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ descriptor.
+--
+-- -   @VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT@ specifies that
+--     atomic operations are supported on
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ with this format.
+--
+-- -   @VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT@ specifies that the format
+--     /can/ be used as a vertex attribute format
+--     (@VkVertexInputAttributeDescription@::@format@).
+--
+-- = See Also
+--
+-- 'VkFormatFeatureFlags'
+newtype VkFormatFeatureFlagBits = VkFormatFeatureFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkFormatFeatureFlagBits where
+  showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = showString "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = showString "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = showString "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = showString "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_BLIT_SRC_BIT = showString "VK_FORMAT_FEATURE_BLIT_SRC_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_BLIT_DST_BIT = showString "VK_FORMAT_FEATURE_BLIT_DST_BIT"
+  showsPrec _ VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkFormatFeatureFlagBits 0x00004000) = showString "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00008000) = showString "VK_FORMAT_FEATURE_TRANSFER_DST_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00020000) = showString "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00040000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00080000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00100000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00200000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00400000) = showString "VK_FORMAT_FEATURE_DISJOINT_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00800000) = showString "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00002000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"
+  showsPrec _ (VkFormatFeatureFlagBits 0x00010000) = showString "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT"
+  showsPrec p (VkFormatFeatureFlagBits x) = showParen (p >= 11) (showString "VkFormatFeatureFlagBits " . showsPrec 11 x)
+
+instance Read VkFormatFeatureFlagBits where
+  readPrec = parens ( choose [ ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT",               pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
+                             , ("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT",               pure VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
+                             , ("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT",        pure VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
+                             , ("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT",        pure VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
+                             , ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT",        pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
+                             , ("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT", pure VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
+                             , ("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT",               pure VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
+                             , ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT",            pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
+                             , ("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT",      pure VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
+                             , ("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT",    pure VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
+                             , ("VK_FORMAT_FEATURE_BLIT_SRC_BIT",                    pure VK_FORMAT_FEATURE_BLIT_SRC_BIT)
+                             , ("VK_FORMAT_FEATURE_BLIT_DST_BIT",                    pure VK_FORMAT_FEATURE_BLIT_DST_BIT)
+                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT", pure VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_FORMAT_FEATURE_TRANSFER_SRC_BIT",                                                            pure (VkFormatFeatureFlagBits 0x00004000))
+                             , ("VK_FORMAT_FEATURE_TRANSFER_DST_BIT",                                                            pure (VkFormatFeatureFlagBits 0x00008000))
+                             , ("VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT",                                                 pure (VkFormatFeatureFlagBits 0x00020000))
+                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT",                            pure (VkFormatFeatureFlagBits 0x00040000))
+                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT",           pure (VkFormatFeatureFlagBits 0x00080000))
+                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT",           pure (VkFormatFeatureFlagBits 0x00100000))
+                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT", pure (VkFormatFeatureFlagBits 0x00200000))
+                             , ("VK_FORMAT_FEATURE_DISJOINT_BIT",                                                                pure (VkFormatFeatureFlagBits 0x00400000))
+                             , ("VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT",                                                  pure (VkFormatFeatureFlagBits 0x00800000))
+                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG",                                          pure (VkFormatFeatureFlagBits 0x00002000))
+                             , ("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT",                                         pure (VkFormatFeatureFlagBits 0x00010000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkFormatFeatureFlagBits")
+                        v <- step readPrec
+                        pure (VkFormatFeatureFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = VkFormatFeatureFlagBits 0x00000001
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"
+pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = VkFormatFeatureFlagBits 0x00000002
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"
+pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = VkFormatFeatureFlagBits 0x00000004
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"
+pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000008
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"
+pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000010
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"
+pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = VkFormatFeatureFlagBits 0x00000020
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"
+pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = VkFormatFeatureFlagBits 0x00000040
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"
+pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x00000080
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"
+pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = VkFormatFeatureFlagBits 0x00000100
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"
+pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x00000200
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_BLIT_SRC_BIT"
+pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT = VkFormatFeatureFlagBits 0x00000400
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_BLIT_DST_BIT"
+pattern VK_FORMAT_FEATURE_BLIT_DST_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_BLIT_DST_BIT = VkFormatFeatureFlagBits 0x00000800
+
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = VkFormatFeatureFlagBits 0x00001000
+-- ** VkSampleCountFlagBits
+
+-- | VkSampleCountFlagBits - Bitmask specifying sample counts supported for
+-- an image used for storage operations
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription',
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo',
+-- 'VkSampleCountFlags',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
+newtype VkSampleCountFlagBits = VkSampleCountFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSampleCountFlagBits where
+  showsPrec _ VK_SAMPLE_COUNT_1_BIT = showString "VK_SAMPLE_COUNT_1_BIT"
+  showsPrec _ VK_SAMPLE_COUNT_2_BIT = showString "VK_SAMPLE_COUNT_2_BIT"
+  showsPrec _ VK_SAMPLE_COUNT_4_BIT = showString "VK_SAMPLE_COUNT_4_BIT"
+  showsPrec _ VK_SAMPLE_COUNT_8_BIT = showString "VK_SAMPLE_COUNT_8_BIT"
+  showsPrec _ VK_SAMPLE_COUNT_16_BIT = showString "VK_SAMPLE_COUNT_16_BIT"
+  showsPrec _ VK_SAMPLE_COUNT_32_BIT = showString "VK_SAMPLE_COUNT_32_BIT"
+  showsPrec _ VK_SAMPLE_COUNT_64_BIT = showString "VK_SAMPLE_COUNT_64_BIT"
+  showsPrec p (VkSampleCountFlagBits x) = showParen (p >= 11) (showString "VkSampleCountFlagBits " . showsPrec 11 x)
+
+instance Read VkSampleCountFlagBits where
+  readPrec = parens ( choose [ ("VK_SAMPLE_COUNT_1_BIT",  pure VK_SAMPLE_COUNT_1_BIT)
+                             , ("VK_SAMPLE_COUNT_2_BIT",  pure VK_SAMPLE_COUNT_2_BIT)
+                             , ("VK_SAMPLE_COUNT_4_BIT",  pure VK_SAMPLE_COUNT_4_BIT)
+                             , ("VK_SAMPLE_COUNT_8_BIT",  pure VK_SAMPLE_COUNT_8_BIT)
+                             , ("VK_SAMPLE_COUNT_16_BIT", pure VK_SAMPLE_COUNT_16_BIT)
+                             , ("VK_SAMPLE_COUNT_32_BIT", pure VK_SAMPLE_COUNT_32_BIT)
+                             , ("VK_SAMPLE_COUNT_64_BIT", pure VK_SAMPLE_COUNT_64_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSampleCountFlagBits")
+                        v <- step readPrec
+                        pure (VkSampleCountFlagBits v)
+                        )
+                    )
+
+-- | @VK_SAMPLE_COUNT_1_BIT@ specifies an image with one sample per pixel.
+pattern VK_SAMPLE_COUNT_1_BIT :: VkSampleCountFlagBits
+pattern VK_SAMPLE_COUNT_1_BIT = VkSampleCountFlagBits 0x00000001
+
+-- | @VK_SAMPLE_COUNT_2_BIT@ specifies an image with 2 samples per pixel.
+pattern VK_SAMPLE_COUNT_2_BIT :: VkSampleCountFlagBits
+pattern VK_SAMPLE_COUNT_2_BIT = VkSampleCountFlagBits 0x00000002
+
+-- | @VK_SAMPLE_COUNT_4_BIT@ specifies an image with 4 samples per pixel.
+pattern VK_SAMPLE_COUNT_4_BIT :: VkSampleCountFlagBits
+pattern VK_SAMPLE_COUNT_4_BIT = VkSampleCountFlagBits 0x00000004
+
+-- | @VK_SAMPLE_COUNT_8_BIT@ specifies an image with 8 samples per pixel.
+pattern VK_SAMPLE_COUNT_8_BIT :: VkSampleCountFlagBits
+pattern VK_SAMPLE_COUNT_8_BIT = VkSampleCountFlagBits 0x00000008
+
+-- | @VK_SAMPLE_COUNT_16_BIT@ specifies an image with 16 samples per pixel.
+pattern VK_SAMPLE_COUNT_16_BIT :: VkSampleCountFlagBits
+pattern VK_SAMPLE_COUNT_16_BIT = VkSampleCountFlagBits 0x00000010
+
+-- | @VK_SAMPLE_COUNT_32_BIT@ specifies an image with 32 samples per pixel.
+pattern VK_SAMPLE_COUNT_32_BIT :: VkSampleCountFlagBits
+pattern VK_SAMPLE_COUNT_32_BIT = VkSampleCountFlagBits 0x00000020
+
+-- | @VK_SAMPLE_COUNT_64_BIT@ specifies an image with 64 samples per pixel.
+pattern VK_SAMPLE_COUNT_64_BIT :: VkSampleCountFlagBits
+pattern VK_SAMPLE_COUNT_64_BIT = VkSampleCountFlagBits 0x00000040
+-- No documentation found for TopLevel "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"
+type VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
+-- No documentation found for Nested "Integral a => a" "VK_MAX_PHYSICAL_DEVICE_NAME_SIZE"
+pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE :: Integral a => a
+pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
+-- No documentation found for TopLevel "VK_UUID_SIZE"
+type VK_UUID_SIZE = 16
+-- No documentation found for Nested "Integral a => a" "VK_UUID_SIZE"
+pattern VK_UUID_SIZE :: Integral a => a
+pattern VK_UUID_SIZE = 16
+-- No documentation found for TopLevel "VK_MAX_MEMORY_TYPES"
+type VK_MAX_MEMORY_TYPES = 32
+-- No documentation found for Nested "Integral a => a" "VK_MAX_MEMORY_TYPES"
+pattern VK_MAX_MEMORY_TYPES :: Integral a => a
+pattern VK_MAX_MEMORY_TYPES = 32
+-- No documentation found for TopLevel "VK_MAX_MEMORY_HEAPS"
+type VK_MAX_MEMORY_HEAPS = 16
+-- No documentation found for Nested "Integral a => a" "VK_MAX_MEMORY_HEAPS"
+pattern VK_MAX_MEMORY_HEAPS :: Integral a => a
+pattern VK_MAX_MEMORY_HEAPS = 16
+-- | PFN_vkInternalAllocationNotification - Application-defined memory
+-- allocation notification function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
+--     the application.
+--
+-- -   @size@ is the requested size of an allocation.
+--
+-- -   @allocationType@ is a 'VkInternalAllocationType' value specifying
+--     the requested type of an allocation.
+--
+-- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
+--     the allocation scope of the lifetime of the allocation, as described
+--     [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope).
+--
+-- = Description
+--
+-- This is a purely informational callback.
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks'
+type PFN_vkInternalAllocationNotification = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("allocationType" ::: VkInternalAllocationType) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO ())
+-- | PFN_vkInternalFreeNotification - Application-defined memory free
+-- notification function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
+--     the application.
+--
+-- -   @size@ is the requested size of an allocation.
+--
+-- -   @allocationType@ is a 'VkInternalAllocationType' value specifying
+--     the requested type of an allocation.
+--
+-- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
+--     the allocation scope of the lifetime of the allocation, as described
+--     [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope).
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks'
+type PFN_vkInternalFreeNotification = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("allocationType" ::: VkInternalAllocationType) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO ())
+-- | PFN_vkReallocationFunction - Application-defined memory reallocation
+-- function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
+--     the application.
+--
+-- -   @pOriginal@ /must/ be either @NULL@ or a pointer previously returned
+--     by @pfnReallocation@ or @pfnAllocation@ of the same allocator.
+--
+-- -   @size@ is the size in bytes of the requested allocation.
+--
+-- -   @alignment@ is the requested alignment of the allocation in bytes
+--     and /must/ be a power of two.
+--
+-- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
+--     the allocation scope of the lifetime of the allocation, as described
+--     [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope).
+--
+-- = Description
+--
+-- @pfnReallocation@ /must/ return an allocation with enough space for
+-- @size@ bytes, and the contents of the original allocation from bytes
+-- zero to min(original size, new size) - 1 /must/ be preserved in the
+-- returned allocation. If @size@ is larger than the old size, the contents
+-- of the additional space are undefined. If satisfying these requirements
+-- involves creating a new allocation, then the old allocation /should/ be
+-- freed.
+--
+-- If @pOriginal@ is @NULL@, then @pfnReallocation@ /must/ behave
+-- equivalently to a call to 'PFN_vkAllocationFunction' with the same
+-- parameter values (without @pOriginal@).
+--
+-- If @size@ is zero, then @pfnReallocation@ /must/ behave equivalently to
+-- a call to 'PFN_vkFreeFunction' with the same @pUserData@ parameter
+-- value, and @pMemory@ equal to @pOriginal@.
+--
+-- If @pOriginal@ is non-@NULL@, the implementation /must/ ensure that
+-- @alignment@ is equal to the @alignment@ used to originally allocate
+-- @pOriginal@.
+--
+-- If this function fails and @pOriginal@ is non-@NULL@ the application
+-- /must/ not free the old allocation.
+--
+-- @pfnReallocation@ /must/ follow the same [rules for return values as
+-- @PFN_vkAllocationFunction@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkAllocationFunction_return_rules).
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks'
+type PFN_vkReallocationFunction = Ptr (("pUserData" ::: Ptr ()) -> ("pOriginal" ::: Ptr ()) -> ("size" ::: CSize) -> ("alignment" ::: CSize) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO (Ptr ()))
+-- | PFN_vkAllocationFunction - Application-defined memory allocation
+-- function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
+--     the application.
+--
+-- -   @size@ is the size in bytes of the requested allocation.
+--
+-- -   @alignment@ is the requested alignment of the allocation in bytes
+--     and /must/ be a power of two.
+--
+-- -   @allocationScope@ is a 'VkSystemAllocationScope' value specifying
+--     the allocation scope of the lifetime of the allocation, as described
+--     [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-host-allocation-scope).
+--
+-- = Description
+--
+-- If @pfnAllocation@ is unable to allocate the requested memory, it /must/
+-- return @NULL@. If the allocation was successful, it /must/ return a
+-- valid pointer to memory allocation containing at least @size@ bytes, and
+-- with the pointer value being a multiple of @alignment@.
+--
+-- __Note__
+--
+-- Correct Vulkan operation /cannot/ be assumed if the application does not
+-- follow these rules.
+--
+-- For example, @pfnAllocation@ (or @pfnReallocation@) could cause
+-- termination of running Vulkan instance(s) on a failed allocation for
+-- debugging purposes, either directly or indirectly. In these
+-- circumstances, it /cannot/ be assumed that any part of any affected
+-- 'VkInstance' objects are going to operate correctly (even
+-- 'vkDestroyInstance'), and the application /must/ ensure it cleans up
+-- properly via other means (e.g. process termination).
+--
+-- If @pfnAllocation@ returns @NULL@, and if the implementation is unable
+-- to continue correct processing of the current command without the
+-- requested allocation, it /must/ treat this as a run-time error, and
+-- generate @VK_ERROR_OUT_OF_HOST_MEMORY@ at the appropriate time for the
+-- command in which the condition was detected, as described in [Return
+-- Codes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes).
+--
+-- If the implementation is able to continue correct processing of the
+-- current command without the requested allocation, then it /may/ do so,
+-- and /must/ not generate @VK_ERROR_OUT_OF_HOST_MEMORY@ as a result of
+-- this failed allocation.
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks'
+type PFN_vkAllocationFunction = Ptr (("pUserData" ::: Ptr ()) -> ("size" ::: CSize) -> ("alignment" ::: CSize) -> ("allocationScope" ::: VkSystemAllocationScope) -> IO (Ptr ()))
+-- | PFN_vkFreeFunction - Application-defined memory free function
+--
+-- = Parameters
+--
+-- -   @pUserData@ is the value specified for
+--     'VkAllocationCallbacks'::@pUserData@ in the allocator specified by
+--     the application.
+--
+-- -   @pMemory@ is the allocation to be freed.
+--
+-- = Description
+--
+-- @pMemory@ /may/ be @NULL@, which the callback /must/ handle safely. If
+-- @pMemory@ is non-@NULL@, it /must/ be a pointer previously allocated by
+-- @pfnAllocation@ or @pfnReallocation@. The application /should/ free this
+-- memory.
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks'
+type PFN_vkFreeFunction = Ptr (("pUserData" ::: Ptr ()) -> ("pMemory" ::: Ptr ()) -> IO ())
+-- | PFN_vkVoidFunction - Dummy function pointer type returned by queries
+--
+-- = See Also
+--
+-- 'vkGetDeviceProcAddr', 'vkGetInstanceProcAddr'
+type PFN_vkVoidFunction = Ptr (() -> IO ())
+-- | Dummy data to tag the 'Ptr' with
+data VkInstance_T
+-- | VkInstance - Opaque handle to a instance object
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.vkCreateAndroidSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkCreateDebugReportCallbackEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCreateDebugUtilsMessengerEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayPlaneSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.vkCreateIOSSurfaceMVK',
+-- 'vkCreateInstance',
+-- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.vkCreateMacOSSurfaceMVK',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkCreateMirSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.vkCreateViSurfaceNN',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkCreateWaylandSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkCreateWin32SurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkCreateXcbSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkCreateXlibSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDebugReportMessageEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDestroyDebugReportCallbackEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkDestroyDebugUtilsMessengerEXT',
+-- 'vkDestroyInstance',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkDestroySurfaceKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.vkEnumeratePhysicalDeviceGroups',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_device_group_creation.vkEnumeratePhysicalDeviceGroupsKHR',
+-- 'vkEnumeratePhysicalDevices', 'vkGetInstanceProcAddr',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSubmitDebugUtilsMessageEXT'
+type VkInstance = Ptr VkInstance_T
+-- | Dummy data to tag the 'Ptr' with
+data VkPhysicalDevice_T
+-- | VkPhysicalDevice - Opaque handle to a physical device object
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkDeviceGroupDeviceCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkPhysicalDeviceGroupProperties',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkAcquireXlibDisplayEXT',
+-- 'Graphics.Vulkan.Core10.Device.vkCreateDevice',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayModeKHR',
+-- 'Graphics.Vulkan.Core10.ExtensionDiscovery.vkEnumerateDeviceExtensionProperties',
+-- 'Graphics.Vulkan.Core10.LayerDiscovery.vkEnumerateDeviceLayerProperties',
+-- 'vkEnumeratePhysicalDevices',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayModePropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayPlaneCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetDisplayPlaneSupportedDisplaysKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetPhysicalDeviceDisplayPlanePropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkGetPhysicalDeviceDisplayPropertiesKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferPropertiesKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFenceProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFencePropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphoreProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR',
+-- 'vkGetPhysicalDeviceFeatures',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFeatures2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFeatures2KHR',
+-- 'vkGetPhysicalDeviceFormatProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFormatProperties2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX',
+-- 'vkGetPhysicalDeviceImageFormatProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2KHR',
+-- 'vkGetPhysicalDeviceMemoryProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceMemoryProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceMemoryProperties2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkGetPhysicalDeviceMirPresentationSupportKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetPhysicalDevicePresentRectanglesKHR',
+-- 'vkGetPhysicalDeviceProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceProperties2KHR',
+-- 'vkGetPhysicalDeviceQueueFamilyProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2KHR',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.vkGetPhysicalDeviceSurfaceCapabilities2EXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceCapabilities2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceFormats2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceFormatsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfacePresentModesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceSupportKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkGetPhysicalDeviceWaylandPresentationSupportKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkGetPhysicalDeviceWin32PresentationSupportKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkGetPhysicalDeviceXcbPresentationSupportKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkGetPhysicalDeviceXlibPresentationSupportKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkGetRandROutputDisplayEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display.vkReleaseDisplayEXT'
+type VkPhysicalDevice = Ptr VkPhysicalDevice_T
+-- | Dummy data to tag the 'Ptr' with
+data VkDevice_T
+-- | VkDevice - Opaque handle to a device object
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImage2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImageKHR',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkAllocateCommandBuffers',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkAllocateDescriptorSets',
+-- 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindBufferMemory',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindBufferMemory2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindBufferMemory2KHR',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindImageMemory',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindImageMemory2KHR',
+-- 'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer',
+-- 'Graphics.Vulkan.Core10.BufferView.vkCreateBufferView',
+-- 'Graphics.Vulkan.Core10.CommandPool.vkCreateCommandPool',
+-- 'Graphics.Vulkan.Core10.Pipeline.vkCreateComputePipelines',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorPool',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorSetLayout',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR',
+-- 'Graphics.Vulkan.Core10.Device.vkCreateDevice',
+-- 'Graphics.Vulkan.Core10.Event.vkCreateEvent',
+-- 'Graphics.Vulkan.Core10.Fence.vkCreateFence',
+-- 'Graphics.Vulkan.Core10.Pass.vkCreateFramebuffer',
+-- 'Graphics.Vulkan.Core10.Pipeline.vkCreateGraphicsPipelines',
+-- 'Graphics.Vulkan.Core10.Image.vkCreateImage',
+-- 'Graphics.Vulkan.Core10.ImageView.vkCreateImageView',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateIndirectCommandsLayoutNVX',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateObjectTableNVX',
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout',
+-- 'Graphics.Vulkan.Core10.Query.vkCreateQueryPool',
+-- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass',
+-- 'Graphics.Vulkan.Core10.Sampler.vkCreateSampler',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR',
+-- 'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore',
+-- 'Graphics.Vulkan.Core10.Shader.vkCreateShaderModule',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkCreateValidationCacheEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkDebugMarkerSetObjectNameEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkDebugMarkerSetObjectTagEXT',
+-- 'Graphics.Vulkan.Core10.Buffer.vkDestroyBuffer',
+-- 'Graphics.Vulkan.Core10.BufferView.vkDestroyBufferView',
+-- 'Graphics.Vulkan.Core10.CommandPool.vkDestroyCommandPool',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorPool',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorSetLayout',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplateKHR',
+-- 'Graphics.Vulkan.Core10.Device.vkDestroyDevice',
+-- 'Graphics.Vulkan.Core10.Event.vkDestroyEvent',
+-- 'Graphics.Vulkan.Core10.Fence.vkDestroyFence',
+-- 'Graphics.Vulkan.Core10.Pass.vkDestroyFramebuffer',
+-- 'Graphics.Vulkan.Core10.Image.vkDestroyImage',
+-- 'Graphics.Vulkan.Core10.ImageView.vkDestroyImageView',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyIndirectCommandsLayoutNVX',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyObjectTableNVX',
+-- 'Graphics.Vulkan.Core10.Pipeline.vkDestroyPipeline',
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkDestroyPipelineCache',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout',
+-- 'Graphics.Vulkan.Core10.Query.vkDestroyQueryPool',
+-- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass',
+-- 'Graphics.Vulkan.Core10.Sampler.vkDestroySampler',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR',
+-- 'Graphics.Vulkan.Core10.QueueSemaphore.vkDestroySemaphore',
+-- 'Graphics.Vulkan.Core10.Shader.vkDestroyShaderModule',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkDestroySwapchainKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkDestroyValidationCacheEXT',
+-- 'Graphics.Vulkan.Core10.Queue.vkDeviceWaitIdle',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkDisplayPowerControlEXT',
+-- 'Graphics.Vulkan.Core10.Memory.vkFlushMappedMemoryRanges',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkFreeCommandBuffers',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkFreeDescriptorSets',
+-- 'Graphics.Vulkan.Core10.Memory.vkFreeMemory',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetAndroidHardwareBufferPropertiesANDROID',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkGetBufferMemoryRequirements',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2KHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupport',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupportKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.vkGetDeviceGroupPeerMemoryFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.vkGetDeviceGroupPeerMemoryFeaturesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetDeviceGroupPresentCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetDeviceGroupSurfacePresentModesKHR',
+-- 'Graphics.Vulkan.Core10.Memory.vkGetDeviceMemoryCommitment',
+-- 'vkGetDeviceProcAddr', 'Graphics.Vulkan.Core10.Queue.vkGetDeviceQueue',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.vkGetDeviceQueue2',
+-- 'Graphics.Vulkan.Core10.Event.vkGetEventStatus',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.vkGetFenceFdKHR',
+-- 'Graphics.Vulkan.Core10.Fence.vkGetFenceStatus',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.vkGetFenceWin32HandleKHR',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkGetImageMemoryRequirements',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2KHR',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetImageSparseMemoryRequirements',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2KHR',
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetMemoryAndroidHardwareBufferANDROID',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdPropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.vkGetMemoryHostPointerPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandleKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.vkGetMemoryWin32HandleNV',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandlePropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetPastPresentationTimingGOOGLE',
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkGetPipelineCacheData',
+-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults',
+-- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetRefreshCycleDurationGOOGLE',
+-- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.vkGetSemaphoreFdKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.vkGetSemaphoreWin32HandleKHR',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkGetSwapchainCounterEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetSwapchainImagesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.vkGetSwapchainStatusKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkGetValidationCacheDataEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.vkImportFenceFdKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.vkImportFenceWin32HandleKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.vkImportSemaphoreFdKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.vkImportSemaphoreWin32HandleKHR',
+-- 'Graphics.Vulkan.Core10.Memory.vkInvalidateMappedMemoryRanges',
+-- 'Graphics.Vulkan.Core10.Memory.vkMapMemory',
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkMergePipelineCaches',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkMergeValidationCachesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDeviceEventEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkRegisterObjectsNVX',
+-- 'Graphics.Vulkan.Core10.CommandPool.vkResetCommandPool',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkResetDescriptorPool',
+-- 'Graphics.Vulkan.Core10.Event.vkResetEvent',
+-- 'Graphics.Vulkan.Core10.Fence.vkResetFences',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSetDebugUtilsObjectNameEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkSetDebugUtilsObjectTagEXT',
+-- 'Graphics.Vulkan.Core10.Event.vkSetEvent',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.vkSetHdrMetadataEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1.vkTrimCommandPool',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.vkTrimCommandPoolKHR',
+-- 'Graphics.Vulkan.Core10.Memory.vkUnmapMemory',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkUnregisterObjectsNVX',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplateKHR',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets',
+-- 'Graphics.Vulkan.Core10.Fence.vkWaitForFences'
+type VkDevice = Ptr VkDevice_T
+-- | vkCreateInstance - Create a new Vulkan instance
+--
+-- = Parameters
+--
+-- -   @pCreateInfo@ points to an instance of 'VkInstanceCreateInfo'
+--     controlling creation of the instance.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- -   @pInstance@ points a @VkInstance@ handle in which the resulting
+--     instance is returned.
+--
+-- = Description
+--
+-- @vkCreateInstance@ verifies that the requested layers exist. If not,
+-- @vkCreateInstance@ will return @VK_ERROR_LAYER_NOT_PRESENT@. Next
+-- @vkCreateInstance@ verifies that the requested extensions are supported
+-- (e.g. in the implementation or in any enabled instance layer) and if any
+-- requested extension is not supported, @vkCreateInstance@ /must/ return
+-- @VK_ERROR_EXTENSION_NOT_PRESENT@. After verifying and enabling the
+-- instance layers and extensions the @VkInstance@ object is created and
+-- returned to the application. If a requested extension is only supported
+-- by a layer, both the layer and the extension need to be specified at
+-- @vkCreateInstance@ time for the creation to succeed.
+--
+-- == Valid Usage
+--
+-- -   All [required
+--     extensions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#extended-functionality-extensions-dependencies)
+--     for each extension in the
+--     'VkInstanceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also
+--     be present in that list.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkInstanceCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pInstance@ /must/ be a valid pointer to a @VkInstance@ handle
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_INITIALIZATION_FAILED@
+--
+--     -   @VK_ERROR_LAYER_NOT_PRESENT@
+--
+--     -   @VK_ERROR_EXTENSION_NOT_PRESENT@
+--
+--     -   @VK_ERROR_INCOMPATIBLE_DRIVER@
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks', 'VkInstance', 'VkInstanceCreateInfo'
+foreign import ccall "vkCreateInstance" vkCreateInstance :: ("pCreateInfo" ::: Ptr VkInstanceCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pInstance" ::: Ptr VkInstance) -> IO VkResult
+-- | vkDestroyInstance - Destroy an instance of Vulkan
+--
+-- = Parameters
+--
+-- -   @instance@ is the handle of the instance to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All child objects created using @instance@ /must/ have been
+--     destroyed prior to destroying @instance@
+--
+-- -   If @VkAllocationCallbacks@ were provided when @instance@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @instance@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @instance@ is not @NULL@, @instance@ /must/ be a valid
+--     @VkInstance@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @instance@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'VkAllocationCallbacks', 'VkInstance'
+foreign import ccall "vkDestroyInstance" vkDestroyInstance :: ("instance" ::: VkInstance) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkEnumeratePhysicalDevices - Enumerates the physical devices accessible
+-- to a Vulkan instance
+--
+-- = Parameters
+--
+-- -   @instance@ is a handle to a Vulkan instance previously created with
+--     'vkCreateInstance'.
+--
+-- -   @pPhysicalDeviceCount@ is a pointer to an integer related to the
+--     number of physical devices available or queried, as described below.
+--
+-- -   @pPhysicalDevices@ is either @NULL@ or a pointer to an array of
+--     @VkPhysicalDevice@ handles.
+--
+-- = Description
+--
+-- If @pPhysicalDevices@ is @NULL@, then the number of physical devices
+-- available is returned in @pPhysicalDeviceCount@. Otherwise,
+-- @pPhysicalDeviceCount@ /must/ point to a variable set by the user to the
+-- number of elements in the @pPhysicalDevices@ array, and on return the
+-- variable is overwritten with the number of handles actually written to
+-- @pPhysicalDevices@. If @pPhysicalDeviceCount@ is less than the number of
+-- physical devices available, at most @pPhysicalDeviceCount@ structures
+-- will be written. If @pPhysicalDeviceCount@ is smaller than the number of
+-- physical devices available, @VK_INCOMPLETE@ will be returned instead of
+-- @VK_SUCCESS@, to indicate that not all the available physical devices
+-- were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @pPhysicalDeviceCount@ /must/ be a valid pointer to a @uint32_t@
+--     value
+--
+-- -   If the value referenced by @pPhysicalDeviceCount@ is not @0@, and
+--     @pPhysicalDevices@ is not @NULL@, @pPhysicalDevices@ /must/ be a
+--     valid pointer to an array of @pPhysicalDeviceCount@
+--     @VkPhysicalDevice@ handles
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_INITIALIZATION_FAILED@
+--
+-- = See Also
+--
+-- 'VkInstance', 'VkPhysicalDevice'
+foreign import ccall "vkEnumeratePhysicalDevices" vkEnumeratePhysicalDevices :: ("instance" ::: VkInstance) -> ("pPhysicalDeviceCount" ::: Ptr Word32) -> ("pPhysicalDevices" ::: Ptr VkPhysicalDevice) -> IO VkResult
+-- | vkGetDeviceProcAddr - Return a function pointer for a command
+--
+-- = Parameters
+--
+-- The table below defines the various use cases for @vkGetDeviceProcAddr@
+-- and expected return value for each case.
+--
+-- = Description
+--
+-- The returned function pointer is of type 'PFN_vkVoidFunction', and must
+-- be cast to the type of the command being queried. The function pointer
+-- /must/ only be called with a dispatchable object (the first parameter)
+-- that is @device@ or a child of @device@.
+--
+-- +-----------------------+-----------------------+-----------------------+
+-- | @device@              | @pName@               | return value          |
+-- +=======================+=======================+=======================+
+-- | @NULL@                | *                     | undefined             |
+-- +-----------------------+-----------------------+-----------------------+
+-- | invalid device        | *                     | undefined             |
+-- +-----------------------+-----------------------+-----------------------+
+-- | device                | @NULL@                | undefined             |
+-- +-----------------------+-----------------------+-----------------------+
+-- | device                | core device-level     | fp                    |
+-- |                       | Vulkan command        |                       |
+-- +-----------------------+-----------------------+-----------------------+
+-- | device                | enabled device        | fp                    |
+-- |                       | extension commands    |                       |
+-- +-----------------------+-----------------------+-----------------------+
+-- | device                | * (any @pName@ not    | @NULL@                |
+-- |                       | covered above)        |                       |
+-- +-----------------------+-----------------------+-----------------------+
+--
+-- vkGetDeviceProcAddr behavior
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pName@ /must/ be a null-terminated UTF-8 string
+--
+-- = See Also
+--
+-- 'PFN_vkVoidFunction', 'VkDevice'
+foreign import ccall "vkGetDeviceProcAddr" vkGetDeviceProcAddr :: ("device" ::: VkDevice) -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
+-- | vkGetInstanceProcAddr - Return a function pointer for a command
+--
+-- = Parameters
+--
+-- -   @instance@ is the instance that the function pointer will be
+--     compatible with, or @NULL@ for commands not dependent on any
+--     instance.
+--
+-- -   @pName@ is the name of the command to obtain.
+--
+-- = Description
+--
+-- @vkGetInstanceProcAddr@ itself is obtained in a platform- and loader-
+-- specific manner. Typically, the loader library will export this command
+-- as a function symbol, so applications /can/ link against the loader
+-- library, or load it dynamically and look up the symbol using
+-- platform-specific APIs.
+--
+-- The table below defines the various use cases for
+-- @vkGetInstanceProcAddr@ and expected return value (“fp” is “function
+-- pointer”) for each case.
+--
+-- The returned function pointer is of type 'PFN_vkVoidFunction', and must
+-- be cast to the type of the command being queried.
+--
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | @instance@            | @pName@                                                                            | return value          |
+-- +=======================+====================================================================================+=======================+
+-- | *                     | @NULL@                                                                             | undefined             |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | invalid instance      | *                                                                                  | undefined             |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | @NULL@                | 'Graphics.Vulkan.Core10.ExtensionDiscovery.vkEnumerateInstanceExtensionProperties' | fp                    |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | @NULL@                | 'Graphics.Vulkan.Core10.LayerDiscovery.vkEnumerateInstanceLayerProperties'         | fp                    |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | @NULL@                | 'vkCreateInstance'                                                                 | fp                    |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | @NULL@                | * (any @pName@ not covered above)                                                  | @NULL@                |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | instance              | core Vulkan command                                                                | fp1                   |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | instance              | enabled instance extension commands for @instance@                                 | fp1                   |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | instance              | available device extension2 commands for @instance@                                | fp1                   |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+-- | instance              | * (any @pName@ not covered above)                                                  | @NULL@                |
+-- +-----------------------+------------------------------------------------------------------------------------+-----------------------+
+--
+-- vkGetInstanceProcAddr behavior
+--
+-- [1]
+--     The returned function pointer /must/ only be called with a
+--     dispatchable object (the first parameter) that is @instance@ or a
+--     child of @instance@, e.g. 'VkInstance', 'VkPhysicalDevice',
+--     'VkDevice', 'Graphics.Vulkan.Core10.Queue.VkQueue', or
+--     'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'.
+--
+-- [2]
+--     An “available device extension” is a device extension supported by
+--     any physical device enumerated by @instance@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @instance@ is not @NULL@, @instance@ /must/ be a valid
+--     @VkInstance@ handle
+--
+-- -   @pName@ /must/ be a null-terminated UTF-8 string
+--
+-- = See Also
+--
+-- 'PFN_vkVoidFunction', 'VkInstance'
+foreign import ccall "vkGetInstanceProcAddr" vkGetInstanceProcAddr :: ("instance" ::: VkInstance) -> ("pName" ::: Ptr CChar) -> IO PFN_vkVoidFunction
+-- | vkGetPhysicalDeviceProperties - Returns properties of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pProperties@ points to an instance of the
+--     'VkPhysicalDeviceProperties' structure, that will be filled with
+--     returned information.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pProperties@ /must/ be a valid pointer to a
+--     @VkPhysicalDeviceProperties@ structure
+--
+-- = See Also
+--
+-- 'VkPhysicalDevice', 'VkPhysicalDeviceProperties'
+foreign import ccall "vkGetPhysicalDeviceProperties" vkGetPhysicalDeviceProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pProperties" ::: Ptr VkPhysicalDeviceProperties) -> IO ()
+-- | vkGetPhysicalDeviceQueueFamilyProperties - Reports properties of the
+-- queues of the specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pQueueFamilyPropertyCount@ is a pointer to an integer related to
+--     the number of queue families available or queried, as described
+--     below.
+--
+-- -   @pQueueFamilyProperties@ is either @NULL@ or a pointer to an array
+--     of 'VkQueueFamilyProperties' structures.
+--
+-- = Description
+--
+-- If @pQueueFamilyProperties@ is @NULL@, then the number of queue families
+-- available is returned in @pQueueFamilyPropertyCount@. Otherwise,
+-- @pQueueFamilyPropertyCount@ /must/ point to a variable set by the user
+-- to the number of elements in the @pQueueFamilyProperties@ array, and on
+-- return the variable is overwritten with the number of structures
+-- actually written to @pQueueFamilyProperties@. If
+-- @pQueueFamilyPropertyCount@ is less than the number of queue families
+-- available, at most @pQueueFamilyPropertyCount@ structures will be
+-- written.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,
+--     and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@
+--     /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@
+--     @VkQueueFamilyProperties@ structures
+--
+-- = See Also
+--
+-- 'VkPhysicalDevice', 'VkQueueFamilyProperties'
+foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties" vkGetPhysicalDeviceQueueFamilyProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr VkQueueFamilyProperties) -> IO ()
+-- | vkGetPhysicalDeviceMemoryProperties - Reports memory information for the
+-- specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the device to query.
+--
+-- -   @pMemoryProperties@ points to an instance of
+--     @VkPhysicalDeviceMemoryProperties@ structure in which the properties
+--     are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pMemoryProperties@ /must/ be a valid pointer to a
+--     @VkPhysicalDeviceMemoryProperties@ structure
+--
+-- = See Also
+--
+-- 'VkPhysicalDevice', 'VkPhysicalDeviceMemoryProperties'
+foreign import ccall "vkGetPhysicalDeviceMemoryProperties" vkGetPhysicalDeviceMemoryProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pMemoryProperties" ::: Ptr VkPhysicalDeviceMemoryProperties) -> IO ()
+-- | vkGetPhysicalDeviceFeatures - Reports capabilities of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     supported features.
+--
+-- -   @pFeatures@ is a pointer to a 'VkPhysicalDeviceFeatures' structure
+--     in which the physical device features are returned. For each
+--     feature, a value of @VK_TRUE@ specifies that the feature is
+--     supported on this physical device, and @VK_FALSE@ specifies that the
+--     feature is not supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pFeatures@ /must/ be a valid pointer to a
+--     @VkPhysicalDeviceFeatures@ structure
+--
+-- = See Also
+--
+-- 'VkPhysicalDevice', 'VkPhysicalDeviceFeatures'
+foreign import ccall "vkGetPhysicalDeviceFeatures" vkGetPhysicalDeviceFeatures :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFeatures" ::: Ptr VkPhysicalDeviceFeatures) -> IO ()
+-- | vkGetPhysicalDeviceFormatProperties - Lists physical device’s format
+-- capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     format properties.
+--
+-- -   @format@ is the format whose properties are queried.
+--
+-- -   @pFormatProperties@ is a pointer to a 'VkFormatProperties' structure
+--     in which physical device properties for @format@ are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @pFormatProperties@ /must/ be a valid pointer to a
+--     @VkFormatProperties@ structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkFormatProperties',
+-- 'VkPhysicalDevice'
+foreign import ccall "vkGetPhysicalDeviceFormatProperties" vkGetPhysicalDeviceFormatProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("pFormatProperties" ::: Ptr VkFormatProperties) -> IO ()
+-- | vkGetPhysicalDeviceImageFormatProperties - Lists physical device’s image
+-- format capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     image capabilities.
+--
+-- -   @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' value
+--     specifying the image format, corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@format@.
+--
+-- -   @type@ is a 'VkImageType' value specifying the image type,
+--     corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@imageType@.
+--
+-- -   @tiling@ is a 'VkImageTiling' value specifying the image tiling,
+--     corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@tiling@.
+--
+-- -   @usage@ is a bitmask of 'VkImageUsageFlagBits' specifying the
+--     intended usage of the image, corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@usage@.
+--
+-- -   @flags@ is a bitmask of 'VkImageCreateFlagBits' specifying
+--     additional parameters of the image, corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@flags@.
+--
+-- -   @pImageFormatProperties@ points to an instance of the
+--     'VkImageFormatProperties' structure in which capabilities are
+--     returned.
+--
+-- = Description
+--
+-- The @format@, @type@, @tiling@, @usage@, and @flags@ parameters
+-- correspond to parameters that would be consumed by
+-- 'Graphics.Vulkan.Core10.Image.vkCreateImage' (as members of
+-- @VkImageCreateInfo@).
+--
+-- If @format@ is not a supported image format, or if the combination of
+-- @format@, @type@, @tiling@, @usage@, and @flags@ is not supported for
+-- images, then @vkGetPhysicalDeviceImageFormatProperties@ returns
+-- @VK_ERROR_FORMAT_NOT_SUPPORTED@.
+--
+-- The limitations on an image format that are reported by
+-- @vkGetPhysicalDeviceImageFormatProperties@ have the following property:
+-- if @usage1@ and @usage2@ of type 'VkImageUsageFlags' are such that the
+-- bits set in @usage1@ are a subset of the bits set in @usage2@, and
+-- @flags1@ and @flags2@ of type 'VkImageCreateFlags' are such that the
+-- bits set in @flags1@ are a subset of the bits set in @flags2@, then the
+-- limitations for @usage1@ and @flags1@ /must/ be no more strict than the
+-- limitations for @usage2@ and @flags2@, for all values of @format@,
+-- @type@, and @tiling@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @type@ /must/ be a valid 'VkImageType' value
+--
+-- -   @tiling@ /must/ be a valid 'VkImageTiling' value
+--
+-- -   @usage@ /must/ be a valid combination of 'VkImageUsageFlagBits'
+--     values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @flags@ /must/ be a valid combination of 'VkImageCreateFlagBits'
+--     values
+--
+-- -   @pImageFormatProperties@ /must/ be a valid pointer to a
+--     @VkImageFormatProperties@ structure
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_FORMAT_NOT_SUPPORTED@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkImageCreateFlags',
+-- 'VkImageFormatProperties', 'VkImageTiling', 'VkImageType',
+-- 'VkImageUsageFlags', 'VkPhysicalDevice'
+foreign import ccall "vkGetPhysicalDeviceImageFormatProperties" vkGetPhysicalDeviceImageFormatProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("type" ::: VkImageType) -> ("tiling" ::: VkImageTiling) -> ("usage" ::: VkImageUsageFlags) -> ("flags" ::: VkImageCreateFlags) -> ("pImageFormatProperties" ::: Ptr VkImageFormatProperties) -> IO VkResult
+-- | VkExtent3D - Structure specifying a three-dimensional extent
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferImageCopy',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageCopy',
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'VkImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageResolve',
+-- 'VkQueueFamilyProperties',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryBind'
+data VkExtent3D = VkExtent3D
+  { -- | @width@ is the width of the extent.
+  vkWidth :: Word32
+  , -- | @height@ is the height of the extent.
+  vkHeight :: Word32
+  , -- | @depth@ is the depth of the extent.
+  vkDepth :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExtent3D where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkExtent3D <$> peek (ptr `plusPtr` 0)
+                        <*> peek (ptr `plusPtr` 4)
+                        <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent3D))
+                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent3D))
+                *> poke (ptr `plusPtr` 8) (vkDepth (poked :: VkExtent3D))
+-- | VkPhysicalDeviceProperties - Structure specifying physical device
+-- properties
+--
+-- = Description
+--
+-- The @vendorID@ and @deviceID@ fields are provided to allow applications
+-- to adapt to device characteristics that are not adequately exposed by
+-- other Vulkan queries.
+--
+-- __Note__
+--
+-- These /may/ include performance profiles, hardware errata, or other
+-- characteristics.
+--
+-- The /vendor/ identified by @vendorID@ is the entity responsible for the
+-- most salient characteristics of the underlying implementation of the
+-- 'VkPhysicalDevice' being queried.
+--
+-- __Note__
+--
+-- For example, in the case of a discrete GPU implementation, this /should/
+-- be the GPU chipset vendor. In the case of a hardware accelerator
+-- integrated into a system-on-chip (SoC), this /should/ be the supplier of
+-- the silicon IP used to create the accelerator.
+--
+-- If the vendor has a [PCI vendor
+-- ID](https://pcisig.com/membership/member-companies), the low 16 bits of
+-- @vendorID@ /must/ contain that PCI vendor ID, and the remaining bits
+-- /must/ be set to zero. Otherwise, the value returned /must/ be a valid
+-- Khronos vendor ID, obtained as described in the [Vulkan Documentation
+-- and
+-- Extensions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vulkan-styleguide)
+-- document in the section “Registering a Vendor ID with Khronos”. Khronos
+-- vendor IDs are allocated starting at 0x10000, to distinguish them from
+-- the PCI vendor ID namespace.
+--
+-- The vendor is also responsible for the value returned in @deviceID@. If
+-- the implementation is driven primarily by a [PCI
+-- device](https://pcisig.com/) with a [PCI device
+-- ID](https://pcisig.com/), the low 16 bits of @deviceID@ /must/ contain
+-- that PCI device ID, and the remaining bits /must/ be set to zero.
+-- Otherwise, the choice of what values to return /may/ be dictated by
+-- operating system or platform policies - but /should/ uniquely identify
+-- both the device version and any major configuration options (for
+-- example, core count in the case of multicore devices).
+--
+-- __Note__
+--
+-- The same device ID /should/ be used for all physical implementations of
+-- that device version and configuration. For example, all uses of a
+-- specific silicon IP GPU version and configuration /should/ use the same
+-- device ID, even if those uses occur in different SoCs.
+--
+-- = See Also
+--
+-- 'VkPhysicalDeviceLimits',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2',
+-- 'VkPhysicalDeviceSparseProperties', 'VkPhysicalDeviceType',
+-- 'vkGetPhysicalDeviceProperties'
+data VkPhysicalDeviceProperties = VkPhysicalDeviceProperties
+  { -- | @apiVersion@ is the version of Vulkan supported by the device, encoded
+  -- as described in the [API Version Numbers and
+  -- Semantics](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-versionnum)
+  -- section.
+  vkApiVersion :: Word32
+  , -- | @driverVersion@ is the vendor-specified version of the driver.
+  vkDriverVersion :: Word32
+  , -- | @vendorID@ is a unique identifier for the /vendor/ (see below) of the
+  -- physical device.
+  vkVendorID :: Word32
+  , -- | @deviceID@ is a unique identifier for the physical device among devices
+  -- available from the vendor.
+  vkDeviceID :: Word32
+  , -- | @deviceType@ is a 'VkPhysicalDeviceType' specifying the type of device.
+  vkDeviceType :: VkPhysicalDeviceType
+  , -- | @deviceName@ is a null-terminated UTF-8 string containing the name of
+  -- the device.
+  vkDeviceName :: Vector VK_MAX_PHYSICAL_DEVICE_NAME_SIZE CChar
+  , -- | @pipelineCacheUUID@ is an array of size @VK_UUID_SIZE@, containing 8-bit
+  -- values that represent a universally unique identifier for the device.
+  vkPipelineCacheUUID :: Vector VK_UUID_SIZE Word8
+  , -- | @limits@ is the 'VkPhysicalDeviceLimits' structure which specifies
+  -- device-specific limits of the physical device. See
+  -- [Limits](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits)
+  -- for details.
+  vkLimits :: VkPhysicalDeviceLimits
+  , -- | @sparseProperties@ is the 'VkPhysicalDeviceSparseProperties' structure
+  -- which specifies various sparse related properties of the physical
+  -- device. See [Sparse
+  -- Properties](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-physicalprops)
+  -- for details.
+  vkSparseProperties :: VkPhysicalDeviceSparseProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceProperties where
+  sizeOf ~_ = 824
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceProperties <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 4)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 12)
+                                        <*> peek (ptr `plusPtr` 16)
+                                        <*> peek (ptr `plusPtr` 20)
+                                        <*> peek (ptr `plusPtr` 276)
+                                        <*> peek (ptr `plusPtr` 296)
+                                        <*> peek (ptr `plusPtr` 800)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkApiVersion (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 4) (vkDriverVersion (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 8) (vkVendorID (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 12) (vkDeviceID (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 16) (vkDeviceType (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 20) (vkDeviceName (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 276) (vkPipelineCacheUUID (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 296) (vkLimits (poked :: VkPhysicalDeviceProperties))
+                *> poke (ptr `plusPtr` 800) (vkSparseProperties (poked :: VkPhysicalDeviceProperties))
+-- | VkApplicationInfo - Structure specifying application info
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_APPLICATION_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   If @pApplicationName@ is not @NULL@, @pApplicationName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- -   If @pEngineName@ is not @NULL@, @pEngineName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- = See Also
+--
+-- 'VkInstanceCreateInfo', 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkApplicationInfo = VkApplicationInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @pApplicationName@ is @NULL@ or is a pointer to a null-terminated UTF-8
+  -- string containing the name of the application.
+  vkPApplicationName :: Ptr CChar
+  , -- | @applicationVersion@ is an unsigned integer variable containing the
+  -- developer-supplied version number of the application.
+  vkApplicationVersion :: Word32
+  , -- | @pEngineName@ is @NULL@ or is a pointer to a null-terminated UTF-8
+  -- string containing the name of the engine (if any) used to create the
+  -- application.
+  vkPEngineName :: Ptr CChar
+  , -- | @engineVersion@ is an unsigned integer variable containing the
+  -- developer-supplied version number of the engine used to create the
+  -- application.
+  vkEngineVersion :: Word32
+  , -- | @apiVersion@ is the version of the Vulkan API against which the
+  -- application expects to run, encoded as described in the [API Version
+  -- Numbers and
+  -- Semantics](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-versionnum)
+  -- section. If @apiVersion@ is 0 the implementation /must/ ignore it,
+  -- otherwise if the implementation does not support the requested
+  -- @apiVersion@, or an effective substitute for @apiVersion@, it /must/
+  -- return @VK_ERROR_INCOMPATIBLE_DRIVER@. The patch version number
+  -- specified in @apiVersion@ is ignored when creating an instance object.
+  -- Only the major and minor versions of the instance /must/ match those
+  -- requested in @apiVersion@.
+  vkApiVersion :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkApplicationInfo where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkApplicationInfo <$> peek (ptr `plusPtr` 0)
+                               <*> peek (ptr `plusPtr` 8)
+                               <*> peek (ptr `plusPtr` 16)
+                               <*> peek (ptr `plusPtr` 24)
+                               <*> peek (ptr `plusPtr` 32)
+                               <*> peek (ptr `plusPtr` 40)
+                               <*> peek (ptr `plusPtr` 44)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkApplicationInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkApplicationInfo))
+                *> poke (ptr `plusPtr` 16) (vkPApplicationName (poked :: VkApplicationInfo))
+                *> poke (ptr `plusPtr` 24) (vkApplicationVersion (poked :: VkApplicationInfo))
+                *> poke (ptr `plusPtr` 32) (vkPEngineName (poked :: VkApplicationInfo))
+                *> poke (ptr `plusPtr` 40) (vkEngineVersion (poked :: VkApplicationInfo))
+                *> poke (ptr `plusPtr` 44) (vkApiVersion (poked :: VkApplicationInfo))
+-- | VkAllocationCallbacks - Structure containing callback function pointers
+-- for memory allocation
+--
+-- == Valid Usage
+--
+-- -   @pfnAllocation@ /must/ be a valid pointer to a valid user-defined
+--     'PFN_vkAllocationFunction'
+--
+-- -   @pfnReallocation@ /must/ be a valid pointer to a valid user-defined
+--     'PFN_vkReallocationFunction'
+--
+-- -   @pfnFree@ /must/ be a valid pointer to a valid user-defined
+--     'PFN_vkFreeFunction'
+--
+-- -   If either of @pfnInternalAllocation@ or @pfnInternalFree@ is not
+--     @NULL@, both /must/ be valid callbacks
+--
+-- = See Also
+--
+-- 'PFN_vkAllocationFunction', 'PFN_vkFreeFunction',
+-- 'PFN_vkInternalAllocationNotification',
+-- 'PFN_vkInternalFreeNotification', 'PFN_vkReallocationFunction',
+-- 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.vkCreateAndroidSurfaceKHR',
+-- 'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer',
+-- 'Graphics.Vulkan.Core10.BufferView.vkCreateBufferView',
+-- 'Graphics.Vulkan.Core10.CommandPool.vkCreateCommandPool',
+-- 'Graphics.Vulkan.Core10.Pipeline.vkCreateComputePipelines',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkCreateDebugReportCallbackEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCreateDebugUtilsMessengerEXT',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorPool',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorSetLayout',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR',
+-- 'Graphics.Vulkan.Core10.Device.vkCreateDevice',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayModeKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayPlaneSurfaceKHR',
+-- 'Graphics.Vulkan.Core10.Event.vkCreateEvent',
+-- 'Graphics.Vulkan.Core10.Fence.vkCreateFence',
+-- 'Graphics.Vulkan.Core10.Pass.vkCreateFramebuffer',
+-- 'Graphics.Vulkan.Core10.Pipeline.vkCreateGraphicsPipelines',
+-- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.vkCreateIOSSurfaceMVK',
+-- 'Graphics.Vulkan.Core10.Image.vkCreateImage',
+-- 'Graphics.Vulkan.Core10.ImageView.vkCreateImageView',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateIndirectCommandsLayoutNVX',
+-- 'vkCreateInstance',
+-- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.vkCreateMacOSSurfaceMVK',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.vkCreateMirSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCreateObjectTableNVX',
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout',
+-- 'Graphics.Vulkan.Core10.Query.vkCreateQueryPool',
+-- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass',
+-- 'Graphics.Vulkan.Core10.Sampler.vkCreateSampler',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR',
+-- 'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore',
+-- 'Graphics.Vulkan.Core10.Shader.vkCreateShaderModule',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkCreateValidationCacheEXT',
+-- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.vkCreateViSurfaceNN',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.vkCreateWaylandSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.vkCreateWin32SurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.vkCreateXcbSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.vkCreateXlibSurfaceKHR',
+-- 'Graphics.Vulkan.Core10.Buffer.vkDestroyBuffer',
+-- 'Graphics.Vulkan.Core10.BufferView.vkDestroyBufferView',
+-- 'Graphics.Vulkan.Core10.CommandPool.vkDestroyCommandPool',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.vkDestroyDebugReportCallbackEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkDestroyDebugUtilsMessengerEXT',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorPool',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorSetLayout',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplateKHR',
+-- 'Graphics.Vulkan.Core10.Device.vkDestroyDevice',
+-- 'Graphics.Vulkan.Core10.Event.vkDestroyEvent',
+-- 'Graphics.Vulkan.Core10.Fence.vkDestroyFence',
+-- 'Graphics.Vulkan.Core10.Pass.vkDestroyFramebuffer',
+-- 'Graphics.Vulkan.Core10.Image.vkDestroyImage',
+-- 'Graphics.Vulkan.Core10.ImageView.vkDestroyImageView',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyIndirectCommandsLayoutNVX',
+-- 'vkDestroyInstance',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkDestroyObjectTableNVX',
+-- 'Graphics.Vulkan.Core10.Pipeline.vkDestroyPipeline',
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkDestroyPipelineCache',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout',
+-- 'Graphics.Vulkan.Core10.Query.vkDestroyQueryPool',
+-- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass',
+-- 'Graphics.Vulkan.Core10.Sampler.vkDestroySampler',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR',
+-- 'Graphics.Vulkan.Core10.QueueSemaphore.vkDestroySemaphore',
+-- 'Graphics.Vulkan.Core10.Shader.vkDestroyShaderModule',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkDestroySurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkDestroySwapchainKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.vkDestroyValidationCacheEXT',
+-- 'Graphics.Vulkan.Core10.Memory.vkFreeMemory',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDeviceEventEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT'
+data VkAllocationCallbacks = VkAllocationCallbacks
+  { -- | @pUserData@ is a value to be interpreted by the implementation of the
+  -- callbacks. When any of the callbacks in @VkAllocationCallbacks@ are
+  -- called, the Vulkan implementation will pass this value as the first
+  -- parameter to the callback. This value /can/ vary each time an allocator
+  -- is passed into a command, even when the same object takes an allocator
+  -- in multiple commands.
+  vkPUserData :: Ptr ()
+  , -- | @pfnAllocation@ is a pointer to an application-defined memory allocation
+  -- function of type 'PFN_vkAllocationFunction'.
+  vkPfnAllocation :: PFN_vkAllocationFunction
+  , -- | @pfnReallocation@ is a pointer to an application-defined memory
+  -- reallocation function of type 'PFN_vkReallocationFunction'.
+  vkPfnReallocation :: PFN_vkReallocationFunction
+  , -- | @pfnFree@ is a pointer to an application-defined memory free function of
+  -- type 'PFN_vkFreeFunction'.
+  vkPfnFree :: PFN_vkFreeFunction
+  , -- | @pfnInternalAllocation@ is a pointer to an application-defined function
+  -- that is called by the implementation when the implementation makes
+  -- internal allocations, and it is of type
+  -- 'PFN_vkInternalAllocationNotification'.
+  vkPfnInternalAllocation :: PFN_vkInternalAllocationNotification
+  , -- | @pfnInternalFree@ is a pointer to an application-defined function that
+  -- is called by the implementation when the implementation frees internal
+  -- allocations, and it is of type 'PFN_vkInternalFreeNotification'.
+  vkPfnInternalFree :: PFN_vkInternalFreeNotification
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAllocationCallbacks where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkAllocationCallbacks <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+                                   <*> peek (ptr `plusPtr` 24)
+                                   <*> peek (ptr `plusPtr` 32)
+                                   <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkPUserData (poked :: VkAllocationCallbacks))
+                *> poke (ptr `plusPtr` 8) (vkPfnAllocation (poked :: VkAllocationCallbacks))
+                *> poke (ptr `plusPtr` 16) (vkPfnReallocation (poked :: VkAllocationCallbacks))
+                *> poke (ptr `plusPtr` 24) (vkPfnFree (poked :: VkAllocationCallbacks))
+                *> poke (ptr `plusPtr` 32) (vkPfnInternalAllocation (poked :: VkAllocationCallbacks))
+                *> poke (ptr `plusPtr` 40) (vkPfnInternalFree (poked :: VkAllocationCallbacks))
+-- | VkInstanceCreateInfo - Structure specifying parameters of a newly
+-- created instance
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportCallbackCreateInfoEXT',
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsMessengerCreateInfoEXT',
+--     or
+--     'Graphics.Vulkan.Extensions.VK_EXT_validation_flags.VkValidationFlagsEXT'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @pApplicationInfo@ is not @NULL@, @pApplicationInfo@ /must/ be a
+--     valid pointer to a valid @VkApplicationInfo@ structure
+--
+-- -   If @enabledLayerCount@ is not @0@, @ppEnabledLayerNames@ /must/ be a
+--     valid pointer to an array of @enabledLayerCount@ null-terminated
+--     UTF-8 strings
+--
+-- -   If @enabledExtensionCount@ is not @0@, @ppEnabledExtensionNames@
+--     /must/ be a valid pointer to an array of @enabledExtensionCount@
+--     null-terminated UTF-8 strings
+--
+-- = See Also
+--
+-- 'VkApplicationInfo', 'VkInstanceCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateInstance'
+data VkInstanceCreateInfo = VkInstanceCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkInstanceCreateFlags
+  , -- | @pApplicationInfo@ is @NULL@ or a pointer to an instance of
+  -- @VkApplicationInfo@. If not @NULL@, this information helps
+  -- implementations recognize behavior inherent to classes of applications.
+  -- 'VkApplicationInfo' is defined in detail below.
+  vkPApplicationInfo :: Ptr VkApplicationInfo
+  , -- | @enabledLayerCount@ is the number of global layers to enable.
+  vkEnabledLayerCount :: Word32
+  , -- | @ppEnabledLayerNames@ is a pointer to an array of @enabledLayerCount@
+  -- null-terminated UTF-8 strings containing the names of layers to enable
+  -- for the created instance. See the
+  -- [Layers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#extended-functionality-layers)
+  -- section for further details.
+  vkPPEnabledLayerNames :: Ptr (Ptr CChar)
+  , -- | @enabledExtensionCount@ is the number of global extensions to enable.
+  vkEnabledExtensionCount :: Word32
+  , -- | @ppEnabledExtensionNames@ is a pointer to an array of
+  -- @enabledExtensionCount@ null-terminated UTF-8 strings containing the
+  -- names of extensions to enable.
+  vkPPEnabledExtensionNames :: Ptr (Ptr CChar)
+  }
+  deriving (Eq, Show)
+
+instance Storable VkInstanceCreateInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkInstanceCreateInfo <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> peek (ptr `plusPtr` 24)
+                                  <*> peek (ptr `plusPtr` 32)
+                                  <*> peek (ptr `plusPtr` 40)
+                                  <*> peek (ptr `plusPtr` 48)
+                                  <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkInstanceCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkInstanceCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkInstanceCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPApplicationInfo (poked :: VkInstanceCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkInstanceCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPPEnabledLayerNames (poked :: VkInstanceCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkInstanceCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkPPEnabledExtensionNames (poked :: VkInstanceCreateInfo))
+-- | VkQueueFamilyProperties - Structure providing information about a queue
+-- family
+--
+-- = Description
+--
+-- The value returned in @minImageTransferGranularity@ has a unit of
+-- compressed texel blocks for images having a block-compressed format, and
+-- a unit of texels otherwise.
+--
+-- Possible values of @minImageTransferGranularity@ are:
+--
+-- -   (0,0,0) which indicates that only whole mip levels /must/ be
+--     transferred using the image transfer operations on the corresponding
+--     queues. In this case, the following restrictions apply to all offset
+--     and extent parameters of image transfer operations:
+--
+--     -   The @x@, @y@, and @z@ members of a
+--         'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D'
+--         parameter /must/ always be zero.
+--
+--     -   The @width@, @height@, and @depth@ members of a 'VkExtent3D'
+--         parameter /must/ always match the width, height, and depth of
+--         the image subresource corresponding to the parameter,
+--         respectively.
+--
+-- -   (Ax, Ay, Az) where Ax, Ay, and Az are all integer powers of two. In
+--     this case the following restrictions apply to all image transfer
+--     operations:
+--
+--     -   @x@, @y@, and @z@ of a
+--         'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkOffset3D'
+--         parameter /must/ be integer multiples of Ax, Ay, and Az,
+--         respectively.
+--
+--     -   @width@ of a 'VkExtent3D' parameter /must/ be an integer
+--         multiple of Ax, or else @x@ + @width@ /must/ equal the width of
+--         the image subresource corresponding to the parameter.
+--
+--     -   @height@ of a 'VkExtent3D' parameter /must/ be an integer
+--         multiple of Ay, or else @y@ + @height@ /must/ equal the height
+--         of the image subresource corresponding to the parameter.
+--
+--     -   @depth@ of a 'VkExtent3D' parameter /must/ be an integer
+--         multiple of Az, or else @z@ + @depth@ /must/ equal the depth of
+--         the image subresource corresponding to the parameter.
+--
+--     -   If the format of the image corresponding to the parameters is
+--         one of the block-compressed formats then for the purposes of the
+--         above calculations the granularity /must/ be scaled up by the
+--         compressed texel block dimensions.
+--
+-- Queues supporting graphics and\/or compute operations /must/ report
+-- (1,1,1) in @minImageTransferGranularity@, meaning that there are no
+-- additional restrictions on the granularity of image transfer operations
+-- for these queues. Other queues supporting image transfer operations are
+-- only /required/ to support whole mip level transfers, thus
+-- @minImageTransferGranularity@ for queues belonging to such queue
+-- families /may/ be (0,0,0).
+--
+-- The [Device
+-- Memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device)
+-- section describes memory properties queried from the physical device.
+--
+-- For physical device feature queries see the
+-- [Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features)
+-- chapter.
+--
+-- = See Also
+--
+-- 'VkExtent3D',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkQueueFamilyProperties2',
+-- 'VkQueueFlags', 'vkGetPhysicalDeviceQueueFamilyProperties'
+data VkQueueFamilyProperties = VkQueueFamilyProperties
+  { -- | @queueFlags@ is a bitmask of 'VkQueueFlagBits' indicating capabilities
+  -- of the queues in this queue family.
+  vkQueueFlags :: VkQueueFlags
+  , -- | @queueCount@ is the unsigned integer count of queues in this queue
+  -- family.
+  vkQueueCount :: Word32
+  , -- | @timestampValidBits@ is the unsigned integer count of meaningful bits in
+  -- the timestamps written via @vkCmdWriteTimestamp@. The valid range for
+  -- the count is 36..64 bits, or a value of 0, indicating no support for
+  -- timestamps. Bits outside the valid range are guaranteed to be zeros.
+  vkTimestampValidBits :: Word32
+  , -- | @minImageTransferGranularity@ is the minimum granularity supported for
+  -- image transfer operations on the queues in this queue family.
+  vkMinImageTransferGranularity :: VkExtent3D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkQueueFamilyProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 4
+  peek ptr = VkQueueFamilyProperties <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 4)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 12)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkQueueFlags (poked :: VkQueueFamilyProperties))
+                *> poke (ptr `plusPtr` 4) (vkQueueCount (poked :: VkQueueFamilyProperties))
+                *> poke (ptr `plusPtr` 8) (vkTimestampValidBits (poked :: VkQueueFamilyProperties))
+                *> poke (ptr `plusPtr` 12) (vkMinImageTransferGranularity (poked :: VkQueueFamilyProperties))
+-- | VkPhysicalDeviceMemoryProperties - Structure specifying physical device
+-- memory properties
+--
+-- = Description
+--
+-- The @VkPhysicalDeviceMemoryProperties@ structure describes a number of
+-- /memory heaps/ as well as a number of /memory types/ that /can/ be used
+-- to access memory allocated in those heaps. Each heap describes a memory
+-- resource of a particular size, and each memory type describes a set of
+-- memory properties (e.g. host cached vs uncached) that /can/ be used with
+-- a given memory heap. Allocations using a particular memory type will
+-- consume resources from the heap indicated by that memory type’s heap
+-- index. More than one memory type /may/ share each heap, and the heaps
+-- and memory types provide a mechanism to advertise an accurate size of
+-- the physical memory resources while allowing the memory to be used with
+-- a variety of different properties.
+--
+-- The number of memory heaps is given by @memoryHeapCount@ and is less
+-- than or equal to @VK_MAX_MEMORY_HEAPS@. Each heap is described by an
+-- element of the @memoryHeaps@ array as a 'VkMemoryHeap' structure. The
+-- number of memory types available across all memory heaps is given by
+-- @memoryTypeCount@ and is less than or equal to @VK_MAX_MEMORY_TYPES@.
+-- Each memory type is described by an element of the @memoryTypes@ array
+-- as a 'VkMemoryType' structure.
+--
+-- At least one heap /must/ include @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@ in
+-- 'VkMemoryHeap'::@flags@. If there are multiple heaps that all have
+-- similar performance characteristics, they /may/ all include
+-- @VK_MEMORY_HEAP_DEVICE_LOCAL_BIT@. In a unified memory architecture
+-- (UMA) system there is often only a single memory heap which is
+-- considered to be equally “local” to the host and to the device, and such
+-- an implementation /must/ advertise the heap as device-local.
+--
+-- Each memory type returned by 'vkGetPhysicalDeviceMemoryProperties'
+-- /must/ have its @propertyFlags@ set to one of the following values:
+--
+-- -   0
+--
+-- -   @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
+--
+-- -   @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@
+--
+-- -   @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
+--
+-- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@
+--
+-- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
+--
+-- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@
+--
+-- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_CACHED_BIT@ |
+--     @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@
+--
+-- -   @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ |
+--     @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@
+--
+-- There /must/ be at least one memory type with both the
+-- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ and
+-- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ bits set in its @propertyFlags@.
+-- There /must/ be at least one memory type with the
+-- @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ bit set in its @propertyFlags@.
+--
+-- For each pair of elements __X__ and __Y__ returned in @memoryTypes@,
+-- __X__ /must/ be placed at a lower index position than __Y__ if:
+--
+-- -   either the set of bit flags returned in the @propertyFlags@ member
+--     of __X__ is a strict subset of the set of bit flags returned in the
+--     @propertyFlags@ member of __Y__.
+--
+-- -   or the @propertyFlags@ members of __X__ and __Y__ are equal, and
+--     __X__ belongs to a memory heap with greater performance (as
+--     determined in an implementation-specific manner).
+--
+-- __Note__
+--
+-- There is no ordering requirement between __X__ and __Y__ elements for
+-- the case their @propertyFlags@ members are not in a subset relation.
+-- That potentially allows more than one possible way to order the same set
+-- of memory types. Notice that the [list of all allowed memory property
+-- flag
+-- combinations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-bitmask-list)
+-- is written in the required order. But if instead
+-- @VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT@ was before
+-- @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@ |
+-- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@, the list would still be in the
+-- required order.
+--
+-- This ordering requirement enables applications to use a simple search
+-- loop to select the desired memory type along the lines of:
+--
+-- > // Find a memory in `memoryTypeBitsRequirement` that includes all of `requiredProperties`
+-- > int32_t findProperties(const VkPhysicalDeviceMemoryProperties* pMemoryProperties,
+-- >                        uint32_t memoryTypeBitsRequirement,
+-- >                        VkMemoryPropertyFlags requiredProperties) {
+-- >     const uint32_t memoryCount = pMemoryProperties->memoryTypeCount;
+-- >     for (uint32_t memoryIndex = 0; memoryIndex < memoryCount; ++memoryIndex) {
+-- >         const uint32_t memoryTypeBits = (1 << memoryIndex);
+-- >         const bool isRequiredMemoryType = memoryTypeBitsRequirement & memoryTypeBits;
+-- >
+-- >         const VkMemoryPropertyFlags properties =
+-- >             pMemoryProperties->memoryTypes[memoryIndex].propertyFlags;
+-- >         const bool hasRequiredProperties =
+-- >             (properties & requiredProperties) == requiredProperties;
+-- >
+-- >         if (isRequiredMemoryType && hasRequiredProperties)
+-- >             return static_cast<int32_t>(memoryIndex);
+-- >     }
+-- >
+-- >     // failed to find memory type
+-- >     return -1;
+-- > }
+-- >
+-- > // Try to find an optimal memory type, or if it does not exist try fallback memory type
+-- > // `device` is the VkDevice
+-- > // `image` is the VkImage that requires memory to be bound
+-- > // `memoryProperties` properties as returned by vkGetPhysicalDeviceMemoryProperties
+-- > // `requiredProperties` are the property flags that must be present
+-- > // `optimalProperties` are the property flags that are preferred by the application
+-- > VkMemoryRequirements memoryRequirements;
+-- > vkGetImageMemoryRequirements(device, image, &memoryRequirements);
+-- > int32_t memoryType =
+-- >     findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, optimalProperties);
+-- > if (memoryType == -1) // not found; try fallback properties
+-- >     memoryType =
+-- >         findProperties(&memoryProperties, memoryRequirements.memoryTypeBits, requiredProperties);
+--
+-- = See Also
+--
+-- 'VkMemoryHeap', 'VkMemoryType',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceMemoryProperties2',
+-- 'vkGetPhysicalDeviceMemoryProperties'
+data VkPhysicalDeviceMemoryProperties = VkPhysicalDeviceMemoryProperties
+  { -- | @memoryTypeCount@ is the number of valid elements in the @memoryTypes@
+  -- array.
+  vkMemoryTypeCount :: Word32
+  , -- | @memoryTypes@ is an array of 'VkMemoryType' structures describing the
+  -- /memory types/ that /can/ be used to access memory allocated from the
+  -- heaps specified by @memoryHeaps@.
+  vkMemoryTypes :: Vector VK_MAX_MEMORY_TYPES VkMemoryType
+  , -- | @memoryHeapCount@ is the number of valid elements in the @memoryHeaps@
+  -- array.
+  vkMemoryHeapCount :: Word32
+  , -- | @memoryHeaps@ is an array of 'VkMemoryHeap' structures describing the
+  -- /memory heaps/ from which memory /can/ be allocated.
+  vkMemoryHeaps :: Vector VK_MAX_MEMORY_HEAPS VkMemoryHeap
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceMemoryProperties where
+  sizeOf ~_ = 520
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceMemoryProperties <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 4)
+                                              <*> peek (ptr `plusPtr` 260)
+                                              <*> peek (ptr `plusPtr` 264)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMemoryTypeCount (poked :: VkPhysicalDeviceMemoryProperties))
+                *> poke (ptr `plusPtr` 4) (vkMemoryTypes (poked :: VkPhysicalDeviceMemoryProperties))
+                *> poke (ptr `plusPtr` 260) (vkMemoryHeapCount (poked :: VkPhysicalDeviceMemoryProperties))
+                *> poke (ptr `plusPtr` 264) (vkMemoryHeaps (poked :: VkPhysicalDeviceMemoryProperties))
+-- | VkMemoryType - Structure specifying memory type
+--
+-- = See Also
+--
+-- 'VkMemoryPropertyFlags', 'VkPhysicalDeviceMemoryProperties'
+data VkMemoryType = VkMemoryType
+  { -- | @propertyFlags@ is a bitmask of 'VkMemoryPropertyFlagBits' of properties
+  -- for this memory type.
+  vkPropertyFlags :: VkMemoryPropertyFlags
+  , -- | @heapIndex@ describes which memory heap this memory type corresponds to,
+  -- and /must/ be less than @memoryHeapCount@ from the
+  -- 'VkPhysicalDeviceMemoryProperties' structure.
+  vkHeapIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryType where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkMemoryType <$> peek (ptr `plusPtr` 0)
+                          <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkPropertyFlags (poked :: VkMemoryType))
+                *> poke (ptr `plusPtr` 4) (vkHeapIndex (poked :: VkMemoryType))
+-- | VkMemoryHeap - Structure specifying a memory heap
+--
+-- = See Also
+--
+-- @VkDeviceSize@, 'VkMemoryHeapFlags', 'VkPhysicalDeviceMemoryProperties'
+data VkMemoryHeap = VkMemoryHeap
+  { -- | @size@ is the total memory size in bytes in the heap.
+  vkSize :: VkDeviceSize
+  , -- | @flags@ is a bitmask of 'VkMemoryHeapFlagBits' specifying attribute
+  -- flags for the heap.
+  vkFlags :: VkMemoryHeapFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryHeap where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek ptr = VkMemoryHeap <$> peek (ptr `plusPtr` 0)
+                          <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryHeap))
+                *> poke (ptr `plusPtr` 8) (vkFlags (poked :: VkMemoryHeap))
+-- | VkFormatProperties - Structure specifying image format properties
+--
+-- = Description
+--
+-- __Note__
+--
+-- If no format feature flags are supported, the format itself is not
+-- supported, and images of that format cannot be created.
+--
+-- If @format@ is a block-compression format, then buffers /must/ not
+-- support any features for the format.
+--
+-- = See Also
+--
+-- 'VkFormatFeatureFlags',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkFormatProperties2',
+-- 'vkGetPhysicalDeviceFormatProperties'
+data VkFormatProperties = VkFormatProperties
+  { -- | @linearTilingFeatures@ is a bitmask of 'VkFormatFeatureFlagBits'
+  -- specifying features supported by images created with a @tiling@
+  -- parameter of @VK_IMAGE_TILING_LINEAR@.
+  vkLinearTilingFeatures :: VkFormatFeatureFlags
+  , -- | @optimalTilingFeatures@ is a bitmask of 'VkFormatFeatureFlagBits'
+  -- specifying features supported by images created with a @tiling@
+  -- parameter of @VK_IMAGE_TILING_OPTIMAL@.
+  vkOptimalTilingFeatures :: VkFormatFeatureFlags
+  , -- | @bufferFeatures@ is a bitmask of 'VkFormatFeatureFlagBits' specifying
+  -- features supported by buffers.
+  vkBufferFeatures :: VkFormatFeatureFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkFormatProperties where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkFormatProperties <$> peek (ptr `plusPtr` 0)
+                                <*> peek (ptr `plusPtr` 4)
+                                <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkLinearTilingFeatures (poked :: VkFormatProperties))
+                *> poke (ptr `plusPtr` 4) (vkOptimalTilingFeatures (poked :: VkFormatProperties))
+                *> poke (ptr `plusPtr` 8) (vkBufferFeatures (poked :: VkFormatProperties))
+-- | VkImageFormatProperties - Structure specifying a image format properties
+--
+-- = Members
+--
+-- -   @maxExtent@ are the maximum image dimensions. See the [Allowed
+--     Extent
+--     Values](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-extentperimagetype)
+--     section below for how these values are constrained by @type@.
+--
+-- -   @maxMipLevels@ is the maximum number of mipmap levels.
+--     @maxMipLevels@ /must/ be equal to ⌈log2(max(@width@, @height@,
+--     @depth@))⌉ + 1, where @width@, @height@, and @depth@ are taken from
+--     the corresponding members of @maxExtent@, except when one of the
+--     following conditions is true, in which case it /may/ instead be @1@:
+--
+--     -   @vkGetPhysicalDeviceImageFormatProperties@::@tiling@ was
+--         @VK_IMAGE_TILING_LINEAR@
+--
+--     -   the
+--         'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2'::@pNext@
+--         chain included an instance of
+--         'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalImageFormatInfo'
+--         with a handle type included in the @handleTypes@ member for
+--         which mipmap image support is not required
+--
+-- -   @maxArrayLayers@ is the maximum number of array layers.
+--     @maxArrayLayers@ /must/ either be equal to 1 or be greater than or
+--     equal to the @maxImageArrayLayers@ member of
+--     'VkPhysicalDeviceLimits'. A value of 1 is valid only if @tiling@ is
+--     @VK_IMAGE_TILING_LINEAR@ or if @type@ is @VK_IMAGE_TYPE_3D@.
+--
+-- -   @sampleCounts@ is a bitmask of 'VkSampleCountFlagBits' specifying
+--     all the supported sample counts for this image as described
+--     [below](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-supported-sample-counts).
+--
+-- -   @maxResourceSize@ is an upper bound on the total image size in
+--     bytes, inclusive of all image subresources. Implementations /may/
+--     have an address space limit on total size of a resource, which is
+--     advertised by this property. @maxResourceSize@ /must/ be at least
+--     231.
+--
+-- = Description
+--
+-- __Note__
+--
+-- There is no mechanism to query the size of an image before creating it,
+-- to compare that size against @maxResourceSize@. If an application
+-- attempts to create an image that exceeds this limit, the creation will
+-- fail and 'Graphics.Vulkan.Core10.Image.vkCreateImage' will return
+-- @VK_ERROR_OUT_OF_DEVICE_MEMORY@. While the advertised limit /must/ be at
+-- least 231, it /may/ not be possible to create an image that approaches
+-- that size, particularly for @VK_IMAGE_TYPE_1D@.
+--
+-- If the combination of parameters to
+-- @vkGetPhysicalDeviceImageFormatProperties@ is not supported by the
+-- implementation for use in 'Graphics.Vulkan.Core10.Image.vkCreateImage',
+-- then all members of @VkImageFormatProperties@ will be filled with zero.
+--
+-- __Note__
+--
+-- Filling @VkImageFormatProperties@ with zero for unsupported formats is
+-- an exception to the usual rule that output structures have undefined
+-- contents on error. This exception was unintentional, but is preserved
+-- for backwards compatibility.
+--
+-- = See Also
+--
+-- @VkDeviceSize@, 'VkExtent3D',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalImageFormatPropertiesNV',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkImageFormatProperties2',
+-- 'VkSampleCountFlags', 'vkGetPhysicalDeviceImageFormatProperties'
+data VkImageFormatProperties = VkImageFormatProperties
+  { -- No documentation found for Nested "VkImageFormatProperties" "maxExtent"
+  vkMaxExtent :: VkExtent3D
+  , -- No documentation found for Nested "VkImageFormatProperties" "maxMipLevels"
+  vkMaxMipLevels :: Word32
+  , -- No documentation found for Nested "VkImageFormatProperties" "maxArrayLayers"
+  vkMaxArrayLayers :: Word32
+  , -- No documentation found for Nested "VkImageFormatProperties" "sampleCounts"
+  vkSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkImageFormatProperties" "maxResourceSize"
+  vkMaxResourceSize :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageFormatProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkImageFormatProperties <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 12)
+                                     <*> peek (ptr `plusPtr` 16)
+                                     <*> peek (ptr `plusPtr` 20)
+                                     <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxExtent (poked :: VkImageFormatProperties))
+                *> poke (ptr `plusPtr` 12) (vkMaxMipLevels (poked :: VkImageFormatProperties))
+                *> poke (ptr `plusPtr` 16) (vkMaxArrayLayers (poked :: VkImageFormatProperties))
+                *> poke (ptr `plusPtr` 20) (vkSampleCounts (poked :: VkImageFormatProperties))
+                *> poke (ptr `plusPtr` 24) (vkMaxResourceSize (poked :: VkImageFormatProperties))
+-- | VkPhysicalDeviceFeatures - Structure describing the fine-grained
+-- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the @VkPhysicalDeviceFeatures@ structure describe the
+-- following features:
+--
+-- = Description
+--
+-- -   @robustBufferAccess@ specifies that accesses to buffers are
+--     bounds-checked against the range of the buffer descriptor (as
+--     determined by @VkDescriptorBufferInfo@::@range@,
+--     @VkBufferViewCreateInfo@::@range@, or the size of the buffer). Out
+--     of bounds accesses /must/ not cause application termination, and the
+--     effects of shader loads, stores, and atomics /must/ conform to an
+--     implementation-dependent behavior as described below.
+--
+--     -   A buffer access is considered to be out of bounds if any of the
+--         following are true:
+--
+--         -   The pointer was formed by @OpImageTexelPointer@ and the
+--             coordinate is less than zero or greater than or equal to the
+--             number of whole elements in the bound range.
+--
+--         -   The pointer was not formed by @OpImageTexelPointer@ and the
+--             object pointed to is not wholly contained within the bound
+--             range. This includes accesses performed via /variable
+--             pointers/ where the buffer descriptor being accessed cannot
+--             be statically determined. Uninitialized pointers and
+--             pointers equal to @OpConstantNull@ are treated as pointing
+--             to a zero-sized object, so all accesses through such
+--             pointers are considered to be out of bounds.
+--
+--             __Note__
+--
+--             If a SPIR-V @OpLoad@ instruction loads a structure and the
+--             tail end of the structure is out of bounds, then all members
+--             of the structure are considered out of bounds even if the
+--             members at the end are not statically used.
+--
+--         -   If any buffer access in a given SPIR-V block is determined
+--             to be out of bounds, then any other access of the same type
+--             (load, store, or atomic) in the same SPIR-V block that
+--             accesses an address less than 16 bytes away from the out of
+--             bounds address /may/ also be considered out of bounds.
+--
+--     -   Out-of-bounds buffer loads will return any of the following
+--         values:
+--
+--         -   Values from anywhere within the memory range(s) bound to the
+--             buffer (possibly including bytes of memory past the end of
+--             the buffer, up to the end of the bound range).
+--
+--         -   Zero values, or (0,0,0,x) vectors for vector reads where x
+--             is a valid value represented in the type of the vector
+--             components and /may/ be any of:
+--
+--             -   0, 1, or the maximum representable positive integer
+--                 value, for signed or unsigned integer components
+--
+--             -   0.0 or 1.0, for floating-point components
+--
+--     -   Out-of-bounds writes /may/ modify values within the memory
+--         range(s) bound to the buffer, but /must/ not modify any other
+--         memory.
+--
+--     -   Out-of-bounds atomics /may/ modify values within the memory
+--         range(s) bound to the buffer, but /must/ not modify any other
+--         memory, and return an undefined value.
+--
+--     -   Vertex input attributes are considered out of bounds if the
+--         offset of the attribute in the bound vertex buffer range plus
+--         the size of the attribute is greater than either:
+--
+--         -   @vertexBufferRangeSize@, if @bindingStride@ == 0; or
+--
+--         -   (@vertexBufferRangeSize@ - (@vertexBufferRangeSize@ %
+--             @bindingStride@))
+--
+--         where @vertexBufferRangeSize@ is the byte size of the memory
+--         range bound to the vertex buffer binding and @bindingStride@ is
+--         the byte stride of the corresponding vertex input binding.
+--         Further, if any vertex input attribute using a specific vertex
+--         input binding is out of bounds, then all vertex input attributes
+--         using that vertex input binding for that vertex shader
+--         invocation are considered out of bounds.
+--
+--         -   If a vertex input attribute is out of bounds, it will be
+--             assigned one of the following values:
+--
+--             -   Values from anywhere within the memory range(s) bound to
+--                 the buffer, converted according to the format of the
+--                 attribute.
+--
+--             -   Zero values, format converted according to the format of
+--                 the attribute.
+--
+--             -   Zero values, or (0,0,0,x) vectors, as described above.
+--
+--     -   If @robustBufferAccess@ is not enabled, out of bounds accesses
+--         /may/ corrupt any memory within the process and cause undefined
+--         behavior up to and including application termination.
+--
+-- -   @fullDrawIndexUint32@ specifies the full 32-bit range of indices is
+--     supported for indexed draw calls when using a
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType' of
+--     @VK_INDEX_TYPE_UINT32@. @maxDrawIndexedIndexValue@ is the maximum
+--     index value that /may/ be used (aside from the primitive restart
+--     index, which is always 232-1 when the
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType' is
+--     @VK_INDEX_TYPE_UINT32@). If this feature is supported,
+--     @maxDrawIndexedIndexValue@ /must/ be 232-1; otherwise it /must/ be
+--     no smaller than 224-1. See
+--     [maxDrawIndexedIndexValue](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxDrawIndexedIndexValue).
+--
+-- -   @imageCubeArray@ specifies whether image views with a
+--     'Graphics.Vulkan.Core10.ImageView.VkImageViewType' of
+--     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@ /can/ be created, and that the
+--     corresponding @SampledCubeArray@ and @ImageCubeArray@ SPIR-V
+--     capabilities /can/ be used in shader code.
+--
+-- -   @independentBlend@ specifies whether the
+--     @VkPipelineColorBlendAttachmentState@ settings are controlled
+--     independently per-attachment. If this feature is not enabled, the
+--     @VkPipelineColorBlendAttachmentState@ settings for all color
+--     attachments /must/ be identical. Otherwise, a different
+--     @VkPipelineColorBlendAttachmentState@ /can/ be provided for each
+--     bound color attachment.
+--
+-- -   @geometryShader@ specifies whether geometry shaders are supported.
+--     If this feature is not enabled, the @VK_SHADER_STAGE_GEOMETRY_BIT@
+--     and @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@ enum values /must/ not
+--     be used. This also specifies whether shader modules /can/ declare
+--     the @Geometry@ capability.
+--
+-- -   @tessellationShader@ specifies whether tessellation control and
+--     evaluation shaders are supported. If this feature is not enabled,
+--     the @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@,
+--     @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@,
+--     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@,
+--     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@, and
+--     @VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO@ enum
+--     values /must/ not be used. This also specifies whether shader
+--     modules /can/ declare the @Tessellation@ capability.
+--
+-- -   @sampleRateShading@ specifies whether [Sample
+--     Shading](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-sampleshading)
+--     and multisample interpolation are supported. If this feature is not
+--     enabled, the @sampleShadingEnable@ member of the
+--     @VkPipelineMultisampleStateCreateInfo@ structure /must/ be set to
+--     @VK_FALSE@ and the @minSampleShading@ member is ignored. This also
+--     specifies whether shader modules /can/ declare the
+--     @SampleRateShading@ capability.
+--
+-- -   @dualSrcBlend@ specifies whether blend operations which take two
+--     sources are supported. If this feature is not enabled, the
+--     @VK_BLEND_FACTOR_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_SRC1_ALPHA@, and
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@ enum values /must/ not be
+--     used as source or destination blending factors. See
+--     [{html_spec_relative}#framebuffer-dsb](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-dsb).
+--
+-- -   @logicOp@ specifies whether logic operations are supported. If this
+--     feature is not enabled, the @logicOpEnable@ member of the
+--     @VkPipelineColorBlendStateCreateInfo@ structure /must/ be set to
+--     @VK_FALSE@, and the @logicOp@ member is ignored.
+--
+-- -   @multiDrawIndirect@ specifies whether multiple draw indirect is
+--     supported. If this feature is not enabled, the @drawCount@ parameter
+--     to the @vkCmdDrawIndirect@ and @vkCmdDrawIndexedIndirect@ commands
+--     /must/ be 0 or 1. The @maxDrawIndirectCount@ member of the
+--     @VkPhysicalDeviceLimits@ structure /must/ also be 1 if this feature
+--     is not supported. See
+--     [maxDrawIndirectCount](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxDrawIndirectCount).
+--
+-- -   @drawIndirectFirstInstance@ specifies whether indirect draw calls
+--     support the @firstInstance@ parameter. If this feature is not
+--     enabled, the @firstInstance@ member of all @VkDrawIndirectCommand@
+--     and @VkDrawIndexedIndirectCommand@ structures that are provided to
+--     the @vkCmdDrawIndirect@ and @vkCmdDrawIndexedIndirect@ commands
+--     /must/ be 0.
+--
+-- -   @depthClamp@ specifies whether depth clamping is supported. If this
+--     feature is not enabled, the @depthClampEnable@ member of the
+--     @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set to
+--     @VK_FALSE@. Otherwise, setting @depthClampEnable@ to @VK_TRUE@ will
+--     enable depth clamping.
+--
+-- -   @depthBiasClamp@ specifies whether depth bias clamping is supported.
+--     If this feature is not enabled, the @depthBiasClamp@ member of the
+--     @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set to
+--     0.0 unless the @VK_DYNAMIC_STATE_DEPTH_BIAS@ dynamic state is
+--     enabled, and the @depthBiasClamp@ parameter to @vkCmdSetDepthBias@
+--     /must/ be set to 0.0.
+--
+-- -   @fillModeNonSolid@ specifies whether point and wireframe fill modes
+--     are supported. If this feature is not enabled, the
+--     @VK_POLYGON_MODE_POINT@ and @VK_POLYGON_MODE_LINE@ enum values
+--     /must/ not be used.
+--
+-- -   @depthBounds@ specifies whether depth bounds tests are supported. If
+--     this feature is not enabled, the @depthBoundsTestEnable@ member of
+--     the @VkPipelineDepthStencilStateCreateInfo@ structure /must/ be set
+--     to @VK_FALSE@. When @depthBoundsTestEnable@ is set to @VK_FALSE@,
+--     the @minDepthBounds@ and @maxDepthBounds@ members of the
+--     @VkPipelineDepthStencilStateCreateInfo@ structure are ignored.
+--
+-- -   @wideLines@ specifies whether lines with width other than 1.0 are
+--     supported. If this feature is not enabled, the @lineWidth@ member of
+--     the @VkPipelineRasterizationStateCreateInfo@ structure /must/ be set
+--     to 1.0 unless the @VK_DYNAMIC_STATE_LINE_WIDTH@ dynamic state is
+--     enabled, and the @lineWidth@ parameter to @vkCmdSetLineWidth@ /must/
+--     be set to 1.0. When this feature is supported, the range and
+--     granularity of supported line widths are indicated by the
+--     @lineWidthRange@ and @lineWidthGranularity@ members of the
+--     @VkPhysicalDeviceLimits@ structure, respectively.
+--
+-- -   @largePoints@ specifies whether points with size greater than 1.0
+--     are supported. If this feature is not enabled, only a point size of
+--     1.0 written by a shader is supported. The range and granularity of
+--     supported point sizes are indicated by the @pointSizeRange@ and
+--     @pointSizeGranularity@ members of the @VkPhysicalDeviceLimits@
+--     structure, respectively.
+--
+-- -   @alphaToOne@ specifies whether the implementation is able to replace
+--     the alpha value of the color fragment output from the fragment
+--     shader with the maximum representable alpha value for fixed-point
+--     colors or 1.0 for floating-point colors. If this feature is not
+--     enabled, then the @alphaToOneEnable@ member of the
+--     @VkPipelineMultisampleStateCreateInfo@ structure /must/ be set to
+--     @VK_FALSE@. Otherwise setting @alphaToOneEnable@ to @VK_TRUE@ will
+--     enable alpha-to-one behavior.
+--
+-- -   @multiViewport@ specifies whether more than one viewport is
+--     supported. If this feature is not enabled, the @viewportCount@ and
+--     @scissorCount@ members of the @VkPipelineViewportStateCreateInfo@
+--     structure /must/ be set to 1. Similarly, the @viewportCount@
+--     parameter to the @vkCmdSetViewport@ command and the @scissorCount@
+--     parameter to the @vkCmdSetScissor@ command /must/ be 1, and the
+--     @firstViewport@ parameter to the @vkCmdSetViewport@ command and the
+--     @firstScissor@ parameter to the @vkCmdSetScissor@ command /must/ be
+--     0.
+--
+-- -   @samplerAnisotropy@ specifies whether anisotropic filtering is
+--     supported. If this feature is not enabled, the @anisotropyEnable@
+--     member of the @VkSamplerCreateInfo@ structure /must/ be @VK_FALSE@.
+--
+-- -   @textureCompressionETC2@ specifies whether all of the ETC2 and EAC
+--     compressed texture formats are supported. If this feature is
+--     enabled, then the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
+--     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/
+--     be supported in @optimalTilingFeatures@ for the following formats:
+--
+--     -   @VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_EAC_R11_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_EAC_R11_SNORM_BLOCK@
+--
+--     -   @VK_FORMAT_EAC_R11G11_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_EAC_R11G11_SNORM_BLOCK@
+--
+--     'vkGetPhysicalDeviceFormatProperties' and
+--     'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check
+--     for additional supported properties of individual formats.
+--
+-- -   @textureCompressionASTC_LDR@ specifies whether all of the ASTC LDR
+--     compressed texture formats are supported. If this feature is
+--     enabled, then the @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
+--     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/
+--     be supported in @optimalTilingFeatures@ for the following formats:
+--
+--     -   @VK_FORMAT_ASTC_4x4_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_4x4_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_5x4_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_5x4_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_5x5_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_5x5_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_6x5_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_6x5_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_6x6_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_6x6_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_8x5_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_8x5_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_8x6_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_8x6_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_8x8_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_8x8_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x5_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x5_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x6_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x6_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x8_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x8_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x10_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_10x10_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_12x10_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_12x10_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_12x12_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_ASTC_12x12_SRGB_BLOCK@
+--
+--     'vkGetPhysicalDeviceFormatProperties' and
+--     'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check
+--     for additional supported properties of individual formats.
+--
+-- -   @textureCompressionBC@ specifies whether all of the BC compressed
+--     texture formats are supported. If this feature is enabled, then the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
+--     @VK_FORMAT_FEATURE_BLIT_SRC_BIT@ and
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ features /must/
+--     be supported in @optimalTilingFeatures@ for the following formats:
+--
+--     -   @VK_FORMAT_BC1_RGB_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC1_RGB_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_BC1_RGBA_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC1_RGBA_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_BC2_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC2_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_BC3_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC3_SRGB_BLOCK@
+--
+--     -   @VK_FORMAT_BC4_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC4_SNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC5_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC5_SNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC6H_UFLOAT_BLOCK@
+--
+--     -   @VK_FORMAT_BC6H_SFLOAT_BLOCK@
+--
+--     -   @VK_FORMAT_BC7_UNORM_BLOCK@
+--
+--     -   @VK_FORMAT_BC7_SRGB_BLOCK@
+--
+--     'vkGetPhysicalDeviceFormatProperties' and
+--     'vkGetPhysicalDeviceImageFormatProperties' /can/ be used to check
+--     for additional supported properties of individual formats.
+--
+-- -   @occlusionQueryPrecise@ specifies whether occlusion queries
+--     returning actual sample counts are supported. Occlusion queries are
+--     created in a @VkQueryPool@ by specifying the @queryType@ of
+--     @VK_QUERY_TYPE_OCCLUSION@ in the @VkQueryPoolCreateInfo@ structure
+--     which is passed to @vkCreateQueryPool@. If this feature is enabled,
+--     queries of this type /can/ enable @VK_QUERY_CONTROL_PRECISE_BIT@ in
+--     the @flags@ parameter to @vkCmdBeginQuery@. If this feature is not
+--     supported, the implementation supports only boolean occlusion
+--     queries. When any samples are passed, boolean queries will return a
+--     non-zero result value, otherwise a result value of zero is returned.
+--     When this feature is enabled and @VK_QUERY_CONTROL_PRECISE_BIT@ is
+--     set, occlusion queries will report the actual number of samples
+--     passed.
+--
+-- -   @pipelineStatisticsQuery@ specifies whether the pipeline statistics
+--     queries are supported. If this feature is not enabled, queries of
+--     type @VK_QUERY_TYPE_PIPELINE_STATISTICS@ /cannot/ be created, and
+--     none of the
+--     'Graphics.Vulkan.Core10.Query.VkQueryPipelineStatisticFlagBits' bits
+--     /can/ be set in the @pipelineStatistics@ member of the
+--     @VkQueryPoolCreateInfo@ structure.
+--
+-- -   @vertexPipelineStoresAndAtomics@ specifies whether storage buffers
+--     and images support stores and atomic operations in the vertex,
+--     tessellation, and geometry shader stages. If this feature is not
+--     enabled, all storage image, storage texel buffers, and storage
+--     buffer variables used by these stages in shader modules /must/ be
+--     decorated with the @NonWriteable@ decoration (or the @readonly@
+--     memory qualifier in GLSL).
+--
+-- -   @fragmentStoresAndAtomics@ specifies whether storage buffers and
+--     images support stores and atomic operations in the fragment shader
+--     stage. If this feature is not enabled, all storage image, storage
+--     texel buffers, and storage buffer variables used by the fragment
+--     stage in shader modules /must/ be decorated with the @NonWriteable@
+--     decoration (or the @readonly@ memory qualifier in GLSL).
+--
+-- -   @shaderTessellationAndGeometryPointSize@ specifies whether the
+--     @PointSize@ built-in decoration is available in the tessellation
+--     control, tessellation evaluation, and geometry shader stages. If
+--     this feature is not enabled, members decorated with the @PointSize@
+--     built-in decoration /must/ not be read from or written to and all
+--     points written from a tessellation or geometry shader will have a
+--     size of 1.0. This also specifies whether shader modules /can/
+--     declare the @TessellationPointSize@ capability for tessellation
+--     control and evaluation shaders, or if the shader modules /can/
+--     declare the @GeometryPointSize@ capability for geometry shaders. An
+--     implementation supporting this feature /must/ also support one or
+--     both of the
+--     [@tessellationShader@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     or
+--     [@geometryShader@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     features.
+--
+-- -   @shaderImageGatherExtended@ specifies whether the extended set of
+--     image gather instructions are available in shader code. If this
+--     feature is not enabled, the @OpImage@*@Gather@ instructions do not
+--     support the @Offset@ and @ConstOffsets@ operands. This also
+--     specifies whether shader modules /can/ declare the
+--     @ImageGatherExtended@ capability.
+--
+-- -   @shaderStorageImageExtendedFormats@ specifies whether the extended
+--     storage image formats are available in shader code. If this feature
+--     is not enabled, the formats requiring the
+--     @StorageImageExtendedFormats@ capability are not supported for
+--     storage images. This also specifies whether shader modules /can/
+--     declare the @StorageImageExtendedFormats@ capability.
+--
+-- -   @shaderStorageImageMultisample@ specifies whether multisampled
+--     storage images are supported. If this feature is not enabled, images
+--     that are created with a @usage@ that includes
+--     @VK_IMAGE_USAGE_STORAGE_BIT@ /must/ be created with @samples@ equal
+--     to @VK_SAMPLE_COUNT_1_BIT@. This also specifies whether shader
+--     modules /can/ declare the @StorageImageMultisample@ capability.
+--
+-- -   @shaderStorageImageReadWithoutFormat@ specifies whether storage
+--     images require a format qualifier to be specified when reading from
+--     storage images. If this feature is not enabled, the @OpImageRead@
+--     instruction /must/ not have an @OpTypeImage@ of @Unknown@. This also
+--     specifies whether shader modules /can/ declare the
+--     @StorageImageReadWithoutFormat@ capability.
+--
+-- -   @shaderStorageImageWriteWithoutFormat@ specifies whether storage
+--     images require a format qualifier to be specified when writing to
+--     storage images. If this feature is not enabled, the @OpImageWrite@
+--     instruction /must/ not have an @OpTypeImage@ of @Unknown@. This also
+--     specifies whether shader modules /can/ declare the
+--     @StorageImageWriteWithoutFormat@ capability.
+--
+-- -   @shaderUniformBufferArrayDynamicIndexing@ specifies whether arrays
+--     of uniform buffers /can/ be indexed by /dynamically uniform/ integer
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ /must/ be indexed only
+--     by constant integral expressions when aggregated into arrays in
+--     shader code. This also specifies whether shader modules /can/
+--     declare the @UniformBufferArrayDynamicIndexing@ capability.
+--
+-- -   @shaderSampledImageArrayDynamicIndexing@ specifies whether arrays of
+--     samplers or sampled images /can/ be indexed by dynamically uniform
+--     integer expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of @VK_DESCRIPTOR_TYPE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, or
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ /must/ be indexed only by
+--     constant integral expressions when aggregated into arrays in shader
+--     code. This also specifies whether shader modules /can/ declare the
+--     @SampledImageArrayDynamicIndexing@ capability.
+--
+-- -   @shaderStorageBufferArrayDynamicIndexing@ specifies whether arrays
+--     of storage buffers /can/ be indexed by dynamically uniform integer
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ /must/ be indexed only
+--     by constant integral expressions when aggregated into arrays in
+--     shader code. This also specifies whether shader modules /can/
+--     declare the @StorageBufferArrayDynamicIndexing@ capability.
+--
+-- -   @shaderStorageImageArrayDynamicIndexing@ specifies whether arrays of
+--     storage images /can/ be indexed by dynamically uniform integer
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ /must/ be indexed only by
+--     constant integral expressions when aggregated into arrays in shader
+--     code. This also specifies whether shader modules /can/ declare the
+--     @StorageImageArrayDynamicIndexing@ capability.
+--
+-- -   @shaderClipDistance@ specifies whether clip distances are supported
+--     in shader code. If this feature is not enabled, any members
+--     decorated with the @ClipDistance@ built-in decoration /must/ not be
+--     read from or written to in shader modules. This also specifies
+--     whether shader modules /can/ declare the @ClipDistance@ capability.
+--
+-- -   @shaderCullDistance@ specifies whether cull distances are supported
+--     in shader code. If this feature is not enabled, any members
+--     decorated with the @CullDistance@ built-in decoration /must/ not be
+--     read from or written to in shader modules. This also specifies
+--     whether shader modules /can/ declare the @CullDistance@ capability.
+--
+-- -   @shaderFloat64@ specifies whether 64-bit floats (doubles) are
+--     supported in shader code. If this feature is not enabled, 64-bit
+--     floating-point types /must/ not be used in shader code. This also
+--     specifies whether shader modules /can/ declare the @Float64@
+--     capability.
+--
+-- -   @shaderInt64@ specifies whether 64-bit integers (signed and
+--     unsigned) are supported in shader code. If this feature is not
+--     enabled, 64-bit integer types /must/ not be used in shader code.
+--     This also specifies whether shader modules /can/ declare the @Int64@
+--     capability.
+--
+-- -   @shaderInt16@ specifies whether 16-bit integers (signed and
+--     unsigned) are supported in shader code. If this feature is not
+--     enabled, 16-bit integer types /must/ not be used in shader code.
+--     This also specifies whether shader modules /can/ declare the @Int16@
+--     capability.
+--
+-- -   @shaderResourceResidency@ specifies whether image operations that
+--     return resource residency information are supported in shader code.
+--     If this feature is not enabled, the @OpImageSparse@* instructions
+--     /must/ not be used in shader code. This also specifies whether
+--     shader modules /can/ declare the @SparseResidency@ capability. The
+--     feature requires at least one of the @sparseResidency*@ features to
+--     be supported.
+--
+-- -   @shaderResourceMinLod@ specifies whether image operations that
+--     specify the minimum resource LOD are supported in shader code. If
+--     this feature is not enabled, the @MinLod@ image operand /must/ not
+--     be used in shader code. This also specifies whether shader modules
+--     /can/ declare the @MinLod@ capability.
+--
+-- -   @sparseBinding@ specifies whether resource memory /can/ be managed
+--     at opaque sparse block level instead of at the object level. If this
+--     feature is not enabled, resource memory /must/ be bound only on a
+--     per-object basis using the @vkBindBufferMemory@ and
+--     @vkBindImageMemory@ commands. In this case, buffers and images
+--     /must/ not be created with @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ and
+--     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ set in the @flags@ member of
+--     the @VkBufferCreateInfo@ and @VkImageCreateInfo@ structures,
+--     respectively. Otherwise resource memory /can/ be managed as
+--     described in [Sparse Resource
+--     Features](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseresourcefeatures).
+--
+-- -   @sparseResidencyBuffer@ specifies whether the device /can/ access
+--     partially resident buffers. If this feature is not enabled, buffers
+--     /must/ not be created with @VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT@
+--     set in the @flags@ member of the @VkBufferCreateInfo@ structure.
+--
+-- -   @sparseResidencyImage2D@ specifies whether the device /can/ access
+--     partially resident 2D images with 1 sample per pixel. If this
+--     feature is not enabled, images with an @imageType@ of
+--     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_1_BIT@
+--     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
+--     set in the @flags@ member of the @VkImageCreateInfo@ structure.
+--
+-- -   @sparseResidencyImage3D@ specifies whether the device /can/ access
+--     partially resident 3D images. If this feature is not enabled, images
+--     with an @imageType@ of @VK_IMAGE_TYPE_3D@ /must/ not be created with
+--     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ set in the @flags@ member of
+--     the @VkImageCreateInfo@ structure.
+--
+-- -   @sparseResidency2Samples@ specifies whether the physical device
+--     /can/ access partially resident 2D images with 2 samples per pixel.
+--     If this feature is not enabled, images with an @imageType@ of
+--     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_2_BIT@
+--     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
+--     set in the @flags@ member of the @VkImageCreateInfo@ structure.
+--
+-- -   @sparseResidency4Samples@ specifies whether the physical device
+--     /can/ access partially resident 2D images with 4 samples per pixel.
+--     If this feature is not enabled, images with an @imageType@ of
+--     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_4_BIT@
+--     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
+--     set in the @flags@ member of the @VkImageCreateInfo@ structure.
+--
+-- -   @sparseResidency8Samples@ specifies whether the physical device
+--     /can/ access partially resident 2D images with 8 samples per pixel.
+--     If this feature is not enabled, images with an @imageType@ of
+--     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_8_BIT@
+--     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
+--     set in the @flags@ member of the @VkImageCreateInfo@ structure.
+--
+-- -   @sparseResidency16Samples@ specifies whether the physical device
+--     /can/ access partially resident 2D images with 16 samples per pixel.
+--     If this feature is not enabled, images with an @imageType@ of
+--     @VK_IMAGE_TYPE_2D@ and @samples@ set to @VK_SAMPLE_COUNT_16_BIT@
+--     /must/ not be created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
+--     set in the @flags@ member of the @VkImageCreateInfo@ structure.
+--
+-- -   @sparseResidencyAliased@ specifies whether the physical device /can/
+--     correctly access data aliased into multiple locations. If this
+--     feature is not enabled, the @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@
+--     and @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ enum values /must/ not be
+--     used in @flags@ members of the @VkBufferCreateInfo@ and
+--     @VkImageCreateInfo@ structures, respectively.
+--
+-- -   @variableMultisampleRate@ specifies whether all pipelines that will
+--     be bound to a command buffer during a subpass with no attachments
+--     /must/ have the same value for
+--     @VkPipelineMultisampleStateCreateInfo@::@rasterizationSamples@. If
+--     set to @VK_TRUE@, the implementation supports variable multisample
+--     rates in a subpass with no attachments. If set to @VK_FALSE@, then
+--     all pipelines bound in such a subpass /must/ have the same
+--     multisample rate. This has no effect in situations where a subpass
+--     uses any attachments.
+--
+-- -   @inheritedQueries@ specifies whether a secondary command buffer
+--     /may/ be executed while a query is active.
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
+-- 'vkGetPhysicalDeviceFeatures'
+data VkPhysicalDeviceFeatures = VkPhysicalDeviceFeatures
+  { -- No documentation found for Nested "VkPhysicalDeviceFeatures" "robustBufferAccess"
+  vkRobustBufferAccess :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "fullDrawIndexUint32"
+  vkFullDrawIndexUint32 :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "imageCubeArray"
+  vkImageCubeArray :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "independentBlend"
+  vkIndependentBlend :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "geometryShader"
+  vkGeometryShader :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "tessellationShader"
+  vkTessellationShader :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sampleRateShading"
+  vkSampleRateShading :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "dualSrcBlend"
+  vkDualSrcBlend :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "logicOp"
+  vkLogicOp :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "multiDrawIndirect"
+  vkMultiDrawIndirect :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "drawIndirectFirstInstance"
+  vkDrawIndirectFirstInstance :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "depthClamp"
+  vkDepthClamp :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "depthBiasClamp"
+  vkDepthBiasClamp :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "fillModeNonSolid"
+  vkFillModeNonSolid :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "depthBounds"
+  vkDepthBounds :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "wideLines"
+  vkWideLines :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "largePoints"
+  vkLargePoints :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "alphaToOne"
+  vkAlphaToOne :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "multiViewport"
+  vkMultiViewport :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "samplerAnisotropy"
+  vkSamplerAnisotropy :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "textureCompressionETC2"
+  vkTextureCompressionETC2 :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "textureCompressionASTC_LDR"
+  vkTextureCompressionASTC_LDR :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "textureCompressionBC"
+  vkTextureCompressionBC :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "occlusionQueryPrecise"
+  vkOcclusionQueryPrecise :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "pipelineStatisticsQuery"
+  vkPipelineStatisticsQuery :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "vertexPipelineStoresAndAtomics"
+  vkVertexPipelineStoresAndAtomics :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "fragmentStoresAndAtomics"
+  vkFragmentStoresAndAtomics :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderTessellationAndGeometryPointSize"
+  vkShaderTessellationAndGeometryPointSize :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderImageGatherExtended"
+  vkShaderImageGatherExtended :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageExtendedFormats"
+  vkShaderStorageImageExtendedFormats :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageMultisample"
+  vkShaderStorageImageMultisample :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageReadWithoutFormat"
+  vkShaderStorageImageReadWithoutFormat :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageWriteWithoutFormat"
+  vkShaderStorageImageWriteWithoutFormat :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderUniformBufferArrayDynamicIndexing"
+  vkShaderUniformBufferArrayDynamicIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderSampledImageArrayDynamicIndexing"
+  vkShaderSampledImageArrayDynamicIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageBufferArrayDynamicIndexing"
+  vkShaderStorageBufferArrayDynamicIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderStorageImageArrayDynamicIndexing"
+  vkShaderStorageImageArrayDynamicIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderClipDistance"
+  vkShaderClipDistance :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderCullDistance"
+  vkShaderCullDistance :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderFloat64"
+  vkShaderFloat64 :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderInt64"
+  vkShaderInt64 :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderInt16"
+  vkShaderInt16 :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderResourceResidency"
+  vkShaderResourceResidency :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "shaderResourceMinLod"
+  vkShaderResourceMinLod :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseBinding"
+  vkSparseBinding :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyBuffer"
+  vkSparseResidencyBuffer :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyImage2D"
+  vkSparseResidencyImage2D :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyImage3D"
+  vkSparseResidencyImage3D :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency2Samples"
+  vkSparseResidency2Samples :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency4Samples"
+  vkSparseResidency4Samples :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency8Samples"
+  vkSparseResidency8Samples :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidency16Samples"
+  vkSparseResidency16Samples :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "sparseResidencyAliased"
+  vkSparseResidencyAliased :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "variableMultisampleRate"
+  vkVariableMultisampleRate :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures" "inheritedQueries"
+  vkInheritedQueries :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceFeatures where
+  sizeOf ~_ = 220
+  alignment ~_ = 4
+  peek ptr = VkPhysicalDeviceFeatures <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 4)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 12)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 20)
+                                      <*> peek (ptr `plusPtr` 24)
+                                      <*> peek (ptr `plusPtr` 28)
+                                      <*> peek (ptr `plusPtr` 32)
+                                      <*> peek (ptr `plusPtr` 36)
+                                      <*> peek (ptr `plusPtr` 40)
+                                      <*> peek (ptr `plusPtr` 44)
+                                      <*> peek (ptr `plusPtr` 48)
+                                      <*> peek (ptr `plusPtr` 52)
+                                      <*> peek (ptr `plusPtr` 56)
+                                      <*> peek (ptr `plusPtr` 60)
+                                      <*> peek (ptr `plusPtr` 64)
+                                      <*> peek (ptr `plusPtr` 68)
+                                      <*> peek (ptr `plusPtr` 72)
+                                      <*> peek (ptr `plusPtr` 76)
+                                      <*> peek (ptr `plusPtr` 80)
+                                      <*> peek (ptr `plusPtr` 84)
+                                      <*> peek (ptr `plusPtr` 88)
+                                      <*> peek (ptr `plusPtr` 92)
+                                      <*> peek (ptr `plusPtr` 96)
+                                      <*> peek (ptr `plusPtr` 100)
+                                      <*> peek (ptr `plusPtr` 104)
+                                      <*> peek (ptr `plusPtr` 108)
+                                      <*> peek (ptr `plusPtr` 112)
+                                      <*> peek (ptr `plusPtr` 116)
+                                      <*> peek (ptr `plusPtr` 120)
+                                      <*> peek (ptr `plusPtr` 124)
+                                      <*> peek (ptr `plusPtr` 128)
+                                      <*> peek (ptr `plusPtr` 132)
+                                      <*> peek (ptr `plusPtr` 136)
+                                      <*> peek (ptr `plusPtr` 140)
+                                      <*> peek (ptr `plusPtr` 144)
+                                      <*> peek (ptr `plusPtr` 148)
+                                      <*> peek (ptr `plusPtr` 152)
+                                      <*> peek (ptr `plusPtr` 156)
+                                      <*> peek (ptr `plusPtr` 160)
+                                      <*> peek (ptr `plusPtr` 164)
+                                      <*> peek (ptr `plusPtr` 168)
+                                      <*> peek (ptr `plusPtr` 172)
+                                      <*> peek (ptr `plusPtr` 176)
+                                      <*> peek (ptr `plusPtr` 180)
+                                      <*> peek (ptr `plusPtr` 184)
+                                      <*> peek (ptr `plusPtr` 188)
+                                      <*> peek (ptr `plusPtr` 192)
+                                      <*> peek (ptr `plusPtr` 196)
+                                      <*> peek (ptr `plusPtr` 200)
+                                      <*> peek (ptr `plusPtr` 204)
+                                      <*> peek (ptr `plusPtr` 208)
+                                      <*> peek (ptr `plusPtr` 212)
+                                      <*> peek (ptr `plusPtr` 216)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkRobustBufferAccess (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 4) (vkFullDrawIndexUint32 (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 8) (vkImageCubeArray (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 12) (vkIndependentBlend (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 16) (vkGeometryShader (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 20) (vkTessellationShader (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 24) (vkSampleRateShading (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 28) (vkDualSrcBlend (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 32) (vkLogicOp (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 36) (vkMultiDrawIndirect (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 40) (vkDrawIndirectFirstInstance (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 44) (vkDepthClamp (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 52) (vkFillModeNonSolid (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 56) (vkDepthBounds (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 60) (vkWideLines (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 64) (vkLargePoints (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 68) (vkAlphaToOne (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 72) (vkMultiViewport (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 76) (vkSamplerAnisotropy (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 80) (vkTextureCompressionETC2 (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 84) (vkTextureCompressionASTC_LDR (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 88) (vkTextureCompressionBC (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 92) (vkOcclusionQueryPrecise (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 96) (vkPipelineStatisticsQuery (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 100) (vkVertexPipelineStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 104) (vkFragmentStoresAndAtomics (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 108) (vkShaderTessellationAndGeometryPointSize (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 112) (vkShaderImageGatherExtended (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 116) (vkShaderStorageImageExtendedFormats (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 120) (vkShaderStorageImageMultisample (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 124) (vkShaderStorageImageReadWithoutFormat (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 128) (vkShaderStorageImageWriteWithoutFormat (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 132) (vkShaderUniformBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 136) (vkShaderSampledImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 140) (vkShaderStorageBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 144) (vkShaderStorageImageArrayDynamicIndexing (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 148) (vkShaderClipDistance (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 152) (vkShaderCullDistance (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 156) (vkShaderFloat64 (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 160) (vkShaderInt64 (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 164) (vkShaderInt16 (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 168) (vkShaderResourceResidency (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 172) (vkShaderResourceMinLod (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 176) (vkSparseBinding (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 180) (vkSparseResidencyBuffer (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 184) (vkSparseResidencyImage2D (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 188) (vkSparseResidencyImage3D (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 192) (vkSparseResidency2Samples (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 196) (vkSparseResidency4Samples (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 200) (vkSparseResidency8Samples (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 204) (vkSparseResidency16Samples (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 208) (vkSparseResidencyAliased (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 212) (vkVariableMultisampleRate (poked :: VkPhysicalDeviceFeatures))
+                *> poke (ptr `plusPtr` 216) (vkInheritedQueries (poked :: VkPhysicalDeviceFeatures))
+-- | VkPhysicalDeviceSparseProperties - Structure specifying physical device
+-- sparse memory properties
+--
+-- = See Also
+--
+-- @VkBool32@, 'VkPhysicalDeviceProperties'
+data VkPhysicalDeviceSparseProperties = VkPhysicalDeviceSparseProperties
+  { -- | @residencyStandard2DBlockShape@ is @VK_TRUE@ if the physical device will
+  -- access all single-sample 2D sparse resources using the standard sparse
+  -- image block shapes (based on image format), as described in the
+  -- [Standard Sparse Image Block Shapes (Single
+  -- Sample)](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle)
+  -- table. If this property is not supported the value returned in the
+  -- @imageGranularity@ member of the @VkSparseImageFormatProperties@
+  -- structure for single-sample 2D images is not /required/ to match the
+  -- standard sparse image block dimensions listed in the table.
+  vkResidencyStandard2DBlockShape :: VkBool32
+  , -- | @residencyStandard2DMultisampleBlockShape@ is @VK_TRUE@ if the physical
+  -- device will access all multisample 2D sparse resources using the
+  -- standard sparse image block shapes (based on image format), as described
+  -- in the [Standard Sparse Image Block Shapes
+  -- (MSAA)](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseblockshapesmsaa)
+  -- table. If this property is not supported, the value returned in the
+  -- @imageGranularity@ member of the @VkSparseImageFormatProperties@
+  -- structure for multisample 2D images is not /required/ to match the
+  -- standard sparse image block dimensions listed in the table.
+  vkResidencyStandard2DMultisampleBlockShape :: VkBool32
+  , -- | @residencyStandard3DBlockShape@ is @VK_TRUE@ if the physical device will
+  -- access all 3D sparse resources using the standard sparse image block
+  -- shapes (based on image format), as described in the [Standard Sparse
+  -- Image Block Shapes (Single
+  -- Sample)](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory-sparseblockshapessingle)
+  -- table. If this property is not supported, the value returned in the
+  -- @imageGranularity@ member of the @VkSparseImageFormatProperties@
+  -- structure for 3D images is not /required/ to match the standard sparse
+  -- image block dimensions listed in the table.
+  vkResidencyStandard3DBlockShape :: VkBool32
+  , -- | @residencyAlignedMipSize@ is @VK_TRUE@ if images with mip level
+  -- dimensions that are not integer multiples of the corresponding
+  -- dimensions of the sparse image block /may/ be placed in the mip tail. If
+  -- this property is not reported, only mip levels with dimensions smaller
+  -- than the @imageGranularity@ member of the
+  -- @VkSparseImageFormatProperties@ structure will be placed in the mip
+  -- tail. If this property is reported the implementation is allowed to
+  -- return @VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT@ in the @flags@
+  -- member of @VkSparseImageFormatProperties@, indicating that mip level
+  -- dimensions that are not integer multiples of the corresponding
+  -- dimensions of the sparse image block will be placed in the mip tail.
+  vkResidencyAlignedMipSize :: VkBool32
+  , -- | @residencyNonResidentStrict@ specifies whether the physical device /can/
+  -- consistently access non-resident regions of a resource. If this property
+  -- is @VK_TRUE@, access to non-resident regions of resources will be
+  -- guaranteed to return values as if the resource were populated with 0;
+  -- writes to non-resident regions will be discarded.
+  vkResidencyNonResidentStrict :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceSparseProperties where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek ptr = VkPhysicalDeviceSparseProperties <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 4)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 12)
+                                              <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkResidencyStandard2DBlockShape (poked :: VkPhysicalDeviceSparseProperties))
+                *> poke (ptr `plusPtr` 4) (vkResidencyStandard2DMultisampleBlockShape (poked :: VkPhysicalDeviceSparseProperties))
+                *> poke (ptr `plusPtr` 8) (vkResidencyStandard3DBlockShape (poked :: VkPhysicalDeviceSparseProperties))
+                *> poke (ptr `plusPtr` 12) (vkResidencyAlignedMipSize (poked :: VkPhysicalDeviceSparseProperties))
+                *> poke (ptr `plusPtr` 16) (vkResidencyNonResidentStrict (poked :: VkPhysicalDeviceSparseProperties))
+-- | VkPhysicalDeviceLimits - Structure reporting implementation-dependent
+-- physical device limits
+--
+-- = Members
+--
+-- -   @maxImageDimension1D@ is the maximum dimension (@width@) supported
+--     for all images created with an @imageType@ of @VK_IMAGE_TYPE_1D@.
+--
+-- -   @maxImageDimension2D@ is the maximum dimension (@width@ or @height@)
+--     supported for all images created with an @imageType@ of
+--     @VK_IMAGE_TYPE_2D@ and without @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@
+--     set in @flags@.
+--
+-- -   @maxImageDimension3D@ is the maximum dimension (@width@, @height@,
+--     or @depth@) supported for all images created with an @imageType@ of
+--     @VK_IMAGE_TYPE_3D@.
+--
+-- -   @maxImageDimensionCube@ is the maximum dimension (@width@ or
+--     @height@) supported for all images created with an @imageType@ of
+--     @VK_IMAGE_TYPE_2D@ and with @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@
+--     set in @flags@.
+--
+-- -   @maxImageArrayLayers@ is the maximum number of layers
+--     (@arrayLayers@) for an image.
+--
+-- -   @maxTexelBufferElements@ is the maximum number of addressable texels
+--     for a buffer view created on a buffer which was created with the
+--     @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or
+--     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ set in the @usage@ member
+--     of the @VkBufferCreateInfo@ structure.
+--
+-- -   @maxUniformBufferRange@ is the maximum value that /can/ be specified
+--     in the @range@ member of any
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo'
+--     structures passed to a call to
+--     'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets' for
+--     descriptors of type @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@.
+--
+-- -   @maxStorageBufferRange@ is the maximum value that /can/ be specified
+--     in the @range@ member of any
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo'
+--     structures passed to a call to
+--     'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets' for
+--     descriptors of type @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@.
+--
+-- -   @maxPushConstantsSize@ is the maximum size, in bytes, of the pool of
+--     push constant memory. For each of the push constant ranges indicated
+--     by the @pPushConstantRanges@ member of the
+--     @VkPipelineLayoutCreateInfo@ structure, (@offset@ + @size@) /must/
+--     be less than or equal to this limit.
+--
+-- -   @maxMemoryAllocationCount@ is the maximum number of device memory
+--     allocations, as created by
+--     'Graphics.Vulkan.Core10.Memory.vkAllocateMemory', which /can/
+--     simultaneously exist.
+--
+-- -   @maxSamplerAllocationCount@ is the maximum number of sampler
+--     objects, as created by
+--     'Graphics.Vulkan.Core10.Sampler.vkCreateSampler', which /can/
+--     simultaneously exist on a device.
+--
+-- -   @bufferImageGranularity@ is the granularity, in bytes, at which
+--     buffer or linear image resources, and optimal image resources /can/
+--     be bound to adjacent offsets in the same @VkDeviceMemory@ object
+--     without aliasing. See [Buffer-Image
+--     Granularity](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-bufferimagegranularity)
+--     for more details.
+--
+-- -   @sparseAddressSpaceSize@ is the total amount of address space
+--     available, in bytes, for sparse memory resources. This is an upper
+--     bound on the sum of the size of all sparse resources, regardless of
+--     whether any memory is bound to them.
+--
+-- -   @maxBoundDescriptorSets@ is the maximum number of descriptor sets
+--     that /can/ be simultaneously used by a pipeline. All @DescriptorSet@
+--     decorations in shader modules /must/ have a value less than
+--     @maxBoundDescriptorSets@. See
+--     [{html_spec_relative}#descriptorsets-sets](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sets).
+--
+-- -   @maxPerStageDescriptorSamplers@ is the maximum number of samplers
+--     that /can/ be accessible to a single shader stage in a pipeline
+--     layout. Descriptors with a type of @VK_DESCRIPTOR_TYPE_SAMPLER@ or
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. A descriptor is accessible to a
+--     shader stage when the @stageFlags@ member of the
+--     @VkDescriptorSetLayoutBinding@ structure has the bit for that shader
+--     stage set. See
+--     [{html_spec_relative}#descriptorsets-sampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampler)
+--     and
+--     [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler).
+--
+-- -   @maxPerStageDescriptorUniformBuffers@ is the maximum number of
+--     uniform buffers that /can/ be accessible to a single shader stage in
+--     a pipeline layout. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. A descriptor is accessible to a
+--     shader stage when the @stageFlags@ member of the
+--     @VkDescriptorSetLayoutBinding@ structure has the bit for that shader
+--     stage set. See
+--     [{html_spec_relative}#descriptorsets-uniformbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbuffer)
+--     and
+--     [{html_spec_relative}#descriptorsets-uniformbufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic).
+--
+-- -   @maxPerStageDescriptorStorageBuffers@ is the maximum number of
+--     storage buffers that /can/ be accessible to a single shader stage in
+--     a pipeline layout. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. A descriptor is accessible to a
+--     pipeline shader stage when the @stageFlags@ member of the
+--     @VkDescriptorSetLayoutBinding@ structure has the bit for that shader
+--     stage set. See
+--     [{html_spec_relative}#descriptorsets-storagebuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebuffer)
+--     and
+--     [{html_spec_relative}#descriptorsets-storagebufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic).
+--
+-- -   @maxPerStageDescriptorSampledImages@ is the maximum number of
+--     sampled images that /can/ be accessible to a single shader stage in
+--     a pipeline layout. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ count against this limit.
+--     Only descriptors in descriptor set layouts created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set count against this limit. A descriptor is accessible to a
+--     pipeline shader stage when the @stageFlags@ member of the
+--     @VkDescriptorSetLayoutBinding@ structure has the bit for that shader
+--     stage set. See
+--     [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler),
+--     [{html_spec_relative}#descriptorsets-sampledimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage),
+--     and
+--     [{html_spec_relative}#descriptorsets-uniformtexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer).
+--
+-- -   @maxPerStageDescriptorStorageImages@ is the maximum number of
+--     storage images that /can/ be accessible to a single shader stage in
+--     a pipeline layout. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ count against this limit.
+--     Only descriptors in descriptor set layouts created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set count against this limit. A descriptor is accessible to a
+--     pipeline shader stage when the @stageFlags@ member of the
+--     @VkDescriptorSetLayoutBinding@ structure has the bit for that shader
+--     stage set. See
+--     [{html_spec_relative}#descriptorsets-storageimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage),
+--     and
+--     [{html_spec_relative}#descriptorsets-storagetexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer).
+--
+-- -   @maxPerStageDescriptorInputAttachments@ is the maximum number of
+--     input attachments that /can/ be accessible to a single shader stage
+--     in a pipeline layout. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. Only
+--     descriptors in descriptor set layouts created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set count against this limit. A descriptor is accessible to a
+--     pipeline shader stage when the @stageFlags@ member of the
+--     @VkDescriptorSetLayoutBinding@ structure has the bit for that shader
+--     stage set. These are only supported for the fragment stage. See
+--     [{html_spec_relative}#descriptorsets-inputattachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-inputattachment).
+--
+-- -   @maxPerStageResources@ is the maximum number of resources that /can/
+--     be accessible to a single shader stage in a pipeline layout.
+--     Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@,
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, or
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. Only
+--     descriptors in descriptor set layouts created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set count against this limit. For the fragment shader stage the
+--     framebuffer color attachments also count against this limit.
+--
+-- -   @maxDescriptorSetSamplers@ is the maximum number of samplers that
+--     /can/ be included in descriptor bindings in a pipeline layout across
+--     all pipeline shader stages and descriptor set numbers. Descriptors
+--     with a type of @VK_DESCRIPTOR_TYPE_SAMPLER@ or
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-sampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampler)
+--     and
+--     [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler).
+--
+-- -   @maxDescriptorSetUniformBuffers@ is the maximum number of uniform
+--     buffers that /can/ be included in descriptor bindings in a pipeline
+--     layout across all pipeline shader stages and descriptor set numbers.
+--     Descriptors with a type of @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-uniformbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbuffer)
+--     and
+--     [{html_spec_relative}#descriptorsets-uniformbufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic).
+--
+-- -   @maxDescriptorSetUniformBuffersDynamic@ is the maximum number of
+--     dynamic uniform buffers that /can/ be included in descriptor
+--     bindings in a pipeline layout across all pipeline shader stages and
+--     descriptor set numbers. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-uniformbufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbufferdynamic).
+--
+-- -   @maxDescriptorSetStorageBuffers@ is the maximum number of storage
+--     buffers that /can/ be included in descriptor bindings in a pipeline
+--     layout across all pipeline shader stages and descriptor set numbers.
+--     Descriptors with a type of @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-storagebuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebuffer)
+--     and
+--     [{html_spec_relative}#descriptorsets-storagebufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic).
+--
+-- -   @maxDescriptorSetStorageBuffersDynamic@ is the maximum number of
+--     dynamic storage buffers that /can/ be included in descriptor
+--     bindings in a pipeline layout across all pipeline shader stages and
+--     descriptor set numbers. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ count against this
+--     limit. Only descriptors in descriptor set layouts created without
+--     the @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+--     bit set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-storagebufferdynamic](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebufferdynamic).
+--
+-- -   @maxDescriptorSetSampledImages@ is the maximum number of sampled
+--     images that /can/ be included in descriptor bindings in a pipeline
+--     layout across all pipeline shader stages and descriptor set numbers.
+--     Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ count against this limit.
+--     Only descriptors in descriptor set layouts created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-combinedimagesampler](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-combinedimagesampler),
+--     [{html_spec_relative}#descriptorsets-sampledimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage),
+--     and
+--     [{html_spec_relative}#descriptorsets-uniformtexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer).
+--
+-- -   @maxDescriptorSetStorageImages@ is the maximum number of storage
+--     images that /can/ be included in descriptor bindings in a pipeline
+--     layout across all pipeline shader stages and descriptor set numbers.
+--     Descriptors with a type of @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ count against this limit.
+--     Only descriptors in descriptor set layouts created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-storageimage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage),
+--     and
+--     [{html_spec_relative}#descriptorsets-storagetexelbuffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer).
+--
+-- -   @maxDescriptorSetInputAttachments@ is the maximum number of input
+--     attachments that /can/ be included in descriptor bindings in a
+--     pipeline layout across all pipeline shader stages and descriptor set
+--     numbers. Descriptors with a type of
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ count against this limit. Only
+--     descriptors in descriptor set layouts created without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set count against this limit. See
+--     [{html_spec_relative}#descriptorsets-inputattachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-inputattachment).
+--
+-- -   @maxVertexInputAttributes@ is the maximum number of vertex input
+--     attributes that /can/ be specified for a graphics pipeline. These
+--     are described in the array of @VkVertexInputAttributeDescription@
+--     structures that are provided at graphics pipeline creation time via
+--     the @pVertexAttributeDescriptions@ member of the
+--     @VkPipelineVertexInputStateCreateInfo@ structure. See
+--     [{html_spec_relative}#fxvertex-attrib](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-attrib)
+--     and
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input).
+--
+-- -   @maxVertexInputBindings@ is the maximum number of vertex buffers
+--     that /can/ be specified for providing vertex attributes to a
+--     graphics pipeline. These are described in the array of
+--     @VkVertexInputBindingDescription@ structures that are provided at
+--     graphics pipeline creation time via the @pVertexBindingDescriptions@
+--     member of the @VkPipelineVertexInputStateCreateInfo@ structure. The
+--     @binding@ member of @VkVertexInputBindingDescription@ /must/ be less
+--     than this limit. See
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input).
+--
+-- -   @maxVertexInputAttributeOffset@ is the maximum vertex input
+--     attribute offset that /can/ be added to the vertex input binding
+--     stride. The @offset@ member of the
+--     @VkVertexInputAttributeDescription@ structure /must/ be less than or
+--     equal to this limit. See
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input).
+--
+-- -   @maxVertexInputBindingStride@ is the maximum vertex input binding
+--     stride that /can/ be specified in a vertex input binding. The
+--     @stride@ member of the @VkVertexInputBindingDescription@ structure
+--     /must/ be less than or equal to this limit. See
+--     [{html_spec_relative}#fxvertex-input](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fxvertex-input).
+--
+-- -   @maxVertexOutputComponents@ is the maximum number of components of
+--     output variables which /can/ be output by a vertex shader. See
+--     [{html_spec_relative}#shaders-vertex](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-vertex).
+--
+-- -   @maxTessellationGenerationLevel@ is the maximum tessellation
+--     generation level supported by the fixed-function tessellation
+--     primitive generator. See
+--     [{html_spec_relative}#tessellation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#tessellation).
+--
+-- -   @maxTessellationPatchSize@ is the maximum patch size, in vertices,
+--     of patches that /can/ be processed by the tessellation control
+--     shader and tessellation primitive generator. The
+--     @patchControlPoints@ member of the
+--     @VkPipelineTessellationStateCreateInfo@ structure specified at
+--     pipeline creation time and the value provided in the
+--     @OutputVertices@ execution mode of shader modules /must/ be less
+--     than or equal to this limit. See
+--     [{html_spec_relative}#tessellation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#tessellation).
+--
+-- -   @maxTessellationControlPerVertexInputComponents@ is the maximum
+--     number of components of input variables which /can/ be provided as
+--     per-vertex inputs to the tessellation control shader stage.
+--
+-- -   @maxTessellationControlPerVertexOutputComponents@ is the maximum
+--     number of components of per-vertex output variables which /can/ be
+--     output from the tessellation control shader stage.
+--
+-- -   @maxTessellationControlPerPatchOutputComponents@ is the maximum
+--     number of components of per-patch output variables which /can/ be
+--     output from the tessellation control shader stage.
+--
+-- -   @maxTessellationControlTotalOutputComponents@ is the maximum total
+--     number of components of per-vertex and per-patch output variables
+--     which /can/ be output from the tessellation control shader stage.
+--
+-- -   @maxTessellationEvaluationInputComponents@ is the maximum number of
+--     components of input variables which /can/ be provided as per-vertex
+--     inputs to the tessellation evaluation shader stage.
+--
+-- -   @maxTessellationEvaluationOutputComponents@ is the maximum number of
+--     components of per-vertex output variables which /can/ be output from
+--     the tessellation evaluation shader stage.
+--
+-- -   @maxGeometryShaderInvocations@ is the maximum invocation count
+--     supported for instanced geometry shaders. The value provided in the
+--     @Invocations@ execution mode of shader modules /must/ be less than
+--     or equal to this limit. See
+--     [{html_spec_relative}#geometry](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#geometry).
+--
+-- -   @maxGeometryInputComponents@ is the maximum number of components of
+--     input variables which /can/ be provided as inputs to the geometry
+--     shader stage.
+--
+-- -   @maxGeometryOutputComponents@ is the maximum number of components of
+--     output variables which /can/ be output from the geometry shader
+--     stage.
+--
+-- -   @maxGeometryOutputVertices@ is the maximum number of vertices which
+--     /can/ be emitted by any geometry shader.
+--
+-- -   @maxGeometryTotalOutputComponents@ is the maximum total number of
+--     components of output, across all emitted vertices, which /can/ be
+--     output from the geometry shader stage.
+--
+-- -   @maxFragmentInputComponents@ is the maximum number of components of
+--     input variables which /can/ be provided as inputs to the fragment
+--     shader stage.
+--
+-- -   @maxFragmentOutputAttachments@ is the maximum number of output
+--     attachments which /can/ be written to by the fragment shader stage.
+--
+-- -   @maxFragmentDualSrcAttachments@ is the maximum number of output
+--     attachments which /can/ be written to by the fragment shader stage
+--     when blending is enabled and one of the dual source blend modes is
+--     in use. See
+--     [{html_spec_relative}#framebuffer-dsb](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-dsb)
+--     and
+--     [dualSrcBlend](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-dualSrcBlend).
+--
+-- -   @maxFragmentCombinedOutputResources@ is the total number of storage
+--     buffers, storage images, and output buffers which /can/ be used in
+--     the fragment shader stage.
+--
+-- -   @maxComputeSharedMemorySize@ is the maximum total storage size, in
+--     bytes, of all variables declared with the @WorkgroupLocal@ storage
+--     class in shader modules (or with the @shared@ storage qualifier in
+--     GLSL) in the compute shader stage.
+--
+-- -   @maxComputeWorkGroupCount@[3] is the maximum number of local
+--     workgroups that /can/ be dispatched by a single dispatch command.
+--     These three values represent the maximum number of local workgroups
+--     for the X, Y, and Z dimensions, respectively. The workgroup count
+--     parameters to the dispatch commands /must/ be less than or equal to
+--     the corresponding limit. See
+--     [{html_spec_relative}#dispatch](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#dispatch).
+--
+-- -   @maxComputeWorkGroupInvocations@ is the maximum total number of
+--     compute shader invocations in a single local workgroup. The product
+--     of the X, Y, and Z sizes as specified by the @LocalSize@ execution
+--     mode in shader modules and by the object decorated by the
+--     @WorkgroupSize@ decoration /must/ be less than or equal to this
+--     limit.
+--
+-- -   @maxComputeWorkGroupSize@[3] is the maximum size of a local compute
+--     workgroup, per dimension. These three values represent the maximum
+--     local workgroup size in the X, Y, and Z dimensions, respectively.
+--     The @x@, @y@, and @z@ sizes specified by the @LocalSize@ execution
+--     mode and by the object decorated by the @WorkgroupSize@ decoration
+--     in shader modules /must/ be less than or equal to the corresponding
+--     limit.
+--
+-- -   @subPixelPrecisionBits@ is the number of bits of subpixel precision
+--     in framebuffer coordinates xf and yf. See
+--     [{html_spec_relative}#primsrast](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast).
+--
+-- -   @subTexelPrecisionBits@ is the number of bits of precision in the
+--     division along an axis of an image used for minification and
+--     magnification filters. 2@subTexelPrecisionBits@ is the actual number
+--     of divisions along each axis of the image represented. Sub-texel
+--     values calculated during image sampling will snap to these locations
+--     when generating the filtered results.
+--
+-- -   @mipmapPrecisionBits@ is the number of bits of division that the LOD
+--     calculation for mipmap fetching get snapped to when determining the
+--     contribution from each mip level to the mip filtered results.
+--     2@mipmapPrecisionBits@ is the actual number of divisions.
+--
+--     __Note__
+--
+--     For example, if this value is 2 bits then when linearly filtering
+--     between two levels, each level could: contribute: 0%, 33%, 66%, or
+--     100% (this is just an example and the amount of contribution
+--     /should/ be covered by different equations in the spec).
+--
+-- -   @maxDrawIndexedIndexValue@ is the maximum index value that /can/ be
+--     used for indexed draw calls when using 32-bit indices. This excludes
+--     the primitive restart index value of 0xFFFFFFFF. See
+--     [fullDrawIndexUint32](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-fullDrawIndexUint32).
+--
+-- -   @maxDrawIndirectCount@ is the maximum draw count that is supported
+--     for indirect draw calls. See
+--     [multiDrawIndirect](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiDrawIndirect).
+--
+-- -   @maxSamplerLodBias@ is the maximum absolute sampler LOD bias. The
+--     sum of the @mipLodBias@ member of the @VkSamplerCreateInfo@
+--     structure and the @Bias@ operand of image sampling operations in
+--     shader modules (or 0 if no @Bias@ operand is provided to an image
+--     sampling operation) are clamped to the range
+--     [-@maxSamplerLodBias@,+@maxSamplerLodBias@]. See
+--     [{html_spec_relative}#samplers-mipLodBias](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-mipLodBias).
+--
+-- -   @maxSamplerAnisotropy@ is the maximum degree of sampler anisotropy.
+--     The maximum degree of anisotropic filtering used for an image
+--     sampling operation is the minimum of the @maxAnisotropy@ member of
+--     the @VkSamplerCreateInfo@ structure and this limit. See
+--     [{html_spec_relative}#samplers-maxAnisotropy](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-maxAnisotropy).
+--
+-- -   @maxViewports@ is the maximum number of active viewports. The
+--     @viewportCount@ member of the @VkPipelineViewportStateCreateInfo@
+--     structure that is provided at pipeline creation /must/ be less than
+--     or equal to this limit.
+--
+-- -   @maxViewportDimensions@[2] are the maximum viewport dimensions in
+--     the X (width) and Y (height) dimensions, respectively. The maximum
+--     viewport dimensions /must/ be greater than or equal to the largest
+--     image which /can/ be created and used as a framebuffer attachment.
+--     See [Controlling the
+--     Viewport](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-viewport).
+--
+-- -   @viewportBoundsRange@[2] is the [minimum, maximum] range that the
+--     corners of a viewport /must/ be contained in. This range /must/ be
+--     at least [-2 × @size@, 2 × @size@ - 1], where @size@ =
+--     max(@maxViewportDimensions@[0], @maxViewportDimensions@[1]). See
+--     [Controlling the
+--     Viewport](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-viewport).
+--
+--     __Note__
+--
+--     The intent of the @viewportBoundsRange@ limit is to allow a maximum
+--     sized viewport to be arbitrarily shifted relative to the output
+--     target as long as at least some portion intersects. This would give
+--     a bounds limit of [-@size@ + 1, 2 × @size@ - 1] which would allow
+--     all possible non-empty-set intersections of the output target and
+--     the viewport. Since these numbers are typically powers of two,
+--     picking the signed number range using the smallest possible number
+--     of bits ends up with the specified range.
+--
+-- -   @viewportSubPixelBits@ is the number of bits of subpixel precision
+--     for viewport bounds. The subpixel precision that floating-point
+--     viewport bounds are interpreted at is given by this limit.
+--
+-- -   @minMemoryMapAlignment@ is the minimum /required/ alignment, in
+--     bytes, of host visible memory allocations within the host address
+--     space. When mapping a memory allocation with
+--     'Graphics.Vulkan.Core10.Memory.vkMapMemory', subtracting @offset@
+--     bytes from the returned pointer will always produce an integer
+--     multiple of this limit. See
+--     [{html_spec_relative}#memory-device-hostaccess](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-hostaccess).
+--
+-- -   @minTexelBufferOffsetAlignment@ is the minimum /required/ alignment,
+--     in bytes, for the @offset@ member of the @VkBufferViewCreateInfo@
+--     structure for texel buffers. When a buffer view is created for a
+--     buffer which was created with
+--     @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or
+--     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ set in the @usage@ member
+--     of the @VkBufferCreateInfo@ structure, the @offset@ /must/ be an
+--     integer multiple of this limit.
+--
+-- -   @minUniformBufferOffsetAlignment@ is the minimum /required/
+--     alignment, in bytes, for the @offset@ member of the
+--     @VkDescriptorBufferInfo@ structure for uniform buffers. When a
+--     descriptor of type @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ is updated, the @offset@
+--     /must/ be an integer multiple of this limit. Similarly, dynamic
+--     offsets for uniform buffers /must/ be multiples of this limit.
+--
+-- -   @minStorageBufferOffsetAlignment@ is the minimum /required/
+--     alignment, in bytes, for the @offset@ member of the
+--     @VkDescriptorBufferInfo@ structure for storage buffers. When a
+--     descriptor of type @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ is updated, the @offset@
+--     /must/ be an integer multiple of this limit. Similarly, dynamic
+--     offsets for storage buffers /must/ be multiples of this limit.
+--
+-- -   @minTexelOffset@ is the minimum offset value for the @ConstOffset@
+--     image operand of any of the @OpImageSample@* or @OpImageFetch@*
+--     image instructions.
+--
+-- -   @maxTexelOffset@ is the maximum offset value for the @ConstOffset@
+--     image operand of any of the @OpImageSample@* or @OpImageFetch@*
+--     image instructions.
+--
+-- -   @minTexelGatherOffset@ is the minimum offset value for the @Offset@
+--     or @ConstOffsets@ image operands of any of the @OpImage@*@Gather@
+--     image instructions.
+--
+-- -   @maxTexelGatherOffset@ is the maximum offset value for the @Offset@
+--     or @ConstOffsets@ image operands of any of the @OpImage@*@Gather@
+--     image instructions.
+--
+-- -   @minInterpolationOffset@ is the minimum negative offset value for
+--     the @offset@ operand of the @InterpolateAtOffset@ extended
+--     instruction.
+--
+-- -   @maxInterpolationOffset@ is the maximum positive offset value for
+--     the @offset@ operand of the @InterpolateAtOffset@ extended
+--     instruction.
+--
+-- -   @subPixelInterpolationOffsetBits@ is the number of subpixel
+--     fractional bits that the @x@ and @y@ offsets to the
+--     @InterpolateAtOffset@ extended instruction /may/ be rounded to as
+--     fixed-point values.
+--
+-- -   @maxFramebufferWidth@ is the maximum width for a framebuffer. The
+--     @width@ member of the @VkFramebufferCreateInfo@ structure /must/ be
+--     less than or equal to this limit.
+--
+-- -   @maxFramebufferHeight@ is the maximum height for a framebuffer. The
+--     @height@ member of the @VkFramebufferCreateInfo@ structure /must/ be
+--     less than or equal to this limit.
+--
+-- -   @maxFramebufferLayers@ is the maximum layer count for a layered
+--     framebuffer. The @layers@ member of the @VkFramebufferCreateInfo@
+--     structure /must/ be less than or equal to this limit.
+--
+-- -   @framebufferColorSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the color sample counts that are
+--     supported for all framebuffer color attachments with floating- or
+--     fixed-point formats. There is no limit that specifies the color
+--     sample counts that are supported for all color attachments with
+--     integer formats.
+--
+-- -   @framebufferDepthSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the supported depth sample counts
+--     for all framebuffer depth\/stencil attachments, when the format
+--     includes a depth component.
+--
+-- -   @framebufferStencilSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the supported stencil sample
+--     counts for all framebuffer depth\/stencil attachments, when the
+--     format includes a stencil component.
+--
+-- -   @framebufferNoAttachmentsSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the supported sample counts for a
+--     framebuffer with no attachments.
+--
+-- -   @maxColorAttachments@ is the maximum number of color attachments
+--     that /can/ be used by a subpass in a render pass. The
+--     @colorAttachmentCount@ member of the @VkSubpassDescription@
+--     structure /must/ be less than or equal to this limit.
+--
+-- -   @sampledImageColorSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the sample counts supported for
+--     all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@
+--     containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and a non-integer color
+--     format.
+--
+-- -   @sampledImageIntegerSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the sample counts supported for
+--     all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@
+--     containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and an integer color
+--     format.
+--
+-- -   @sampledImageDepthSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the sample counts supported for
+--     all 2D images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@
+--     containing @VK_IMAGE_USAGE_SAMPLED_BIT@, and a depth format.
+--
+-- -   @sampledImageStencilSampleCounts@ is a bitmask1 of
+--     'VkSampleCountFlagBits' indicating the sample supported for all 2D
+--     images created with @VK_IMAGE_TILING_OPTIMAL@, @usage@ containing
+--     @VK_IMAGE_USAGE_SAMPLED_BIT@, and a stencil format.
+--
+-- -   @storageImageSampleCounts@ is a bitmask1 of 'VkSampleCountFlagBits'
+--     indicating the sample counts supported for all 2D images created
+--     with @VK_IMAGE_TILING_OPTIMAL@, and @usage@ containing
+--     @VK_IMAGE_USAGE_STORAGE_BIT@.
+--
+-- -   @maxSampleMaskWords@ is the maximum number of array elements of a
+--     variable decorated with the @SampleMask@ built-in decoration.
+--
+-- -   @timestampComputeAndGraphics@ specifies support for timestamps on
+--     all graphics and compute queues. If this limit is set to @VK_TRUE@,
+--     all queues that advertise the @VK_QUEUE_GRAPHICS_BIT@ or
+--     @VK_QUEUE_COMPUTE_BIT@ in the
+--     @VkQueueFamilyProperties@::@queueFlags@ support
+--     @VkQueueFamilyProperties@::@timestampValidBits@ of at least 36. See
+--     [Timestamp
+--     Queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-timestamps).
+--
+-- -   @timestampPeriod@ is the number of nanoseconds /required/ for a
+--     timestamp query to be incremented by 1. See [Timestamp
+--     Queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-timestamps).
+--
+-- -   @maxClipDistances@ is the maximum number of clip distances that
+--     /can/ be used in a single shader stage. The size of any array
+--     declared with the @ClipDistance@ built-in decoration in a shader
+--     module /must/ be less than or equal to this limit.
+--
+-- -   @maxCullDistances@ is the maximum number of cull distances that
+--     /can/ be used in a single shader stage. The size of any array
+--     declared with the @CullDistance@ built-in decoration in a shader
+--     module /must/ be less than or equal to this limit.
+--
+-- -   @maxCombinedClipAndCullDistances@ is the maximum combined number of
+--     clip and cull distances that /can/ be used in a single shader stage.
+--     The sum of the sizes of any pair of arrays declared with the
+--     @ClipDistance@ and @CullDistance@ built-in decoration used by a
+--     single shader stage in a shader module /must/ be less than or equal
+--     to this limit.
+--
+-- -   @discreteQueuePriorities@ is the number of discrete priorities that
+--     /can/ be assigned to a queue based on the value of each member of
+--     @VkDeviceQueueCreateInfo@::@pQueuePriorities@. This /must/ be at
+--     least 2, and levels /must/ be spread evenly over the range, with at
+--     least one level at 1.0, and another at 0.0. See
+--     [{html_spec_relative}#devsandqueues-priority](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-priority).
+--
+-- -   @pointSizeRange@[2] is the range [@minimum@,@maximum@] of supported
+--     sizes for points. Values written to variables decorated with the
+--     @PointSize@ built-in decoration are clamped to this range.
+--
+-- -   @lineWidthRange@[2] is the range [@minimum@,@maximum@] of supported
+--     widths for lines. Values specified by the @lineWidth@ member of the
+--     @VkPipelineRasterizationStateCreateInfo@ or the @lineWidth@
+--     parameter to @vkCmdSetLineWidth@ are clamped to this range.
+--
+-- -   @pointSizeGranularity@ is the granularity of supported point sizes.
+--     Not all point sizes in the range defined by @pointSizeRange@ are
+--     supported. This limit specifies the granularity (or increment)
+--     between successive supported point sizes.
+--
+-- -   @lineWidthGranularity@ is the granularity of supported line widths.
+--     Not all line widths in the range defined by @lineWidthRange@ are
+--     supported. This limit specifies the granularity (or increment)
+--     between successive supported line widths.
+--
+-- -   @strictLines@ specifies whether lines are rasterized according to
+--     the preferred method of rasterization. If set to @VK_FALSE@, lines
+--     /may/ be rasterized under a relaxed set of rules. If set to
+--     @VK_TRUE@, lines are rasterized as per the strict definition. See
+--     [Basic Line Segment
+--     Rasterization](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-lines-basic).
+--
+-- -   @standardSampleLocations@ specifies whether rasterization uses the
+--     standard sample locations as documented in
+--     [Multisampling](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-multisampling).
+--     If set to @VK_TRUE@, the implementation uses the documented sample
+--     locations. If set to @VK_FALSE@, the implementation /may/ use
+--     different sample locations.
+--
+-- -   @optimalBufferCopyOffsetAlignment@ is the optimal buffer offset
+--     alignment in bytes for @vkCmdCopyBufferToImage@ and
+--     @vkCmdCopyImageToBuffer@. The per texel alignment requirements are
+--     enforced, but applications /should/ use the optimal alignment for
+--     optimal performance and power use.
+--
+-- -   @optimalBufferCopyRowPitchAlignment@ is the optimal buffer row pitch
+--     alignment in bytes for @vkCmdCopyBufferToImage@ and
+--     @vkCmdCopyImageToBuffer@. Row pitch is the number of bytes between
+--     texels with the same X coordinate in adjacent rows (Y coordinates
+--     differ by one). The per texel alignment requirements are enforced,
+--     but applications /should/ use the optimal alignment for optimal
+--     performance and power use.
+--
+-- -   @nonCoherentAtomSize@ is the size and alignment in bytes that bounds
+--     concurrent access to [host-mapped device
+--     memory](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-hostaccess).
+--
+-- -   'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPhysicalDeviceDiscardRectanglePropertiesEXT'::@maxDiscardRectangles@
+--     is the maximum number of active discard rectangles. This limit can
+--     be queried by setting the @pNext@ pointer from a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2'
+--     object to an instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPhysicalDeviceDiscardRectanglePropertiesEXT'
+--     and using @vkGetPhysicalDeviceProperties2@ to fill out the members.
+--
+-- -   'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPhysicalDevicePointClippingProperties'::@pointClippingBehavior@
+--     defines the clipping behavior of points. This limit can be queried
+--     by setting the @pNext@ pointer from a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2'
+--     object to an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPhysicalDevicePointClippingProperties'
+--     and using @vkGetPhysicalDeviceProperties2@ to fill out the members.
+--
+-- -   @VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT@::@maxVertexAttribDivisor@
+--     is the maximum value of the number of instances that will repeat the
+--     value of vertex attribute data when instanced rendering is enabled.
+--     This limit can be queried by setting the @pNext@ pointer from a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2'
+--     object to an instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT'
+--     and using @vkGetPhysicalDeviceProperties2@ to fill out the members.
+--
+-- = Description
+--
+-- [1]
+--     For all bitmasks of 'VkSampleCountFlagBits', the sample count limits
+--     defined above represent the minimum supported sample counts for each
+--     image type. Individual images /may/ support additional sample
+--     counts, which are queried using
+--     'vkGetPhysicalDeviceImageFormatProperties' as described in
+--     [Supported Sample
+--     Counts](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-supported-sample-counts).
+--
+-- = See Also
+--
+-- @VkBool32@, @VkDeviceSize@, 'VkPhysicalDeviceProperties',
+-- 'VkSampleCountFlags'
+data VkPhysicalDeviceLimits = VkPhysicalDeviceLimits
+  { -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimension1D"
+  vkMaxImageDimension1D :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimension2D"
+  vkMaxImageDimension2D :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimension3D"
+  vkMaxImageDimension3D :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageDimensionCube"
+  vkMaxImageDimensionCube :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxImageArrayLayers"
+  vkMaxImageArrayLayers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTexelBufferElements"
+  vkMaxTexelBufferElements :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxUniformBufferRange"
+  vkMaxUniformBufferRange :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxStorageBufferRange"
+  vkMaxStorageBufferRange :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPushConstantsSize"
+  vkMaxPushConstantsSize :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxMemoryAllocationCount"
+  vkMaxMemoryAllocationCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSamplerAllocationCount"
+  vkMaxSamplerAllocationCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "bufferImageGranularity"
+  vkBufferImageGranularity :: VkDeviceSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sparseAddressSpaceSize"
+  vkSparseAddressSpaceSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxBoundDescriptorSets"
+  vkMaxBoundDescriptorSets :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorSamplers"
+  vkMaxPerStageDescriptorSamplers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorUniformBuffers"
+  vkMaxPerStageDescriptorUniformBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorStorageBuffers"
+  vkMaxPerStageDescriptorStorageBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorSampledImages"
+  vkMaxPerStageDescriptorSampledImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorStorageImages"
+  vkMaxPerStageDescriptorStorageImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageDescriptorInputAttachments"
+  vkMaxPerStageDescriptorInputAttachments :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxPerStageResources"
+  vkMaxPerStageResources :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetSamplers"
+  vkMaxDescriptorSetSamplers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetUniformBuffers"
+  vkMaxDescriptorSetUniformBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetUniformBuffersDynamic"
+  vkMaxDescriptorSetUniformBuffersDynamic :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetStorageBuffers"
+  vkMaxDescriptorSetStorageBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetStorageBuffersDynamic"
+  vkMaxDescriptorSetStorageBuffersDynamic :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetSampledImages"
+  vkMaxDescriptorSetSampledImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetStorageImages"
+  vkMaxDescriptorSetStorageImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDescriptorSetInputAttachments"
+  vkMaxDescriptorSetInputAttachments :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputAttributes"
+  vkMaxVertexInputAttributes :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputBindings"
+  vkMaxVertexInputBindings :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputAttributeOffset"
+  vkMaxVertexInputAttributeOffset :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexInputBindingStride"
+  vkMaxVertexInputBindingStride :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxVertexOutputComponents"
+  vkMaxVertexOutputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationGenerationLevel"
+  vkMaxTessellationGenerationLevel :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationPatchSize"
+  vkMaxTessellationPatchSize :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlPerVertexInputComponents"
+  vkMaxTessellationControlPerVertexInputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlPerVertexOutputComponents"
+  vkMaxTessellationControlPerVertexOutputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlPerPatchOutputComponents"
+  vkMaxTessellationControlPerPatchOutputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationControlTotalOutputComponents"
+  vkMaxTessellationControlTotalOutputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationEvaluationInputComponents"
+  vkMaxTessellationEvaluationInputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTessellationEvaluationOutputComponents"
+  vkMaxTessellationEvaluationOutputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryShaderInvocations"
+  vkMaxGeometryShaderInvocations :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryInputComponents"
+  vkMaxGeometryInputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryOutputComponents"
+  vkMaxGeometryOutputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryOutputVertices"
+  vkMaxGeometryOutputVertices :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxGeometryTotalOutputComponents"
+  vkMaxGeometryTotalOutputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentInputComponents"
+  vkMaxFragmentInputComponents :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentOutputAttachments"
+  vkMaxFragmentOutputAttachments :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentDualSrcAttachments"
+  vkMaxFragmentDualSrcAttachments :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFragmentCombinedOutputResources"
+  vkMaxFragmentCombinedOutputResources :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeSharedMemorySize"
+  vkMaxComputeSharedMemorySize :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeWorkGroupCount"
+  vkMaxComputeWorkGroupCount :: Vector 3 Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeWorkGroupInvocations"
+  vkMaxComputeWorkGroupInvocations :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxComputeWorkGroupSize"
+  vkMaxComputeWorkGroupSize :: Vector 3 Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "subPixelPrecisionBits"
+  vkSubPixelPrecisionBits :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "subTexelPrecisionBits"
+  vkSubTexelPrecisionBits :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "mipmapPrecisionBits"
+  vkMipmapPrecisionBits :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDrawIndexedIndexValue"
+  vkMaxDrawIndexedIndexValue :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxDrawIndirectCount"
+  vkMaxDrawIndirectCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSamplerLodBias"
+  vkMaxSamplerLodBias :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSamplerAnisotropy"
+  vkMaxSamplerAnisotropy :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxViewports"
+  vkMaxViewports :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxViewportDimensions"
+  vkMaxViewportDimensions :: Vector 2 Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "viewportBoundsRange"
+  vkViewportBoundsRange :: Vector 2 CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "viewportSubPixelBits"
+  vkViewportSubPixelBits :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minMemoryMapAlignment"
+  vkMinMemoryMapAlignment :: CSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minTexelBufferOffsetAlignment"
+  vkMinTexelBufferOffsetAlignment :: VkDeviceSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minUniformBufferOffsetAlignment"
+  vkMinUniformBufferOffsetAlignment :: VkDeviceSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minStorageBufferOffsetAlignment"
+  vkMinStorageBufferOffsetAlignment :: VkDeviceSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minTexelOffset"
+  vkMinTexelOffset :: Int32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTexelOffset"
+  vkMaxTexelOffset :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minTexelGatherOffset"
+  vkMinTexelGatherOffset :: Int32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxTexelGatherOffset"
+  vkMaxTexelGatherOffset :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "minInterpolationOffset"
+  vkMinInterpolationOffset :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxInterpolationOffset"
+  vkMaxInterpolationOffset :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "subPixelInterpolationOffsetBits"
+  vkSubPixelInterpolationOffsetBits :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFramebufferWidth"
+  vkMaxFramebufferWidth :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFramebufferHeight"
+  vkMaxFramebufferHeight :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxFramebufferLayers"
+  vkMaxFramebufferLayers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferColorSampleCounts"
+  vkFramebufferColorSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferDepthSampleCounts"
+  vkFramebufferDepthSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferStencilSampleCounts"
+  vkFramebufferStencilSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "framebufferNoAttachmentsSampleCounts"
+  vkFramebufferNoAttachmentsSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxColorAttachments"
+  vkMaxColorAttachments :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageColorSampleCounts"
+  vkSampledImageColorSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageIntegerSampleCounts"
+  vkSampledImageIntegerSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageDepthSampleCounts"
+  vkSampledImageDepthSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "sampledImageStencilSampleCounts"
+  vkSampledImageStencilSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "storageImageSampleCounts"
+  vkStorageImageSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxSampleMaskWords"
+  vkMaxSampleMaskWords :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "timestampComputeAndGraphics"
+  vkTimestampComputeAndGraphics :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "timestampPeriod"
+  vkTimestampPeriod :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxClipDistances"
+  vkMaxClipDistances :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxCullDistances"
+  vkMaxCullDistances :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "maxCombinedClipAndCullDistances"
+  vkMaxCombinedClipAndCullDistances :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "discreteQueuePriorities"
+  vkDiscreteQueuePriorities :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "pointSizeRange"
+  vkPointSizeRange :: Vector 2 CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "lineWidthRange"
+  vkLineWidthRange :: Vector 2 CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "pointSizeGranularity"
+  vkPointSizeGranularity :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "lineWidthGranularity"
+  vkLineWidthGranularity :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "strictLines"
+  vkStrictLines :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "standardSampleLocations"
+  vkStandardSampleLocations :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "optimalBufferCopyOffsetAlignment"
+  vkOptimalBufferCopyOffsetAlignment :: VkDeviceSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "optimalBufferCopyRowPitchAlignment"
+  vkOptimalBufferCopyRowPitchAlignment :: VkDeviceSize
+  , -- No documentation found for Nested "VkPhysicalDeviceLimits" "nonCoherentAtomSize"
+  vkNonCoherentAtomSize :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceLimits where
+  sizeOf ~_ = 504
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceLimits <$> peek (ptr `plusPtr` 0)
+                                    <*> peek (ptr `plusPtr` 4)
+                                    <*> peek (ptr `plusPtr` 8)
+                                    <*> peek (ptr `plusPtr` 12)
+                                    <*> peek (ptr `plusPtr` 16)
+                                    <*> peek (ptr `plusPtr` 20)
+                                    <*> peek (ptr `plusPtr` 24)
+                                    <*> peek (ptr `plusPtr` 28)
+                                    <*> peek (ptr `plusPtr` 32)
+                                    <*> peek (ptr `plusPtr` 36)
+                                    <*> peek (ptr `plusPtr` 40)
+                                    <*> peek (ptr `plusPtr` 48)
+                                    <*> peek (ptr `plusPtr` 56)
+                                    <*> peek (ptr `plusPtr` 64)
+                                    <*> peek (ptr `plusPtr` 68)
+                                    <*> peek (ptr `plusPtr` 72)
+                                    <*> peek (ptr `plusPtr` 76)
+                                    <*> peek (ptr `plusPtr` 80)
+                                    <*> peek (ptr `plusPtr` 84)
+                                    <*> peek (ptr `plusPtr` 88)
+                                    <*> peek (ptr `plusPtr` 92)
+                                    <*> peek (ptr `plusPtr` 96)
+                                    <*> peek (ptr `plusPtr` 100)
+                                    <*> peek (ptr `plusPtr` 104)
+                                    <*> peek (ptr `plusPtr` 108)
+                                    <*> peek (ptr `plusPtr` 112)
+                                    <*> peek (ptr `plusPtr` 116)
+                                    <*> peek (ptr `plusPtr` 120)
+                                    <*> peek (ptr `plusPtr` 124)
+                                    <*> peek (ptr `plusPtr` 128)
+                                    <*> peek (ptr `plusPtr` 132)
+                                    <*> peek (ptr `plusPtr` 136)
+                                    <*> peek (ptr `plusPtr` 140)
+                                    <*> peek (ptr `plusPtr` 144)
+                                    <*> peek (ptr `plusPtr` 148)
+                                    <*> peek (ptr `plusPtr` 152)
+                                    <*> peek (ptr `plusPtr` 156)
+                                    <*> peek (ptr `plusPtr` 160)
+                                    <*> peek (ptr `plusPtr` 164)
+                                    <*> peek (ptr `plusPtr` 168)
+                                    <*> peek (ptr `plusPtr` 172)
+                                    <*> peek (ptr `plusPtr` 176)
+                                    <*> peek (ptr `plusPtr` 180)
+                                    <*> peek (ptr `plusPtr` 184)
+                                    <*> peek (ptr `plusPtr` 188)
+                                    <*> peek (ptr `plusPtr` 192)
+                                    <*> peek (ptr `plusPtr` 196)
+                                    <*> peek (ptr `plusPtr` 200)
+                                    <*> peek (ptr `plusPtr` 204)
+                                    <*> peek (ptr `plusPtr` 208)
+                                    <*> peek (ptr `plusPtr` 212)
+                                    <*> peek (ptr `plusPtr` 216)
+                                    <*> peek (ptr `plusPtr` 220)
+                                    <*> peek (ptr `plusPtr` 232)
+                                    <*> peek (ptr `plusPtr` 236)
+                                    <*> peek (ptr `plusPtr` 248)
+                                    <*> peek (ptr `plusPtr` 252)
+                                    <*> peek (ptr `plusPtr` 256)
+                                    <*> peek (ptr `plusPtr` 260)
+                                    <*> peek (ptr `plusPtr` 264)
+                                    <*> peek (ptr `plusPtr` 268)
+                                    <*> peek (ptr `plusPtr` 272)
+                                    <*> peek (ptr `plusPtr` 276)
+                                    <*> peek (ptr `plusPtr` 280)
+                                    <*> peek (ptr `plusPtr` 288)
+                                    <*> peek (ptr `plusPtr` 296)
+                                    <*> peek (ptr `plusPtr` 304)
+                                    <*> peek (ptr `plusPtr` 312)
+                                    <*> peek (ptr `plusPtr` 320)
+                                    <*> peek (ptr `plusPtr` 328)
+                                    <*> peek (ptr `plusPtr` 336)
+                                    <*> peek (ptr `plusPtr` 340)
+                                    <*> peek (ptr `plusPtr` 344)
+                                    <*> peek (ptr `plusPtr` 348)
+                                    <*> peek (ptr `plusPtr` 352)
+                                    <*> peek (ptr `plusPtr` 356)
+                                    <*> peek (ptr `plusPtr` 360)
+                                    <*> peek (ptr `plusPtr` 364)
+                                    <*> peek (ptr `plusPtr` 368)
+                                    <*> peek (ptr `plusPtr` 372)
+                                    <*> peek (ptr `plusPtr` 376)
+                                    <*> peek (ptr `plusPtr` 380)
+                                    <*> peek (ptr `plusPtr` 384)
+                                    <*> peek (ptr `plusPtr` 388)
+                                    <*> peek (ptr `plusPtr` 392)
+                                    <*> peek (ptr `plusPtr` 396)
+                                    <*> peek (ptr `plusPtr` 400)
+                                    <*> peek (ptr `plusPtr` 404)
+                                    <*> peek (ptr `plusPtr` 408)
+                                    <*> peek (ptr `plusPtr` 412)
+                                    <*> peek (ptr `plusPtr` 416)
+                                    <*> peek (ptr `plusPtr` 420)
+                                    <*> peek (ptr `plusPtr` 424)
+                                    <*> peek (ptr `plusPtr` 428)
+                                    <*> peek (ptr `plusPtr` 432)
+                                    <*> peek (ptr `plusPtr` 436)
+                                    <*> peek (ptr `plusPtr` 440)
+                                    <*> peek (ptr `plusPtr` 444)
+                                    <*> peek (ptr `plusPtr` 452)
+                                    <*> peek (ptr `plusPtr` 460)
+                                    <*> peek (ptr `plusPtr` 464)
+                                    <*> peek (ptr `plusPtr` 468)
+                                    <*> peek (ptr `plusPtr` 472)
+                                    <*> peek (ptr `plusPtr` 480)
+                                    <*> peek (ptr `plusPtr` 488)
+                                    <*> peek (ptr `plusPtr` 496)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMaxImageDimension1D (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 4) (vkMaxImageDimension2D (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 8) (vkMaxImageDimension3D (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 12) (vkMaxImageDimensionCube (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 16) (vkMaxImageArrayLayers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 20) (vkMaxTexelBufferElements (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 24) (vkMaxUniformBufferRange (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 28) (vkMaxStorageBufferRange (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 32) (vkMaxPushConstantsSize (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 36) (vkMaxMemoryAllocationCount (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 40) (vkMaxSamplerAllocationCount (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 48) (vkBufferImageGranularity (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 56) (vkSparseAddressSpaceSize (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 64) (vkMaxBoundDescriptorSets (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 68) (vkMaxPerStageDescriptorSamplers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 72) (vkMaxPerStageDescriptorUniformBuffers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 76) (vkMaxPerStageDescriptorStorageBuffers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 80) (vkMaxPerStageDescriptorSampledImages (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 84) (vkMaxPerStageDescriptorStorageImages (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 88) (vkMaxPerStageDescriptorInputAttachments (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 92) (vkMaxPerStageResources (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 96) (vkMaxDescriptorSetSamplers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 100) (vkMaxDescriptorSetUniformBuffers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 104) (vkMaxDescriptorSetUniformBuffersDynamic (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 108) (vkMaxDescriptorSetStorageBuffers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 112) (vkMaxDescriptorSetStorageBuffersDynamic (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 116) (vkMaxDescriptorSetSampledImages (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 120) (vkMaxDescriptorSetStorageImages (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 124) (vkMaxDescriptorSetInputAttachments (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 128) (vkMaxVertexInputAttributes (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 132) (vkMaxVertexInputBindings (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 136) (vkMaxVertexInputAttributeOffset (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 140) (vkMaxVertexInputBindingStride (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 144) (vkMaxVertexOutputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 148) (vkMaxTessellationGenerationLevel (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 152) (vkMaxTessellationPatchSize (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 156) (vkMaxTessellationControlPerVertexInputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 160) (vkMaxTessellationControlPerVertexOutputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 164) (vkMaxTessellationControlPerPatchOutputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 168) (vkMaxTessellationControlTotalOutputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 172) (vkMaxTessellationEvaluationInputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 176) (vkMaxTessellationEvaluationOutputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 180) (vkMaxGeometryShaderInvocations (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 184) (vkMaxGeometryInputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 188) (vkMaxGeometryOutputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 192) (vkMaxGeometryOutputVertices (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 196) (vkMaxGeometryTotalOutputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 200) (vkMaxFragmentInputComponents (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 204) (vkMaxFragmentOutputAttachments (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 208) (vkMaxFragmentDualSrcAttachments (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 212) (vkMaxFragmentCombinedOutputResources (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 216) (vkMaxComputeSharedMemorySize (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 220) (vkMaxComputeWorkGroupCount (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 232) (vkMaxComputeWorkGroupInvocations (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 236) (vkMaxComputeWorkGroupSize (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 248) (vkSubPixelPrecisionBits (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 252) (vkSubTexelPrecisionBits (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 256) (vkMipmapPrecisionBits (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 260) (vkMaxDrawIndexedIndexValue (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 264) (vkMaxDrawIndirectCount (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 268) (vkMaxSamplerLodBias (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 272) (vkMaxSamplerAnisotropy (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 276) (vkMaxViewports (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 280) (vkMaxViewportDimensions (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 288) (vkViewportBoundsRange (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 296) (vkViewportSubPixelBits (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 304) (vkMinMemoryMapAlignment (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 312) (vkMinTexelBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 320) (vkMinUniformBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 328) (vkMinStorageBufferOffsetAlignment (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 336) (vkMinTexelOffset (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 340) (vkMaxTexelOffset (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 344) (vkMinTexelGatherOffset (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 348) (vkMaxTexelGatherOffset (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 352) (vkMinInterpolationOffset (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 356) (vkMaxInterpolationOffset (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 360) (vkSubPixelInterpolationOffsetBits (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 364) (vkMaxFramebufferWidth (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 368) (vkMaxFramebufferHeight (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 372) (vkMaxFramebufferLayers (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 376) (vkFramebufferColorSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 380) (vkFramebufferDepthSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 384) (vkFramebufferStencilSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 388) (vkFramebufferNoAttachmentsSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 392) (vkMaxColorAttachments (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 396) (vkSampledImageColorSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 400) (vkSampledImageIntegerSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 404) (vkSampledImageDepthSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 408) (vkSampledImageStencilSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 412) (vkStorageImageSampleCounts (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 416) (vkMaxSampleMaskWords (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 420) (vkTimestampComputeAndGraphics (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 424) (vkTimestampPeriod (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 428) (vkMaxClipDistances (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 432) (vkMaxCullDistances (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 436) (vkMaxCombinedClipAndCullDistances (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 440) (vkDiscreteQueuePriorities (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 444) (vkPointSizeRange (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 452) (vkLineWidthRange (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 460) (vkPointSizeGranularity (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 464) (vkLineWidthGranularity (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 468) (vkStrictLines (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 472) (vkStandardSampleLocations (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 480) (vkOptimalBufferCopyOffsetAlignment (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 488) (vkOptimalBufferCopyRowPitchAlignment (poked :: VkPhysicalDeviceLimits))
+                *> poke (ptr `plusPtr` 496) (vkNonCoherentAtomSize (poked :: VkPhysicalDeviceLimits))
+-- | VkQueueFlags - Bitmask of VkQueueFlagBits
+--
+-- = Description
+--
+-- @VkQueueFlags@ is a bitmask type for setting a mask of zero or more
+-- 'VkQueueFlagBits'.
+--
+-- = See Also
+--
+-- 'VkQueueFamilyProperties', 'VkQueueFlagBits'
+type VkQueueFlags = VkQueueFlagBits
+-- | VkMemoryPropertyFlags - Bitmask of VkMemoryPropertyFlagBits
+--
+-- = Description
+--
+-- @VkMemoryPropertyFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkMemoryPropertyFlagBits'.
+--
+-- = See Also
+--
+-- 'VkMemoryPropertyFlagBits', 'VkMemoryType'
+type VkMemoryPropertyFlags = VkMemoryPropertyFlagBits
+-- | VkMemoryHeapFlags - Bitmask of VkMemoryHeapFlagBits
+--
+-- = Description
+--
+-- @VkMemoryHeapFlags@ is a bitmask type for setting a mask of zero or more
+-- 'VkMemoryHeapFlagBits'.
+--
+-- = See Also
+--
+-- 'VkMemoryHeap', 'VkMemoryHeapFlagBits'
+type VkMemoryHeapFlags = VkMemoryHeapFlagBits
+-- | VkImageUsageFlags - Bitmask of VkImageUsageFlagBits
+--
+-- = Description
+--
+-- @VkImageUsageFlags@ is a bitmask type for setting a mask of zero or more
+-- 'VkImageUsageFlagBits'.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'VkImageUsageFlagBits',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'vkGetPhysicalDeviceImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
+type VkImageUsageFlags = VkImageUsageFlagBits
+-- | VkImageCreateFlags - Bitmask of VkImageCreateFlagBits
+--
+-- = Description
+--
+-- @VkImageCreateFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkImageCreateFlagBits'.
+--
+-- = See Also
+--
+-- 'VkImageCreateFlagBits',
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'vkGetPhysicalDeviceImageFormatProperties'
+type VkImageCreateFlags = VkImageCreateFlagBits
+-- | VkFormatFeatureFlags - Bitmask of VkFormatFeatureFlagBits
+--
+-- = Description
+--
+-- @VkFormatFeatureFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkFormatFeatureFlagBits'.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
+-- 'VkFormatFeatureFlagBits', 'VkFormatProperties'
+type VkFormatFeatureFlags = VkFormatFeatureFlagBits
+-- | VkSampleCountFlags - Bitmask of VkSampleCountFlagBits
+--
+-- = Description
+--
+-- @VkSampleCountFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkSampleCountFlagBits'.
+--
+-- = See Also
+--
+-- 'VkImageFormatProperties', 'VkPhysicalDeviceLimits',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT',
+-- 'VkSampleCountFlagBits'
+type VkSampleCountFlags = VkSampleCountFlagBits
+-- | VkDeviceSize - Vulkan device memory size and offsets
+--
+-- = See Also
 --
 -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferPropertiesANDROID',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo',
diff --git a/src/Graphics/Vulkan/Core10/Event.hs b/src/Graphics/Vulkan/Core10/Event.hs
--- a/src/Graphics/Vulkan/Core10/Event.hs
+++ b/src/Graphics/Vulkan/Core10/Event.hs
@@ -66,13 +66,11 @@
 -- | VkEventCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkEventCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkEventCreateInfo'
 newtype VkEventCreateFlags = VkEventCreateFlags VkFlags
@@ -97,11 +95,7 @@
 data VkEvent_T
 -- | VkEvent - Opaque handle to a event object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResetEvent',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetEvent',
@@ -112,7 +106,6 @@
 -- | vkCreateEvent - Create a new event object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the event.
 --
@@ -121,13 +114,14 @@
 --     created.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pEvent@ points to a handle in which the resulting event object is
 --     returned.
 --
 -- = Description
--- #_description#
 --
 -- When created, the event object is in the unsignaled state.
 --
@@ -145,16 +139,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkEvent',
@@ -163,17 +156,15 @@
 -- | vkDestroyEvent - Destroy an event object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the event.
 --
 -- -   @event@ is the handle of the event to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -204,7 +195,6 @@
 -- -   Host access to @event@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkEvent'
@@ -212,34 +202,33 @@
 -- | vkGetEventStatus - Retrieve the status of an event object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the event.
 --
 -- -   @event@ is the handle of the event to query.
 --
 -- = Description
--- #_description#
 --
 -- Upon success, @vkGetEventStatus@ returns the state of the event object
 -- with the following return codes:
 --
--- > +-----------------------------------+-----------------------------------+
--- > | Status                            | Meaning                           |
--- > +===================================+===================================+
--- > | @VK_EVENT_SET@                    | The event specified by @event@ is |
--- > |                                   | signaled.                         |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_EVENT_RESET@                  | The event specified by @event@ is |
--- > |                                   | unsignaled.                       |
--- > +-----------------------------------+-----------------------------------+
--- >
--- > Event Object Status Codes
+-- +-----------------------------------+-----------------------------------+
+-- | Status                            | Meaning                           |
+-- +===================================+===================================+
+-- | @VK_EVENT_SET@                    | The event specified by @event@ is |
+-- |                                   | signaled.                         |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_EVENT_RESET@                  | The event specified by @event@ is |
+-- |                                   | unsignaled.                       |
+-- +-----------------------------------+-----------------------------------+
 --
+-- Event Object Status Codes
+--
 -- If a @vkCmdSetEvent@ or @vkCmdResetEvent@ command is in a command buffer
--- that is in the
--- <{html_spec_relative}#commandbuffers-lifecycle pending state>, then the
--- value returned by this command /may/ immediately be out of date.
+-- that is in the [pending
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle),
+-- then the value returned by this command /may/ immediately be out of
+-- date.
 --
 -- The state of an event /can/ be updated by the host. The state of the
 -- event is immediately changed, and subsequent calls to @vkGetEventStatus@
@@ -257,12 +246,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_EVENT_SET@
 --
 --     -   @VK_EVENT_RESET@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -270,21 +259,18 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkEvent'
 foreign import ccall "vkGetEventStatus" vkGetEventStatus :: ("device" ::: VkDevice) -> ("event" ::: VkEvent) -> IO VkResult
 -- | vkSetEvent - Set an event to signaled state
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the event.
 --
 -- -   @event@ is the event to set.
 --
 -- = Description
--- #_description#
 --
 -- When 'vkSetEvent' is executed on the host, it defines an /event signal
 -- operation/ which sets the event to the signaled state.
@@ -308,30 +294,27 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkEvent'
 foreign import ccall "vkSetEvent" vkSetEvent :: ("device" ::: VkDevice) -> ("event" ::: VkEvent) -> IO VkResult
 -- | vkResetEvent - Reset an event to non-signaled state
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the event.
 --
 -- -   @event@ is the event to reset.
 --
 -- = Description
--- #_description#
 --
 -- When 'vkResetEvent' is executed on the host, it defines an /event
 -- unsignal operation/ which resets the event to the unsignaled state.
@@ -360,25 +343,21 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkEvent'
 foreign import ccall "vkResetEvent" vkResetEvent :: ("device" ::: VkDevice) -> ("event" ::: VkEvent) -> IO VkResult
 -- | VkEventCreateInfo - Structure specifying parameters of a newly created
 -- event
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EVENT_CREATE_INFO@
@@ -388,16 +367,15 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkEventCreateFlags', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateEvent'
 data VkEventCreateInfo = VkEventCreateInfo
-  { -- No documentation found for Nested "VkEventCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkEventCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkEventCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkEventCreateFlags
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs b/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
--- a/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
+++ b/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
@@ -52,7 +52,6 @@
 -- of global extension properties
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @pLayerName@ is either @NULL@ or a pointer to a null-terminated
 --     UTF-8 string naming the layer to retrieve extensions from.
@@ -64,7 +63,6 @@
 --     'VkExtensionProperties' structures.
 --
 -- = Description
--- #_description#
 --
 -- When @pLayerName@ parameter is @NULL@, only extensions provided by the
 -- Vulkan implementation or by implicitly enabled layers are returned. When
@@ -102,12 +100,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -115,7 +113,6 @@
 --     -   @VK_ERROR_LAYER_NOT_PRESENT@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkExtensionProperties'
 foreign import ccall "vkEnumerateInstanceExtensionProperties" vkEnumerateInstanceExtensionProperties :: ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkExtensionProperties) -> IO VkResult
@@ -123,7 +120,6 @@
 -- physical device extensions
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device that will be queried.
 --
@@ -140,7 +136,6 @@
 --     'VkExtensionProperties' structures.
 --
 -- = Description
--- #_description#
 --
 -- When @pLayerName@ parameter is @NULL@, only extensions provided by the
 -- Vulkan implementation or by implicitly enabled layers are returned. When
@@ -162,12 +157,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -175,25 +170,22 @@
 --     -   @VK_ERROR_LAYER_NOT_PRESENT@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkExtensionProperties',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkEnumerateDeviceExtensionProperties" vkEnumerateDeviceExtensionProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkExtensionProperties) -> IO VkResult
 -- | VkExtensionProperties - Structure specifying a extension properties
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'vkEnumerateDeviceExtensionProperties',
 -- 'vkEnumerateInstanceExtensionProperties'
 data VkExtensionProperties = VkExtensionProperties
-  { -- No documentation found for Nested "VkExtensionProperties" "vkExtensionName"
+  { -- | @extensionName@ is a null-terminated string specifying the name of the
+  -- extension.
   vkExtensionName :: Vector VK_MAX_EXTENSION_NAME_SIZE CChar
-  , -- No documentation found for Nested "VkExtensionProperties" "vkSpecVersion"
+  , -- | @specVersion@ is the version of this extension. It is an integer,
+  -- incremented with backward compatible changes.
   vkSpecVersion :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/Fence.hs b/src/Graphics/Vulkan/Core10/Fence.hs
--- a/src/Graphics/Vulkan/Core10/Fence.hs
+++ b/src/Graphics/Vulkan/Core10/Fence.hs
@@ -76,7 +76,6 @@
 -- a fence
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkFenceCreateFlags'
 newtype VkFenceCreateFlagBits = VkFenceCreateFlagBits VkFlags
@@ -104,7 +103,6 @@
 -- | vkCreateFence - Create a new fence object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the fence.
 --
@@ -113,14 +111,13 @@
 --     created.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pFence@ points to a handle in which the resulting fence object is
 --     returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -135,16 +132,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -153,21 +149,20 @@
 -- | vkDestroyFence - Destroy a fence object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the fence.
 --
 -- -   @fence@ is the handle of the fence to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
--- -   All <{html_spec_relative}#devsandqueues-submission queue submission>
+-- -   All [queue
+--     submission](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-submission)
 --     commands that refer to @fence@ /must/ have completed execution
 --
 -- -   If @VkAllocationCallbacks@ were provided when @fence@ was created, a
@@ -194,7 +189,6 @@
 -- -   Host access to @fence@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -203,7 +197,6 @@
 -- | vkResetFences - Resets one or more fence objects
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the fences.
 --
@@ -212,8 +205,13 @@
 -- -   @pFences@ is a pointer to an array of fence handles to reset.
 --
 -- = Description
--- #_description#
 --
+-- If any member of @pFences@ currently has its [payload
+-- imported](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-importing)
+-- with temporary permanence, that fence’s prior permanent payload is first
+-- restored. The remaining operations described therefore operate on the
+-- restored payload.
+--
 -- When 'vkResetFences' is executed on the host, it defines a /fence
 -- unsignal operation/ for each fence, which resets the fence to the
 -- unsignaled state.
@@ -246,16 +244,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence'
@@ -263,40 +260,36 @@
 -- | vkGetFenceStatus - Return the status of a fence
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the fence.
 --
 -- -   @fence@ is the handle of the fence to query.
 --
 -- = Description
--- #_description#
 --
 -- Upon success, @vkGetFenceStatus@ returns the status of the fence object,
 -- with the following return codes:
 --
--- > +-----------------------------------+-----------------------------------+
--- > | Status                            | Meaning                           |
--- > +===================================+===================================+
--- > | @VK_SUCCESS@                      | The fence specified by @fence@ is |
--- > |                                   | signaled.                         |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_NOT_READY@                    | The fence specified by @fence@ is |
--- > |                                   | unsignaled.                       |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ERROR_DEVICE_LOST@            | The device has been lost. See     |
--- > |                                   | <{html_spec_relative}#devsandqueu |
--- > |                                   | es-lost-device Lost Device>.      |
--- > +-----------------------------------+-----------------------------------+
--- >
--- > Fence Object Status Codes
+-- +-----------------------------------+-------------------------------------------------------------------------------------------------------------------+
+-- | Status                            | Meaning                                                                                                           |
+-- +===================================+===================================================================================================================+
+-- | @VK_SUCCESS@                      | The fence specified by @fence@ is signaled.                                                                       |
+-- +-----------------------------------+-------------------------------------------------------------------------------------------------------------------+
+-- | @VK_NOT_READY@                    | The fence specified by @fence@ is unsignaled.                                                                     |
+-- +-----------------------------------+-------------------------------------------------------------------------------------------------------------------+
+-- | @VK_ERROR_DEVICE_LOST@            | The device has been lost. See [Lost                                                                               |
+-- |                                   | Device](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-lost-device). |
+-- +-----------------------------------+-------------------------------------------------------------------------------------------------------------------+
 --
--- If a <{html_spec_relative}#devsandqueues-submission queue submission>
+-- Fence Object Status Codes
+--
+-- If a [queue
+-- submission](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-submission)
 -- command is pending execution, then the value returned by this command
 -- /may/ immediately be out of date.
 --
--- If the device has been lost (see
--- <{html_spec_relative}#devsandqueues-lost-device Lost Device>),
+-- If the device has been lost (see [Lost
+-- Device](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-lost-device)),
 -- @vkGetFenceStatus@ /may/ return any of the above status codes. If the
 -- device has been lost and @vkGetFenceStatus@ is called repeatedly, it
 -- will eventually return either @VK_SUCCESS@ or @VK_ERROR_DEVICE_LOST@.
@@ -312,12 +305,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_NOT_READY@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -325,7 +318,6 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence'
@@ -333,7 +325,6 @@
 -- | vkWaitForFences - Wait for one or more fences to become signaled
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the fences.
 --
@@ -353,7 +344,6 @@
 --     the requested period.
 --
 -- = Description
--- #_description#
 --
 -- If the condition is satisfied when @vkWaitForFences@ is called, then
 -- @vkWaitForFences@ returns immediately. If the condition is not satisfied
@@ -371,10 +361,10 @@
 -- satisfied before @timeout@ nanoseconds has expired, @vkWaitForFences@
 -- returns @VK_SUCCESS@.
 --
--- If device loss occurs (see
--- <{html_spec_relative}#devsandqueues-lost-device Lost Device>) before the
--- timeout has expired, @vkWaitForFences@ /must/ return in finite time with
--- either @VK_SUCCESS@ or @VK_ERROR_DEVICE_LOST@.
+-- If device loss occurs (see [Lost
+-- Device](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-lost-device))
+-- before the timeout has expired, @vkWaitForFences@ /must/ return in
+-- finite time with either @VK_SUCCESS@ or @VK_ERROR_DEVICE_LOST@.
 --
 -- __Note__
 --
@@ -398,12 +388,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_TIMEOUT@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -411,7 +401,6 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence'
@@ -419,9 +408,6 @@
 -- | VkFenceCreateInfo - Structure specifying parameters of a newly created
 -- fence
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_FENCE_CREATE_INFO@
@@ -439,16 +425,16 @@
 --     values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkFenceCreateFlags', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateFence'
 data VkFenceCreateInfo = VkFenceCreateInfo
-  { -- No documentation found for Nested "VkFenceCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkFenceCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkFenceCreateInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkFenceCreateFlagBits' specifying the initial
+  -- state and behavior of the fence.
   vkFlags :: VkFenceCreateFlags
   }
   deriving (Eq, Show)
@@ -465,13 +451,11 @@
 -- | VkFenceCreateFlags - Bitmask of VkFenceCreateFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkFenceCreateFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkFenceCreateFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkFenceCreateFlagBits', 'VkFenceCreateInfo'
 type VkFenceCreateFlags = VkFenceCreateFlagBits
diff --git a/src/Graphics/Vulkan/Core10/Image.hs b/src/Graphics/Vulkan/Core10/Image.hs
--- a/src/Graphics/Vulkan/Core10/Image.hs
+++ b/src/Graphics/Vulkan/Core10/Image.hs
@@ -91,7 +91,6 @@
 -- | VkImageLayout - Layout of image and image subresources
 --
 -- = Description
--- #_description#
 --
 -- The type(s) of device access supported by each layout are:
 --
@@ -139,6 +138,36 @@
 --     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ /can/ be used as input
 --     attachments.
 --
+-- -   @VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL@: /must/
+--     only be used as a depth\/stencil attachment in a @VkFramebuffer@,
+--     where the depth aspect is read-only, and\/or as a read-only image in
+--     a shader (which /can/ be read as a sampled image, combined
+--     image\/sampler and\/or input attachment) where only the depth aspect
+--     is accessed. This layout is valid only for image subresources of
+--     images created with the
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ usage bit enabled.
+--     Only image subresources of images created with
+--     @VK_IMAGE_USAGE_SAMPLED_BIT@ /can/ be used as a sampled image or
+--     combined image\/sampler in a shader. Similarly, only image
+--     subresources of images created with
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ /can/ be used as input
+--     attachments.
+--
+-- -   @VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL@: /must/
+--     only be used as a depth\/stencil attachment in a @VkFramebuffer@,
+--     where the stencil aspect is read-only, and\/or as a read-only image
+--     in a shader (which /can/ be read as a sampled image, combined
+--     image\/sampler and\/or input attachment) where only the stencil
+--     aspect is accessed. This layout is valid only for image subresources
+--     of images created with the
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ usage bit enabled.
+--     Only image subresources of images created with
+--     @VK_IMAGE_USAGE_SAMPLED_BIT@ /can/ be used as a sampled image or
+--     combined image\/sampler in a shader. Similarly, only image
+--     subresources of images created with
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ /can/ be used as input
+--     attachments.
+--
 -- -   @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@ /must/ only be used as a
 --     read-only image in a shader (which /can/ be read as a sampled image,
 --     combined image\/sampler and\/or input attachment). This layout is
@@ -148,7 +177,7 @@
 --
 -- -   @VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL@ /must/ only be used as a
 --     source image of a transfer command (see the definition of
---     <{html_spec_relative}#synchronization-pipeline-stages-transfer VK_PIPELINE_STAGE_TRANSFER_BIT>).
+--     [@VK_PIPELINE_STAGE_TRANSFER_BIT@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-transfer)).
 --     This layout is valid only for image subresources of images created
 --     with the @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage bit enabled.
 --
@@ -157,6 +186,17 @@
 --     for image subresources of images created with the
 --     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage bit enabled.
 --
+-- -   @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@ /must/ only be used for presenting
+--     a presentable image for display. A swapchain’s image /must/ be
+--     transitioned to this layout before calling
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkQueuePresentKHR', and
+--     /must/ be transitioned away from this layout after calling
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImageKHR'.
+--
+-- -   @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@ is valid only for shared
+--     presentable images, and /must/ be used for any usage the image
+--     supports.
+--
 -- The layout of each image subresource is not a state of the image
 -- subresource itself, but is rather a property of how the data in memory
 -- is organized, and thus for each mechanism of accessing an image in the
@@ -164,13 +204,15 @@
 -- indicates which image layout the image subresource(s) are considered to
 -- be in when the image will be accessed. For transfer commands, this is a
 -- parameter to the command (see
--- <{html_spec_relative}#clears {html_spec_relative}#clears> and
--- <{html_spec_relative}#copies {html_spec_relative}#copies>). For use as a
--- framebuffer attachment, this is a member in the substructures of the
--- @VkRenderPassCreateInfo@ (see
--- <{html_spec_relative}#renderpass Render Pass>). For use in a descriptor
--- set, this is a member in the @VkDescriptorImageInfo@ structure (see
--- <{html_spec_relative}#descriptorsets-updates {html_spec_relative}#descriptorsets-updates>).
+-- [{html_spec_relative}#clears](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears)
+-- and
+-- [{html_spec_relative}#copies](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies)).
+-- For use as a framebuffer attachment, this is a member in the
+-- substructures of the @VkRenderPassCreateInfo@ (see [Render
+-- Pass](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass)).
+-- For use in a descriptor set, this is a member in the
+-- @VkDescriptorImageInfo@ structure (see
+-- [{html_spec_relative}#descriptorsets-updates](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-updates)).
 -- At the time that any command buffer command accessing an image executes
 -- on any queue, the layouts of the image subresources that are accessed
 -- /must/ all match the layout specified via the API controlling those
@@ -184,8 +226,31 @@
 -- /must/ not be @VK_IMAGE_LAYOUT_UNDEFINED@ or
 -- @VK_IMAGE_LAYOUT_PREINITIALIZED@.
 --
+-- The image layout of each image subresource of a depth\/stencil image
+-- created with @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@
+-- is dependent on the last sample locations used to render to the image
+-- subresource as a depth\/stencil attachment, thus applications /must/
+-- provide the same sample locations that were last used to render to the
+-- given image subresource whenever a layout transition of the image
+-- subresource happens, otherwise the contents of the depth aspect of the
+-- image subresource become undefined.
+--
+-- In addition, depth reads from a depth\/stencil attachment referring to
+-- an image subresource range of a depth\/stencil image created with
+-- @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ using
+-- different sample locations than what have been last used to perform
+-- depth writes to the image subresources of the same image subresource
+-- range produce undefined results.
+--
+-- Similarly, depth writes to a depth\/stencil attachment referring to an
+-- image subresource range of a depth\/stencil image created with
+-- @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ using
+-- different sample locations than what have been last used to perform
+-- depth writes to the image subresources of the same image subresource
+-- range make the contents of the depth aspect of those image subresources
+-- undefined.
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription',
 -- 'Graphics.Vulkan.Core10.Pass.VkAttachmentReference',
@@ -280,7 +345,6 @@
 -- | vkCreateImage - Create a new image object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the image.
 --
@@ -288,14 +352,13 @@
 --     structure containing parameters to be used to create the image.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pImage@ points to a @VkImage@ handle in which the resulting image
 --     object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If the @flags@ member of @pCreateInfo@ includes
@@ -318,16 +381,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -336,17 +398,15 @@
 -- | vkDestroyImage - Destroy an image object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the image.
 --
 -- -   @image@ is the image to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -377,7 +437,6 @@
 -- -   Host access to @image@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -387,7 +446,6 @@
 -- subresource
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the image.
 --
@@ -401,10 +459,17 @@
 --     layout is returned.
 --
 -- = Description
--- #_description#
 --
+-- If the 'Graphics.Vulkan.Core10.Core.VkFormat' of @image@ is a
+-- [multi-planar
+-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+-- @vkGetImageSubresourceLayout@ describes one plane of the image.
+--
 -- 'vkGetImageSubresourceLayout' is invariant for the lifetime of a single
--- image.
+-- image. However, the subresource layout of images in Android hardware
+-- buffer external memory isn’t known until the image has been bound to
+-- memory, so calling @vkGetImageSubresourceLayout@ for such an image
+-- before it has been bound will result in undefined behavior.
 --
 -- == Valid Usage
 --
@@ -422,6 +487,21 @@
 --     @arrayLayers@ specified in 'VkImageCreateInfo' when @image@ was
 --     created
 --
+-- -   If the @format@ of @image@ is a [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     with two planes, the @aspectMask@ member of @pSubresource@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@ or @VK_IMAGE_ASPECT_PLANE_1_BIT@
+--
+-- -   If the @format@ of @image@ is a [multi-planar
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     with three planes, the @aspectMask@ member of @pSubresource@ /must/
+--     be @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@ or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--
+-- -   If @image@ was created with the
+--     VK_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 @VkDevice@ handle
@@ -438,7 +518,6 @@
 --     @device@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
@@ -449,7 +528,6 @@
 -- created image object
 --
 -- = Description
--- #_description#
 --
 -- Images created with @tiling@ equal to @VK_IMAGE_TILING_LINEAR@ have
 -- further restrictions on their limits and capabilities compared to images
@@ -474,14 +552,15 @@
 -- those listed above.
 --
 -- To query an implementation’s specific capabilities for a given
--- combination of @format@, @imageType@, @tiling@, @usage@, and @flags@,
--- call
--- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties'.
+-- combination of @format@, @imageType@, @tiling@, @usage@,
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo'::@handleTypes@
+-- and @flags@, call
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'.
 -- The return value specifies whether that combination of image settings is
 -- supported. On success, the @VkImageFormatProperties@ output parameter
 -- specifies the set of valid @samples@ bits and the limits for @extent@,
 -- @mipLevels@, @arrayLayers@, and @maxResourceSize@. Even if
--- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties'.
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'.
 -- returns success and the parameters to vkCreateImage are all within the
 -- returned limits, @vkCreateImage@ /must/ fail and return
 -- @VK_ERROR_OUT_OF_DEVICE_MEMORY@ if the resulting size of the image would
@@ -490,12 +569,27 @@
 -- To determine the set of valid @usage@ bits for a given format, call
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFormatProperties'.
 --
+-- __Note__
+--
+-- For images created without @VK_IMAGE_CREATE_EXTENDED_USAGE_BIT@ a
+-- @usage@ bit is valid if it is supported for the format the image is
+-- created with.
+--
+-- For images created with @VK_IMAGE_CREATE_EXTENDED_USAGE_BIT@ a @usage@
+-- bit is valid if it is supported for at least one of the formats a
+-- @VkImageView@ created from the image /can/ have (see [Image
+-- Views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views)
+-- for more detail).
+--
 -- == Valid Usage
 --
--- -   The combination of @format@, @imageType@, @tiling@, @usage@, and
---     @flags@ /must/ be supported, as indicated by a @VK_SUCCESS@ return
---     value from @vkGetPhysicalDeviceImageFormatProperties@ invoked with
---     the same values passed to the corresponding parameters.
+-- -   If the @pNext@ chain doesn’t contain an instance of
+--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID',
+--     or if @format@ is not VK_FORMAT_UNDEFINED, the combination of
+--     @format@, @imageType@, @tiling@, @usage@, and @flags@ /must/ be
+--     supported, as indicated by a @VK_SUCCESS@ return value from
+--     @vkGetPhysicalDeviceImageFormatProperties@ invoked with the same
+--     values passed to the corresponding parameters.
 --
 -- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
 --     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
@@ -506,8 +600,10 @@
 --
 -- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@, each element of
 --     @pQueueFamilyIndices@ /must/ be unique and /must/ be less than
---     @pQueueFamilyPropertyCount@ returned by
+--     @pQueueFamilyPropertyCount@ returned by either
 --     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2'
 --     for the @physicalDevice@ that was used to create @device@
 --
 -- -   @format@ /must/ not be @VK_FORMAT_UNDEFINED@
@@ -525,6 +621,9 @@
 -- -   If @flags@ contains @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@,
 --     @imageType@ /must/ be @VK_IMAGE_TYPE_2D@
 --
+-- -   If @flags@ contains @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@,
+--     @imageType@ /must/ be @VK_IMAGE_TYPE_3D@
+--
 -- -   If @imageType@ is @VK_IMAGE_TYPE_1D@, @extent.width@ /must/ be less
 --     than or equal to @VkPhysicalDeviceLimits@::@maxImageDimension1D@, or
 --     @VkImageFormatProperties@::@maxExtent.width@ (as returned by
@@ -620,55 +719,55 @@
 --     @imageType@, @tiling@, @usage@, and @flags@ equal to those in this
 --     structure
 --
--- -   If the
---     <{html_spec_relative}#features-features-shaderStorageImageMultisample multisampled storage images>
+-- -   If the [multisampled storage
+--     images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-shaderStorageImageMultisample)
 --     feature is not enabled, and @usage@ contains
 --     @VK_IMAGE_USAGE_STORAGE_BIT@, @samples@ /must/ be
 --     @VK_SAMPLE_COUNT_1_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseBinding sparse bindings>
+-- -   If the [sparse
+--     bindings](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseBinding)
 --     feature is not enabled, @flags@ /must/ not contain
 --     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidencyAliased sparse aliased residency>
+-- -   If the [sparse aliased
+--     residency](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidencyAliased)
 --     feature is not enabled, @flags@ /must/ not contain
 --     @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@
 --
 -- -   If @imageType@ is @VK_IMAGE_TYPE_1D@, @flags@ /must/ not contain
 --     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidencyImage2D sparse residency for 2D images>
+-- -   If the [sparse residency for 2D
+--     images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidencyImage2D)
 --     feature is not enabled, and @imageType@ is @VK_IMAGE_TYPE_2D@,
 --     @flags@ /must/ not contain @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidencyImage3D sparse residency for 3D images>
+-- -   If the [sparse residency for 3D
+--     images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidencyImage3D)
 --     feature is not enabled, and @imageType@ is @VK_IMAGE_TYPE_3D@,
 --     @flags@ /must/ not contain @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidency2Samples sparse residency for images with 2 samples>
+-- -   If the [sparse residency for images with 2
+--     samples](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidency2Samples)
 --     feature is not enabled, @imageType@ is @VK_IMAGE_TYPE_2D@, and
 --     @samples@ is @VK_SAMPLE_COUNT_2_BIT@, @flags@ /must/ not contain
 --     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidency4Samples sparse residency for images with 4 samples>
+-- -   If the [sparse residency for images with 4
+--     samples](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidency4Samples)
 --     feature is not enabled, @imageType@ is @VK_IMAGE_TYPE_2D@, and
 --     @samples@ is @VK_SAMPLE_COUNT_4_BIT@, @flags@ /must/ not contain
 --     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidency8Samples sparse residency for images with 8 samples>
+-- -   If the [sparse residency for images with 8
+--     samples](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidency8Samples)
 --     feature is not enabled, @imageType@ is @VK_IMAGE_TYPE_2D@, and
 --     @samples@ is @VK_SAMPLE_COUNT_8_BIT@, @flags@ /must/ not contain
 --     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidency16Samples sparse residency for images with 16 samples>
+-- -   If the [sparse residency for images with 16
+--     samples](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidency16Samples)
 --     feature is not enabled, @imageType@ is @VK_IMAGE_TYPE_2D@, and
 --     @samples@ is @VK_SAMPLE_COUNT_16_BIT@, @flags@ /must/ not contain
 --     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
@@ -744,9 +843,137 @@
 --     @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ are set,
 --     @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@ /must/ not also be set
 --
+-- -   If the @pNext@ chain contains an instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV',
+--     it /must/ not contain an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo'.
+--
+-- -   If the @pNext@ chain contains an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo',
+--     its @handleTypes@ member /must/ only contain bits that are also in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalImageFormatProperties'::@externalMemoryProperties@::@compatibleHandleTypes@,
+--     as returned by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'
+--     with @format@, @imageType@, @tiling@, @usage@, and @flags@ equal to
+--     those in this structure, and with an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalImageFormatInfo'
+--     in the @pNext@ chain, with a @handleType@ equal to any one of the
+--     handle types specified in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo'::@handleTypes@
+--
+-- -   If the @pNext@ chain contains an instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV',
+--     its @handleTypes@ member /must/ only contain bits that are also in
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalImageFormatPropertiesNV'::@externalMemoryProperties@::@compatibleHandleTypes@,
+--     as returned by
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV'
+--     with @format@, @imageType@, @tiling@, @usage@, and @flags@ equal to
+--     those in this structure, and with @externalHandleType@ equal to any
+--     one of the handle types specified in
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV'::@handleTypes@
+--
+-- -   If the logical device was created with
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkDeviceGroupDeviceCreateInfo'::@physicalDeviceCount@
+--     equal to 1, @flags@ /must/ not contain
+--     @VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT@
+--
+-- -   If @flags@ contains
+--     @VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT@, then @mipLevels@
+--     /must/ be one, @arrayLayers@ /must/ be one, @imageType@ /must/ be
+--     @VK_IMAGE_TYPE_2D@, and @tiling@ /must/ be @VK_IMAGE_TILING_OPTIMAL@
+--
+-- -   If @flags@ contains
+--     @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@, then @format@
+--     /must/ be a [block-compressed image
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#appendix-compressedtex-bc),
+--     an [ETC compressed image
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#appendix-compressedtex-etc2),
+--     or an [ASTC compressed image
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#appendix-compressedtex-astc).
+--
+-- -   If @flags@ contains
+--     @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@, then @flags@
+--     /must/ also contain @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@.
+--
 -- -   @initialLayout@ /must/ be @VK_IMAGE_LAYOUT_UNDEFINED@ or
 --     @VK_IMAGE_LAYOUT_PREINITIALIZED@.
 --
+-- -   If the @pNext@ chain includes a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV'
+--     structure whose @handleTypes@ member is not @0@, @initialLayout@
+--     /must/ be @VK_IMAGE_LAYOUT_UNDEFINED@
+--
+-- -   If the image @format@ is one of those listed in
+--     [{html_spec_relative}#features-formats-requiring-sampler-ycbcr-conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion):
+--
+--     -   @mipLevels@ /must/ be 1
+--
+--     -   @samples@ must be @VK_SAMPLE_COUNT_1_BIT@
+--
+--     -   @imageType@ /must/ be @VK_IMAGE_TYPE_2D@
+--
+--     -   @arrayLayers@ /must/ be 1
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_OPTIMAL@, @format@ is a
+--     /multi-planar/ format, and
+--     @VkFormatProperties@::@optimalTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_DISJOINT_BIT@, @flags@
+--     /must/ not contain @VK_IMAGE_CREATE_DISJOINT_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_LINEAR@, @format@ is a
+--     /multi-planar/ format, and
+--     @VkFormatProperties@::@linearTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_DISJOINT_BIT@, @flags@
+--     /must/ not contain @VK_IMAGE_CREATE_DISJOINT_BIT@
+--
+-- -   If @format@ is not a /multi-planar/ format, and @flags@ does not
+--     include @VK_IMAGE_CREATE_ALIAS_BIT@, @flags@ /must/ not contain
+--     @VK_IMAGE_CREATE_DISJOINT_BIT@
+--
+-- -   If @flags@ contains
+--     @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ @format@
+--     /must/ be a depth or depth\/stencil format
+--
+-- -   If the @pNext@ chain includes a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo'
+--     structure whose @handleTypes@ member includes
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@:
+--
+--     -   @imageType@ /must/ be @VK_IMAGE_TYPE_2D@
+--
+--     -   @mipLevels@ /must/ either be @1@ or equal to
+--         ⌊log2(max(@extent.width@, @extent.height@, @extent.depth@))⌋ +
+--         1.
+--
+--     -   If @format@ is not @VK_FORMAT_UNDEFINED@, then @format@,
+--         @imageType@, @tiling@, @usage@, @flags@, @mipLevels@, and
+--         @samples@ /must/ be supported with
+--         @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@
+--         external memory handle types according to
+--         'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'
+--
+--     -   If @format@ is @VK_FORMAT_UNDEFINED@, then the @pNext@ chain
+--         /must/ include a
+--         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID'
+--         structure whose @externalFormat@ member is not @0@
+--
+-- -   If the @pNext@ chain includes a
+--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID'
+--     structure whose @externalFormat@ member is not @0@:
+--
+--     -   @format@ /must/ be @VK_FORMAT_UNDEFINED@
+--
+--     -   @flags@ /must/ not include VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+--
+--     -   @usage@ /must/ not include any usages except
+--         @VK_IMAGE_USAGE_SAMPLED_BIT@
+--
+--     -   @tiling@ /must/ be @VK_IMAGE_TILING_OPTIMAL@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO@
@@ -793,7 +1020,6 @@
 -- -   @initialLayout@ /must/ be a valid 'VkImageLayout' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
 -- 'Graphics.Vulkan.Core10.Core.VkFormat',
@@ -806,35 +1032,58 @@
 -- 'Graphics.Vulkan.Core10.Buffer.VkSharingMode',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateImage'
 data VkImageCreateInfo = VkImageCreateInfo
-  { -- No documentation found for Nested "VkImageCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageCreateFlagBits'
+  -- describing additional parameters of the image.
   vkFlags :: VkImageCreateFlags
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkImageType"
+  , -- | @imageType@ is a
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType' value
+  -- specifying the basic dimensionality of the image. Layers in array
+  -- textures do not count as a dimension for the purposes of the image type.
   vkImageType :: VkImageType
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkFormat"
+  , -- | @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' describing the
+  -- format and type of the data elements that will be contained in the
+  -- image.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkExtent"
+  , -- | @extent@ is a 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D'
+  -- describing the number of data elements in each dimension of the base
+  -- level.
   vkExtent :: VkExtent3D
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkMipLevels"
+  , -- | @mipLevels@ describes the number of levels of detail available for
+  -- minified sampling of the image.
   vkMipLevels :: Word32
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkArrayLayers"
+  , -- | @arrayLayers@ is the number of layers in the image.
   vkArrayLayers :: Word32
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkSamples"
+  , -- | @samples@ is the number of sub-data element samples in the image as
+  -- defined in
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'. See
+  -- [Multisampling](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-multisampling).
   vkSamples :: VkSampleCountFlagBits
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkTiling"
+  , -- | @tiling@ is a
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling' value
+  -- specifying the tiling arrangement of the data elements in memory.
   vkTiling :: VkImageTiling
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkUsage"
+  , -- | @usage@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+  -- describing the intended usage of the image.
   vkUsage :: VkImageUsageFlags
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkSharingMode"
+  , -- | @sharingMode@ is a 'Graphics.Vulkan.Core10.Buffer.VkSharingMode' value
+  -- specifying the sharing mode of the image when it will be accessed by
+  -- multiple queue families.
   vkSharingMode :: VkSharingMode
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkQueueFamilyIndexCount"
+  , -- | @queueFamilyIndexCount@ is the number of entries in the
+  -- @pQueueFamilyIndices@ array.
   vkQueueFamilyIndexCount :: Word32
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkPQueueFamilyIndices"
+  , -- | @pQueueFamilyIndices@ is a list of queue families that will access this
+  -- image (ignored if @sharingMode@ is not @VK_SHARING_MODE_CONCURRENT@).
   vkPQueueFamilyIndices :: Ptr Word32
-  , -- No documentation found for Nested "VkImageCreateInfo" "vkInitialLayout"
+  , -- | @initialLayout@ is a 'VkImageLayout' value specifying the initial
+  -- 'VkImageLayout' of all image subresources of the image. See [Image
+  -- Layouts](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-layouts).
   vkInitialLayout :: VkImageLayout
   }
   deriving (Eq, Show)
@@ -875,7 +1124,6 @@
 -- | VkSubresourceLayout - Structure specifying subresource layout
 --
 -- = Description
--- #_description#
 --
 -- For images created with linear tiling, @rowPitch@, @arrayPitch@ and
 -- @depthPitch@ describe the layout of the image subresource in linear
@@ -904,30 +1152,43 @@
 -- @arrayPitch@ is undefined for images that were not created as arrays.
 -- @depthPitch@ is defined only for 3D images.
 --
--- For color formats, the @aspectMask@ member of @VkImageSubresource@
--- /must/ be @VK_IMAGE_ASPECT_COLOR_BIT@. For depth\/stencil formats,
--- @aspectMask@ /must/ be either @VK_IMAGE_ASPECT_DEPTH_BIT@ or
--- @VK_IMAGE_ASPECT_STENCIL_BIT@. On implementations that store depth and
--- stencil aspects separately, querying each of these image subresource
--- layouts will return a different @offset@ and @size@ representing the
--- region of memory used for that aspect. On implementations that store
--- depth and stencil aspects interleaved, the same @offset@ and @size@ are
--- returned and represent the interleaved memory allocation.
+-- For /single-plane/ color formats, the @aspectMask@ member of
+-- @VkImageSubresource@ /must/ be @VK_IMAGE_ASPECT_COLOR_BIT@. For
+-- depth\/stencil formats, @aspectMask@ /must/ be either
+-- @VK_IMAGE_ASPECT_DEPTH_BIT@ or @VK_IMAGE_ASPECT_STENCIL_BIT@. On
+-- implementations that store depth and stencil aspects separately,
+-- querying each of these image subresource layouts will return a different
+-- @offset@ and @size@ representing the region of memory used for that
+-- aspect. On implementations that store depth and stencil aspects
+-- interleaved, the same @offset@ and @size@ are returned and represent the
+-- interleaved memory allocation.
 --
+-- For [multi-planar
+-- formats](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+-- the @aspectMask@ member of @VkImageSubresource@ /must/ be
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or (for
+-- 3-plane formats only) @VK_IMAGE_ASPECT_PLANE_2_BIT@. Querying each of
+-- these image subresource layouts will return a different @offset@ and
+-- @size@ representing the region of memory used for that plane.
+--
 -- = See Also
--- #_see_also#
 --
 -- @VkDeviceSize@, 'vkGetImageSubresourceLayout'
 data VkSubresourceLayout = VkSubresourceLayout
-  { -- No documentation found for Nested "VkSubresourceLayout" "vkOffset"
+  { -- | @offset@ is the byte offset from the start of the image where the image
+  -- subresource begins.
   vkOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkSubresourceLayout" "vkSize"
+  , -- | @size@ is the size in bytes of the image subresource. @size@ includes
+  -- any extra memory that is required based on @rowPitch@.
   vkSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkSubresourceLayout" "vkRowPitch"
+  , -- | @rowPitch@ describes the number of bytes between each row of texels in
+  -- an image.
   vkRowPitch :: VkDeviceSize
-  , -- No documentation found for Nested "VkSubresourceLayout" "vkArrayPitch"
+  , -- | @arrayPitch@ describes the number of bytes between each array layer of
+  -- an image.
   vkArrayPitch :: VkDeviceSize
-  , -- No documentation found for Nested "VkSubresourceLayout" "vkDepthPitch"
+  , -- | @depthPitch@ describes the number of bytes between each slice of 3D
+  -- image.
   vkDepthPitch :: VkDeviceSize
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/ImageView.hs b/src/Graphics/Vulkan/Core10/ImageView.hs
--- a/src/Graphics/Vulkan/Core10/ImageView.hs
+++ b/src/Graphics/Vulkan/Core10/ImageView.hs
@@ -94,7 +94,6 @@
 -- | VkComponentSwizzle - Specify how a component is swizzled
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_COMPONENT_SWIZZLE_IDENTITY@ specifies that the component is set
 --     to the identity swizzle.
@@ -105,8 +104,8 @@
 -- -   @VK_COMPONENT_SWIZZLE_ONE@ specifies that the component is set to
 --     either 1 or 1.0, depending on whether the type of the image view
 --     format is integer or floating-point respectively, as determined by
---     the
---     <{html_spec_relative}#features-formats-definition Format Definition>
+--     the [Format
+--     Definition](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-definition)
 --     section for each 'Graphics.Vulkan.Core10.Core.VkFormat'.
 --
 -- -   @VK_COMPONENT_SWIZZLE_R@ specifies that the component is set to the
@@ -124,22 +123,21 @@
 -- Setting the identity swizzle on a component is equivalent to setting the
 -- identity mapping on that component. That is:
 --
--- > +-----------------------------------+-----------------------------------+
--- > | Component                         | Identity Mapping                  |
--- > +===================================+===================================+
--- > | @components.r@                    | @VK_COMPONENT_SWIZZLE_R@          |
--- > +-----------------------------------+-----------------------------------+
--- > | @components.g@                    | @VK_COMPONENT_SWIZZLE_G@          |
--- > +-----------------------------------+-----------------------------------+
--- > | @components.b@                    | @VK_COMPONENT_SWIZZLE_B@          |
--- > +-----------------------------------+-----------------------------------+
--- > | @components.a@                    | @VK_COMPONENT_SWIZZLE_A@          |
--- > +-----------------------------------+-----------------------------------+
--- >
--- > Component Mappings Equivalent To @VK_COMPONENT_SWIZZLE_IDENTITY@
+-- +-----------------------------------+-----------------------------------+
+-- | Component                         | Identity Mapping                  |
+-- +===================================+===================================+
+-- | @components.r@                    | @VK_COMPONENT_SWIZZLE_R@          |
+-- +-----------------------------------+-----------------------------------+
+-- | @components.g@                    | @VK_COMPONENT_SWIZZLE_G@          |
+-- +-----------------------------------+-----------------------------------+
+-- | @components.b@                    | @VK_COMPONENT_SWIZZLE_B@          |
+-- +-----------------------------------+-----------------------------------+
+-- | @components.a@                    | @VK_COMPONENT_SWIZZLE_A@          |
+-- +-----------------------------------+-----------------------------------+
 --
+-- Component Mappings Equivalent To @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkComponentMapping'
 newtype VkComponentSwizzle = VkComponentSwizzle Int32
@@ -203,18 +201,16 @@
 -- | VkImageViewType - Image view types
 --
 -- = Description
--- #_description#
 --
 -- The exact image view type is partially implicit, based on the image’s
 -- type and sample count, as well as the view creation parameters as
--- described in the
--- <{html_spec_relative}#resources-image-views-compatibility image view compatibility table>
+-- described in the [image view compatibility
+-- table](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views-compatibility)
 -- for 'vkCreateImageView'. This table also shows which SPIR-V
 -- @OpTypeImage@ @Dim@ and @Arrayed@ parameters correspond to each image
 -- view type.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkImageViewCreateInfo'
 newtype VkImageViewType = VkImageViewType Int32
@@ -278,13 +274,11 @@
 -- | VkImageViewCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkImageViewCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkImageViewCreateInfo'
 newtype VkImageViewCreateFlags = VkImageViewCreateFlags VkFlags
@@ -309,11 +303,7 @@
 data VkImageView_T
 -- | VkImageView - Opaque handle to a image view object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorImageInfo',
 -- 'Graphics.Vulkan.Core10.Pass.VkFramebufferCreateInfo',
@@ -322,7 +312,6 @@
 -- | vkCreateImageView - Create an image view from an existing image
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the image view.
 --
@@ -331,19 +320,24 @@
 --     to create the image view.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pView@ points to a @VkImageView@ handle in which the resulting
 --     image view object is returned.
 --
 -- = Description
--- #_description#
 --
 -- Some of the image creation parameters are inherited by the view. In
 -- particular, image view creation inherits the implicit parameter @usage@
 -- specifying the allowed usages of the image view that, by default, takes
 -- the value of the corresponding @usage@ parameter specified in
--- @VkImageCreateInfo@ at image creation time.
+-- @VkImageCreateInfo@ at image creation time. This implicit parameter
+-- /can/ be overriden by chaining a
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo'
+-- structure through the @pNext@ member to @VkImageViewCreateInfo@ as
+-- described later in this section.
 --
 -- The remaining parameters are contained in the @pCreateInfo@.
 --
@@ -361,16 +355,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkImageView',
@@ -379,17 +372,15 @@
 -- | vkDestroyImageView - Destroy an image view object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the image view.
 --
 -- -   @imageView@ is the image view to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -421,16 +412,12 @@
 -- -   Host access to @imageView@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkImageView'
 foreign import ccall "vkDestroyImageView" vkDestroyImageView :: ("device" ::: VkDevice) -> ("imageView" ::: VkImageView) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
 -- | VkComponentMapping - Structure specifying a color component mapping
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @r@ /must/ be a valid 'VkComponentSwizzle' value
@@ -442,19 +429,22 @@
 -- -   @a@ /must/ be a valid 'VkComponentSwizzle' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
 -- 'VkComponentSwizzle', 'VkImageViewCreateInfo',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'
 data VkComponentMapping = VkComponentMapping
-  { -- No documentation found for Nested "VkComponentMapping" "vkR"
+  { -- | @r@ is a 'VkComponentSwizzle' specifying the component value placed in
+  -- the R component of the output vector.
   vkR :: VkComponentSwizzle
-  , -- No documentation found for Nested "VkComponentMapping" "vkG"
+  , -- | @g@ is a 'VkComponentSwizzle' specifying the component value placed in
+  -- the G component of the output vector.
   vkG :: VkComponentSwizzle
-  , -- No documentation found for Nested "VkComponentMapping" "vkB"
+  , -- | @b@ is a 'VkComponentSwizzle' specifying the component value placed in
+  -- the B component of the output vector.
   vkB :: VkComponentSwizzle
-  , -- No documentation found for Nested "VkComponentMapping" "vkA"
+  , -- | @a@ is a 'VkComponentSwizzle' specifying the component value placed in
+  -- the A component of the output vector.
   vkA :: VkComponentSwizzle
   }
   deriving (Eq, Show)
@@ -473,7 +463,6 @@
 -- | VkImageSubresourceRange - Structure specifying a image subresource range
 --
 -- = Description
--- #_description#
 --
 -- The number of mipmap levels and array layers /must/ be a subset of the
 -- image subresources in the image. If an application wants to use all mip
@@ -494,11 +483,25 @@
 --
 -- @aspectMask@ /must/ be only @VK_IMAGE_ASPECT_COLOR_BIT@,
 -- @VK_IMAGE_ASPECT_DEPTH_BIT@ or @VK_IMAGE_ASPECT_STENCIL_BIT@ if @format@
--- is a color, depth-only or stencil-only format, respectively. If using a
--- depth\/stencil format with both depth and stencil components,
+-- is a color, depth-only or stencil-only format, respectively, except if
+-- @format@ is a [multi-planar
+-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion).
+-- If using a depth\/stencil format with both depth and stencil components,
 -- @aspectMask@ /must/ include at least one of @VK_IMAGE_ASPECT_DEPTH_BIT@
 -- and @VK_IMAGE_ASPECT_STENCIL_BIT@, and /can/ include both.
 --
+-- When the @VkImageSubresourceRange@ structure is used to select a subset
+-- of the slices of a 3D image’s mip level in order to create a 2D or 2D
+-- array image view of a 3D image created with
+-- @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@, @baseArrayLayer@ and
+-- @layerCount@ specify the first slice index and the number of slices to
+-- include in the created image view. Such an image view /can/ be used as a
+-- framebuffer attachment that refers only to the specified range of slices
+-- of the selected mip level. However, any layout transitions performed on
+-- such an attachment view during a render pass instance still apply to the
+-- entire subresource referenced which includes all the slices of the
+-- selected mip level.
+--
 -- When using an imageView of a depth\/stencil image to populate a
 -- descriptor set (e.g. for sampling in the shader, or for use as an input
 -- attachment), the @aspectMask@ /must/ only include one bit and selects
@@ -512,9 +515,25 @@
 -- The @components@ member is of type 'VkComponentMapping', and describes a
 -- remapping from components of the image to components of the vector
 -- returned by shader image instructions. This remapping /must/ be identity
--- for storage image descriptors, input attachment descriptors, and
--- framebuffer attachments.
+-- for storage image descriptors, input attachment descriptors, framebuffer
+-- attachments, and any @VkImageView@ used with a combined image sampler
+-- that enables [sampler Y’CBCR
+-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion).
 --
+-- When creating a @VkImageView@, if [sampler Y’CBCR
+-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+-- is enabled in the sampler, the @aspectMask@ of a @subresourceRange@ used
+-- by the @VkImageView@ /must/ be @VK_IMAGE_ASPECT_COLOR_BIT@.
+--
+-- When creating a @VkImageView@, if sampler Y’CBCR conversion is not
+-- enabled in the sampler and the image @format@ is
+-- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+-- the image /must/ have been created with
+-- @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@, and the @aspectMask@ of the
+-- @VkImageView@’s @subresourceRange@ /must/ be
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@ or
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@.
+--
 -- == Valid Usage
 --
 -- -   If @levelCount@ is not @VK_REMAINING_MIP_LEVELS@, it /must/ be
@@ -523,6 +542,10 @@
 -- -   If @layerCount@ is not @VK_REMAINING_ARRAY_LAYERS@, it /must/ be
 --     greater than @0@
 --
+-- -   If @aspectMask@ includes @VK_IMAGE_ASPECT_COLOR_BIT@, then it /must/
+--     not include any of @VK_IMAGE_ASPECT_PLANE_0_BIT@,
+--     @VK_IMAGE_ASPECT_PLANE_1_BIT@, or @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @aspectMask@ /must/ be a valid combination of
@@ -532,7 +555,6 @@
 -- -   @aspectMask@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier',
@@ -540,15 +562,19 @@
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearDepthStencilImage'
 data VkImageSubresourceRange = VkImageSubresourceRange
-  { -- No documentation found for Nested "VkImageSubresourceRange" "vkAspectMask"
+  { -- | @aspectMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
+  -- specifying which aspect(s) of the image are included in the view.
   vkAspectMask :: VkImageAspectFlags
-  , -- No documentation found for Nested "VkImageSubresourceRange" "vkBaseMipLevel"
+  , -- | @baseMipLevel@ is the first mipmap level accessible to the view.
   vkBaseMipLevel :: Word32
-  , -- No documentation found for Nested "VkImageSubresourceRange" "vkLevelCount"
+  , -- | @levelCount@ is the number of mipmap levels (starting from
+  -- @baseMipLevel@) accessible to the view.
   vkLevelCount :: Word32
-  , -- No documentation found for Nested "VkImageSubresourceRange" "vkBaseArrayLayer"
+  , -- | @baseArrayLayer@ is the first array layer accessible to the view.
   vkBaseArrayLayer :: Word32
-  , -- No documentation found for Nested "VkImageSubresourceRange" "vkLayerCount"
+  , -- | @layerCount@ is the number of array layers (starting from
+  -- @baseArrayLayer@) accessible to the view.
   vkLayerCount :: Word32
   }
   deriving (Eq, Show)
@@ -570,13 +596,15 @@
 -- created image view
 --
 -- = Description
--- #_description#
 --
 -- If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@
--- flag, @format@ /can/ be different from the image’s format, but if they
--- are not equal they /must/ be /compatible/. Image format compatibility is
--- defined in the
--- <{html_spec_relative}#features-formats-compatibility-classes Format Compatibility Classes>
+-- flag, and if the @format@ of the image is not
+-- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion),
+-- @format@ /can/ be different from the image’s format, but if @image@ was
+-- created without the @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@
+-- flag and they are not equal they /must/ be /compatible/. Image format
+-- compatibility is defined in the [Format Compatibility
+-- Classes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatibility-classes)
 -- section. Views of compatible formats will have the same mapping between
 -- texel coordinates and memory locations irrespective of the @format@,
 -- with only the interpretation of the bit pattern changing.
@@ -590,128 +618,194 @@
 -- read through a view with a floating point format. Similarly, a value
 -- written through a signed normalized format that has a bit pattern
 -- exactly equal to -2b /may/ be changed to -2b + 1 as described in
--- <{html_spec_relative}#fundamentals-fixedfpconv Conversion from Normalized Fixed-Point to Floating-Point>.
+-- [Conversion from Normalized Fixed-Point to
+-- Floating-Point](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-fixedfpconv).
 --
--- > +---------+------------------------+-----------------------------------+
--- > | Dim,    | Image parameters       | View parameters                   |
--- > | Arrayed |                        |                                   |
--- > | ,       |                        |                                   |
--- > | MS      |                        |                                   |
--- > +=========+========================+===================================+
--- > |         | @imageType@ =          | @baseArrayLayer@ and @layerCount@ |
--- > |         | ci.@imageType@         | are members of the                |
--- > |         | @width@ =              | @subresourceRange@ member.        |
--- > |         | ci.@extent.width@      |                                   |
--- > |         | @height@ =             |                                   |
--- > |         | ci.@extent.height@     |                                   |
--- > |         | @depth@ =              |                                   |
--- > |         | ci.@extent.depth@      |                                   |
--- > |         | @arrayLayers@ =        |                                   |
--- > |         | ci.@arrayLayers@       |                                   |
--- > |         | @samples@ =            |                                   |
--- > |         | ci.@samples@           |                                   |
--- > |         | @flags@ = ci.@flags@   |                                   |
--- > |         | where ci is the        |                                   |
--- > |         | 'Graphics.Vulkan.Core1 |                                   |
--- > |         | 0.Image.VkImageCreateI |                                   |
--- > |         | nfo'                   |                                   |
--- > |         | used to create         |                                   |
--- > |         | @image@.               |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __1D,   | @imageType@ =          | @viewType@ =                      |
--- > | 0, 0__  | @VK_IMAGE_TYPE_1D@     | @VK_IMAGE_VIEW_TYPE_1D@           |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ = 1           | @layerCount@ = 1                  |
--- > |         | @depth@ = 1            |                                   |
--- > |         | @arrayLayers@ ≥ 1      |                                   |
--- > |         | @samples@ = 1          |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __1D,   | @imageType@ =          | @viewType@ =                      |
--- > | 1, 0__  | @VK_IMAGE_TYPE_1D@     | @VK_IMAGE_VIEW_TYPE_1D_ARRAY@     |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ = 1           | @layerCount@ ≥ 1                  |
--- > |         | @depth@ = 1            |                                   |
--- > |         | @arrayLayers@ ≥ 1      |                                   |
--- > |         | @samples@ = 1          |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __2D,   | @imageType@ =          | @viewType@ =                      |
--- > | 0, 0__  | @VK_IMAGE_TYPE_2D@     | @VK_IMAGE_VIEW_TYPE_2D@           |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ ≥ 1           | @layerCount@ = 1                  |
--- > |         | @depth@ = 1            |                                   |
--- > |         | @arrayLayers@ ≥ 1      |                                   |
--- > |         | @samples@ = 1          |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __2D,   | @imageType@ =          | @viewType@ =                      |
--- > | 1, 0__  | @VK_IMAGE_TYPE_2D@     | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@     |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ ≥ 1           | @layerCount@ ≥ 1                  |
--- > |         | @depth@ = 1            |                                   |
--- > |         | @arrayLayers@ ≥ 1      |                                   |
--- > |         | @samples@ = 1          |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __2D,   | @imageType@ =          | @viewType@ =                      |
--- > | 0, 1__  | @VK_IMAGE_TYPE_2D@     | @VK_IMAGE_VIEW_TYPE_2D@           |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ ≥ 1           | @layerCount@ = 1                  |
--- > |         | @depth@ = 1            |                                   |
--- > |         | @arrayLayers@ ≥ 1      |                                   |
--- > |         | @samples@ > 1          |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __2D,   | @imageType@ =          | @viewType@ =                      |
--- > | 1, 1__  | @VK_IMAGE_TYPE_2D@     | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@     |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ ≥ 1           | @layerCount@ ≥ 1                  |
--- > |         | @depth@ = 1            |                                   |
--- > |         | @arrayLayers@ ≥ 1      |                                   |
--- > |         | @samples@ > 1          |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __CUBE, | @imageType@ =          | @viewType@ =                      |
--- > | 0, 0__  | @VK_IMAGE_TYPE_2D@     | @VK_IMAGE_VIEW_TYPE_CUBE@         |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ = @width@     | @layerCount@ = 6                  |
--- > |         | @depth@ = 1            |                                   |
--- > |         | @arrayLayers@ ≥ 6      |                                   |
--- > |         | @samples@ = 1          |                                   |
--- > |         | @flags@ includes       |                                   |
--- > |         | @VK_IMAGE_CREATE_CUBE_ |                                   |
--- > |         | COMPATIBLE_BIT@        |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __CUBE, | @imageType@ =          | @viewType@ =                      |
--- > | 1, 0__  | @VK_IMAGE_TYPE_2D@     | @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@   |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ ≥ 0              |
--- > |         | @height@ = width       | @layerCount@ = 6 × /N/, /N/ ≥ 1   |
--- > |         | @depth@ = 1            |                                   |
--- > |         | /N/ ≥ 1                |                                   |
--- > |         | @arrayLayers@ ≥ 6 ×    |                                   |
--- > |         | /N/                    |                                   |
--- > |         | @samples@ = 1          |                                   |
--- > |         | @flags@ includes       |                                   |
--- > |         | @VK_IMAGE_CREATE_CUBE_ |                                   |
--- > |         | COMPATIBLE_BIT@        |                                   |
--- > +---------+------------------------+-----------------------------------+
--- > | __3D,   | @imageType@ =          | @viewType@ =                      |
--- > | 0, 0__  | @VK_IMAGE_TYPE_3D@     | @VK_IMAGE_VIEW_TYPE_3D@           |
--- > |         | @width@ ≥ 1            | @baseArrayLayer@ = 0              |
--- > |         | @height@ ≥ 1           | @layerCount@ = 1                  |
--- > |         | @depth@ ≥ 1            |                                   |
--- > |         | @arrayLayers@ = 1      |                                   |
--- > |         | @samples@ = 1          |                                   |
--- > +---------+------------------------+-----------------------------------+
--- >
--- > Image and image view parameter compatibility requirements
+-- If @image@ was created with the
+-- @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ flag, @format@ /must/
+-- be /compatible/ with the image’s format as described above, or /must/ be
+-- an uncompressed format in which case it /must/ be /size-compatible/ with
+-- the image’s format, as defined for [copying data between
+-- images](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies-images-format-size-compatibility)
+-- In this case the resulting image view’s texel dimensions equal the
+-- dimensions of the selected mip level divided by the compressed texel
+-- block size and rounded up.
 --
+-- If the image view is to be used with a sampler which supports [sampler
+-- Y’CBCR
+-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion),
+-- an /identically defined object/ of type
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversion'
+-- to that used to create the sampler /must/ be passed to
+-- 'vkCreateImageView' in a
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo'
+-- added to the @pNext@ chain of 'VkImageViewCreateInfo'.
+--
+-- If the image has a
+-- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+-- @format@ and @subresourceRange.aspectMask@ is
+-- @VK_IMAGE_ASPECT_COLOR_BIT@, @format@ /must/ be identical to the image
+-- @format@, and the sampler to be used with the image view /must/ enable
+-- [sampler Y’CBCR
+-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion).
+--
+-- If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ and
+-- the image has a
+-- [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+-- @format@, and if @subresourceRange.aspectMask@ is
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@, @format@ /must/ be
+-- [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+-- with the corresponding plane of the image, and the sampler to be used
+-- with the image view /must/ not enable [sampler Y’CBCR
+-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion).
+-- The @width@ and @height@ of the single-plane image view /must/ be
+-- derived from the multi-planar image’s dimensions in the manner listed
+-- for [plane
+-- compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+-- for the plane.
+--
+-- Any view of an image plane will have the same mapping between texel
+-- coordinates and memory locations as used by the channels of the color
+-- aspect, subject to the formulae relating texel coordinates to
+-- lower-resolution planes as described in [Chroma
+-- Reconstruction](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction).
+-- That is, if an R or B plane has a reduced resolution relative to the G
+-- plane of the multi-planar image, the image view operates using the
+-- (/uplane/, /vplane/) unnormalized coordinates of the reduced-resolution
+-- plane, and these coordinates access the same memory locations as the
+-- (/ucolor/, /vcolor/) unnormalized coordinates of the color aspect for
+-- which chroma reconstruction operations operate on the same (/uplane/,
+-- /vplane/) or (/iplane/, /jplane/) coordinates.
+--
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | Dim,     | Image parameters                                 | View parameters                   |
+-- | Arrayed, |                                                  |                                   |
+-- | MS       |                                                  |                                   |
+-- +==========+==================================================+===================================+
+-- |          | @imageType@ = ci.@imageType@                     | @baseArrayLayer@, @layerCount@,   |
+-- |          | @width@ = ci.@extent.width@                      | and @levelCount@ are members of   |
+-- |          | @height@ = ci.@extent.height@                    | the @subresourceRange@ member.    |
+-- |          | @depth@ = ci.@extent.depth@                      |                                   |
+-- |          | @arrayLayers@ = ci.@arrayLayers@                 |                                   |
+-- |          | @samples@ = ci.@samples@                         |                                   |
+-- |          | @flags@ = ci.@flags@                             |                                   |
+-- |          | where ci is the                                  |                                   |
+-- |          | 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' |                                   |
+-- |          | used to create @image@.                          |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __1D, 0, | @imageType@ = @VK_IMAGE_TYPE_1D@                 | @viewType@ =                      |
+-- | 0__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_1D@           |
+-- |          | @height@ = 1                                     | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ = 1                  |
+-- |          | @arrayLayers@ ≥ 1                                |                                   |
+-- |          | @samples@ = 1                                    |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __1D, 1, | @imageType@ = @VK_IMAGE_TYPE_1D@                 | @viewType@ =                      |
+-- | 0__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_1D_ARRAY@     |
+-- |          | @height@ = 1                                     | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ ≥ 1                  |
+-- |          | @arrayLayers@ ≥ 1                                |                                   |
+-- |          | @samples@ = 1                                    |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __2D, 0, | @imageType@ = @VK_IMAGE_TYPE_2D@                 | @viewType@ =                      |
+-- | 0__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_2D@           |
+-- |          | @height@ ≥ 1                                     | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ = 1                  |
+-- |          | @arrayLayers@ ≥ 1                                |                                   |
+-- |          | @samples@ = 1                                    |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __2D, 1, | @imageType@ = @VK_IMAGE_TYPE_2D@                 | @viewType@ =                      |
+-- | 0__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@     |
+-- |          | @height@ ≥ 1                                     | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ ≥ 1                  |
+-- |          | @arrayLayers@ ≥ 1                                |                                   |
+-- |          | @samples@ = 1                                    |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __2D, 0, | @imageType@ = @VK_IMAGE_TYPE_2D@                 | @viewType@ =                      |
+-- | 1__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_2D@           |
+-- |          | @height@ ≥ 1                                     | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ = 1                  |
+-- |          | @arrayLayers@ ≥ 1                                |                                   |
+-- |          | @samples@ > 1                                    |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __2D, 1, | @imageType@ = @VK_IMAGE_TYPE_2D@                 | @viewType@ =                      |
+-- | 1__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@     |
+-- |          | @height@ ≥ 1                                     | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ ≥ 1                  |
+-- |          | @arrayLayers@ ≥ 1                                |                                   |
+-- |          | @samples@ > 1                                    |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __CUBE,  | @imageType@ = @VK_IMAGE_TYPE_2D@                 | @viewType@ =                      |
+-- | 0, 0__   | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_CUBE@         |
+-- |          | @height@ = @width@                               | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ = 6                  |
+-- |          | @arrayLayers@ ≥ 6                                |                                   |
+-- |          | @samples@ = 1                                    |                                   |
+-- |          | @flags@ includes                                 |                                   |
+-- |          | @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@            |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __CUBE,  | @imageType@ = @VK_IMAGE_TYPE_2D@                 | @viewType@ =                      |
+-- | 1, 0__   | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@   |
+-- |          | @height@ = width                                 | @baseArrayLayer@ ≥ 0              |
+-- |          | @depth@ = 1                                      | @layerCount@ = 6 × /N/, /N/ ≥ 1   |
+-- |          | /N/ ≥ 1                                          |                                   |
+-- |          | @arrayLayers@ ≥ 6 × /N/                          |                                   |
+-- |          | @samples@ = 1                                    |                                   |
+-- |          | @flags@ includes                                 |                                   |
+-- |          | @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@            |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __3D, 0, | @imageType@ = @VK_IMAGE_TYPE_3D@                 | @viewType@ =                      |
+-- | 0__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_3D@           |
+-- |          | @height@ ≥ 1                                     | @baseArrayLayer@ = 0              |
+-- |          | @depth@ ≥ 1                                      | @layerCount@ = 1                  |
+-- |          | @arrayLayers@ = 1                                |                                   |
+-- |          | @samples@ = 1                                    |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __3D, 0, | @imageType@ = @VK_IMAGE_TYPE_3D@                 | @viewType@ =                      |
+-- | 0__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_2D@           |
+-- |          | @height@ ≥ 1                                     | @levelCount@ = 1                  |
+-- |          | @depth@ ≥ 1                                      | @baseArrayLayer@ ≥ 0              |
+-- |          | @arrayLayers@ = 1                                | @layerCount@ = 1                  |
+-- |          | @samples@ = 1                                    |                                   |
+-- |          | @flags@ includes                                 |                                   |
+-- |          | @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@        |                                   |
+-- |          | @flags@ does not include                         |                                   |
+-- |          | @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@,            |                                   |
+-- |          | @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@, and      |                                   |
+-- |          | @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@             |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+-- | __3D, 0, | @imageType@ = @VK_IMAGE_TYPE_3D@                 | @viewType@ =                      |
+-- | 0__      | @width@ ≥ 1                                      | @VK_IMAGE_VIEW_TYPE_2D_ARRAY@     |
+-- |          | @height@ ≥ 1                                     | @levelCount@ = 1                  |
+-- |          | @depth@ ≥ 1                                      | @baseArrayLayer@ ≥ 0              |
+-- |          | @arrayLayers@ = 1                                | @layerCount@ ≥ 1                  |
+-- |          | @samples@ = 1                                    |                                   |
+-- |          | @flags@ includes                                 |                                   |
+-- |          | @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@        |                                   |
+-- |          | @flags@ does not include                         |                                   |
+-- |          | @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@,            |                                   |
+-- |          | @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@, and      |                                   |
+-- |          | @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@             |                                   |
+-- +----------+--------------------------------------------------+-----------------------------------+
+--
+-- Image and image view parameter compatibility requirements
+--
 -- == Valid Usage
 --
 -- -   If @image@ was not created with
 --     @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@ then @viewType@ /must/ not be
 --     @VK_IMAGE_VIEW_TYPE_CUBE@ or @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
 --
--- -   If the
---     <{html_spec_relative}#features-features-imageCubeArray image cubemap arrays>
+-- -   If the [image cubemap
+--     arrays](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-imageCubeArray)
 --     feature is not enabled, @viewType@ /must/ not be
 --     @VK_IMAGE_VIEW_TYPE_CUBE_ARRAY@
 --
+-- -   If @image@ was created with @VK_IMAGE_TYPE_3D@ but without
+--     @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set then @viewType@ /must/
+--     not be @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@
+--
 -- -   If @image@ was created with @VK_IMAGE_TILING_LINEAR@, @format@
 --     /must/ be format that has at least one supported feature bit present
 --     in the value of @VkFormatProperties@::@linearTilingFeatures@
@@ -804,33 +898,114 @@
 --     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
 --     created
 --
--- -   @subresourceRange.baseArrayLayer@ /must/ be less than the
+-- -   If @image@ is not a 3D image created with
+--     @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, or @viewType@ is not
+--     @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@,
+--     @subresourceRange@::@baseArrayLayer@ /must/ be less than the
 --     @arrayLayers@ specified in
 --     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
 --     created
 --
--- -   If @subresourceRange.layerCount@ is not @VK_REMAINING_ARRAY_LAYERS@,
---     @subresourceRange.baseArrayLayer@ + @subresourceRange.layerCount@
---     /must/ be less than or equal to the @arrayLayers@ specified in
+-- -   If @subresourceRange@::@layerCount@ is not
+--     @VK_REMAINING_ARRAY_LAYERS@, @image@ is not a 3D image created with
+--     @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, or @viewType@ is not
+--     @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@,
+--     @subresourceRange@::@layerCount@ /must/ be non-zero and
+--     @subresourceRange@::@baseArrayLayer@ +
+--     @subresourceRange@::@layerCount@ /must/ be less than or equal to the
+--     @arrayLayers@ specified in
 --     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
 --     created
 --
+-- -   If @image@ is a 3D image created with
+--     @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, and @viewType@ is
+--     @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@,
+--     @subresourceRange@::@baseArrayLayer@ /must/ be less than the
+--     @extent.depth@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   If @subresourceRange@::@layerCount@ is not
+--     @VK_REMAINING_ARRAY_LAYERS@, @image@ is a 3D image created with
+--     @VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT@ set, and @viewType@ is
+--     @VK_IMAGE_VIEW_TYPE_2D@ or @VK_IMAGE_VIEW_TYPE_2D_ARRAY@,
+--     @subresourceRange@::@layerCount@ /must/ be non-zero and
+--     @subresourceRange@::@baseArrayLayer@ +
+--     @subresourceRange@::@layerCount@ /must/ be less than or equal to the
+--     @extent.depth@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
 -- -   If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@
 --     flag, @format@ /must/ be compatible with the @format@ used to create
---     @image@, as defined in
---     <{html_spec_relative}#features-formats-compatibility-classes Format Compatibility Classes>
+--     @image@, as defined in [Format Compatibility
+--     Classes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatibility-classes)
 --
+-- -   If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@
+--     flag, but without the
+--     @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ flag, and if the
+--     @format@ of the @image@ is not a
+--     [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     format, @format@ /must/ be compatible with the @format@ used to
+--     create @image@, as defined in [Format Compatibility
+--     Classes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatibility-classes)
+--
+-- -   If @image@ was created with the
+--     @VK_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
+--     @VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT@ flag, the
+--     @levelCount@ and @layerCount@ members of @subresourceRange@ /must/
+--     both be @1@.
+--
+-- -   If a @VkImageFormatListCreateInfoKHR@ structure was included in the
+--     @pNext@ chain of the @VkImageCreateInfo@ struct used when creating
+--     @image@ and the @viewFormatCount@ field of
+--     @VkImageFormatListCreateInfoKHR@ is not zero then @format@ /must/ be
+--     one of the formats in
+--     @VkImageFormatListCreateInfoKHR@::@pViewFormats@.
+--
+-- -   If @image@ was created with the @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@
+--     flag, if the @format@ of the @image@ is a
+--     [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     format, and if @subresourceRange.aspectMask@ is one of
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@, then @format@ /must/ be compatible
+--     with the 'Graphics.Vulkan.Core10.Core.VkFormat' for the plane of the
+--     @image@ @format@ indicated by @subresourceRange.aspectMask@, as
+--     defined in
+--     [{html_spec_relative}#features-formats-compatible-planes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-compatible-planes)
+--
 -- -   If @image@ was not created with the
---     @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ flag, @format@ /must/ be
---     identical to the @format@ used to create @image@
+--     @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@ flag, or if the @format@ of the
+--     @image@ is a
+--     [multi-planar](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-formats-requiring-sampler-ycbcr-conversion)
+--     format and if @subresourceRange.aspectMask@ is
+--     @VK_IMAGE_ASPECT_COLOR_BIT@, @format@ /must/ be identical to the
+--     @format@ used to create @image@
 --
 -- -   If @image@ is non-sparse then it /must/ be bound completely and
 --     contiguously to a single @VkDeviceMemory@ object
 --
 -- -   @subresourceRange@ and @viewType@ /must/ be compatible with the
---     image, as described in the
---     <{html_spec_relative}#resources-image-views-compatibility compatibility table>
+--     image, as described in the [compatibility
+--     table](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views-compatibility)
 --
+-- -   If @image@ has an [external
+--     format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats):
+--
+--     -   @format@ must be @VK_FORMAT_UNDEFINED@
+--
+--     -   The @pNext@ chain must contain an instance of
+--         'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo'
+--         with a @conversion@ object created with the same external format
+--         as @image@
+--
+--     -   All members of @components@ must be
+--         @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO@
@@ -859,28 +1034,32 @@
 --     structure
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkComponentMapping', 'Graphics.Vulkan.Core10.Core.VkFormat',
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
 -- 'VkImageSubresourceRange', 'VkImageViewCreateFlags', 'VkImageViewType',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateImageView'
 data VkImageViewCreateInfo = VkImageViewCreateInfo
-  { -- No documentation found for Nested "VkImageViewCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkImageViewCreateFlags
-  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkImage"
+  , -- | @image@ is a @VkImage@ on which the view will be created.
   vkImage :: VkImage
-  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkViewType"
+  , -- | @viewType@ is an 'VkImageViewType' value specifying the type of the
+  -- image view.
   vkViewType :: VkImageViewType
-  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkFormat"
+  , -- | @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' describing the
+  -- format and type used to interpret data elements in the image.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkComponents"
+  , -- | @components@ is a 'VkComponentMapping' specifies a remapping of color
+  -- components (or of depth or stencil components after they have been
+  -- converted into color components).
   vkComponents :: VkComponentMapping
-  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkSubresourceRange"
+  , -- | @subresourceRange@ is a 'VkImageSubresourceRange' selecting the set of
+  -- mipmap levels and array layers to be accessible to the view.
   vkSubresourceRange :: VkImageSubresourceRange
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/LayerDiscovery.hs b/src/Graphics/Vulkan/Core10/LayerDiscovery.hs
--- a/src/Graphics/Vulkan/Core10/LayerDiscovery.hs
+++ b/src/Graphics/Vulkan/Core10/LayerDiscovery.hs
@@ -55,7 +55,6 @@
 -- global layer properties
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @pPropertyCount@ is a pointer to an integer related to the number of
 --     layer properties available or queried, as described below.
@@ -64,7 +63,6 @@
 --     'VkLayerProperties' structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pProperties@ is @NULL@, then the number of layer properties
 -- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
@@ -96,18 +94,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkLayerProperties'
 foreign import ccall "vkEnumerateInstanceLayerProperties" vkEnumerateInstanceLayerProperties :: ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkLayerProperties) -> IO VkResult
@@ -115,7 +112,6 @@
 -- physical device layers
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @pPropertyCount@ is a pointer to an integer related to the number of
 --     layer properties available or queried.
@@ -124,7 +120,6 @@
 --     'VkLayerProperties' structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pProperties@ is @NULL@, then the number of layer properties
 -- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
@@ -155,39 +150,42 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkLayerProperties',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkEnumerateDeviceLayerProperties" vkEnumerateDeviceLayerProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkLayerProperties) -> IO VkResult
 -- | VkLayerProperties - Structure specifying layer properties
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'vkEnumerateDeviceLayerProperties', 'vkEnumerateInstanceLayerProperties'
 data VkLayerProperties = VkLayerProperties
-  { -- No documentation found for Nested "VkLayerProperties" "vkLayerName"
+  { -- | @layerName@ is a null-terminated UTF-8 string specifying the name of the
+  -- layer. Use this name in the @ppEnabledLayerNames@ array passed in the
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstanceCreateInfo'
+  -- structure to enable this layer for an instance.
   vkLayerName :: Vector VK_MAX_EXTENSION_NAME_SIZE CChar
-  , -- No documentation found for Nested "VkLayerProperties" "vkSpecVersion"
+  , -- | @specVersion@ is the Vulkan version the layer was written to, encoded as
+  -- described in the [API Version Numbers and
+  -- Semantics](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-versionnum)
+  -- section.
   vkSpecVersion :: Word32
-  , -- No documentation found for Nested "VkLayerProperties" "vkImplementationVersion"
+  , -- | @implementationVersion@ is the version of this layer. It is an integer,
+  -- increasing with backward compatible changes.
   vkImplementationVersion :: Word32
-  , -- No documentation found for Nested "VkLayerProperties" "vkDescription"
+  , -- | @description@ is a null-terminated UTF-8 string providing additional
+  -- details that /can/ be used by the application to identify the layer.
   vkDescription :: Vector VK_MAX_DESCRIPTION_SIZE CChar
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/Memory.hs b/src/Graphics/Vulkan/Core10/Memory.hs
--- a/src/Graphics/Vulkan/Core10/Memory.hs
+++ b/src/Graphics/Vulkan/Core10/Memory.hs
@@ -73,13 +73,11 @@
 -- | VkMemoryMapFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkMemoryMapFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'vkMapMemory'
 newtype VkMemoryMapFlags = VkMemoryMapFlags VkFlags
@@ -104,11 +102,7 @@
 data VkDeviceMemory_T
 -- | VkDeviceMemory - Opaque handle to a device memory object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindImageMemoryInfo',
@@ -130,7 +124,6 @@
 -- | vkAllocateMemory - Allocate device memory
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory.
 --
@@ -141,13 +134,14 @@
 --     implementation.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pMemory@ is a pointer to a @VkDeviceMemory@ handle in which
 --     information about the allocated memory is returned.
 --
 -- = Description
--- #_description#
 --
 -- Allocations returned by @vkAllocateMemory@ are guaranteed to meet any
 -- alignment requirement of the implementation. For example, if an
@@ -166,7 +160,7 @@
 -- 'vkAllocateMemory' would cause the total number of allocations to exceed
 -- these limits, such a call will fail and /must/ return
 -- @VK_ERROR_TOO_MANY_OBJECTS@. The
--- <{html_spec_relative}#features-limits-maxMemoryAllocationCount maxMemoryAllocationCount>
+-- [@maxMemoryAllocationCount@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxMemoryAllocationCount)
 -- feature describes the number of allocations that /can/ exist
 -- simultaneously before encountering these internal limits.
 --
@@ -174,7 +168,9 @@
 -- allocation. For example, certain systems /may/ fail to create
 -- allocations with a size greater than or equal to 4GB. Such a limit is
 -- implementation-dependent, and if such a failure occurs then the error
--- @VK_ERROR_OUT_OF_DEVICE_MEMORY@ /must/ be returned.
+-- @VK_ERROR_OUT_OF_DEVICE_MEMORY@ /must/ be returned. This limit is
+-- advertised in
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.VkPhysicalDeviceMaintenance3Properties'::@maxMemoryAllocationSize@.
 --
 -- == Valid Usage
 --
@@ -208,10 +204,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -221,7 +217,6 @@
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -230,17 +225,17 @@
 -- | vkFreeMemory - Free device memory
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory.
 --
 -- -   @memory@ is the @VkDeviceMemory@ object to be freed.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- = Description
--- #_description#
 --
 -- Before freeing a memory object, an application /must/ ensure the memory
 -- object is no longer in use by the device—​for example by command buffers
@@ -254,8 +249,8 @@
 -- the heap from which it was allocated.
 --
 -- How memory objects are bound to Images and Buffers is described in
--- detail in the
--- <{html_spec_relative}#resources-association Resource Memory Association>
+-- detail in the [Resource Memory
+-- Association](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-association)
 -- section.
 --
 -- If a memory object is mapped at the time it is freed, it is implicitly
@@ -264,10 +259,10 @@
 -- __Note__
 --
 -- As described
--- <{html_spec_relative}#memory-device-unmap-does-not-flush below>, host
--- writes are not implicitly flushed when the memory object is unmapped,
--- but the implementation /must/ guarantee that writes that have not been
--- flushed do not affect any other memory.
+-- [below](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-unmap-does-not-flush),
+-- host writes are not implicitly flushed when the memory object is
+-- unmapped, but the implementation /must/ guarantee that writes that have
+-- not been flushed do not affect any other memory.
 --
 -- == Valid Usage
 --
@@ -293,7 +288,6 @@
 -- -   Host access to @memory@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkDeviceMemory'
@@ -301,7 +295,6 @@
 -- | vkMapMemory - Map a memory object into application address space
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory.
 --
@@ -321,7 +314,6 @@
 --     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@minMemoryMapAlignment@.
 --
 -- = Description
--- #_description#
 --
 -- It is an application error to call @vkMapMemory@ on a memory object that
 -- is already mapped.
@@ -342,8 +334,8 @@
 -- range has completed before the host reads from or writes to that range,
 -- and that any previously submitted command that reads from that range has
 -- completed before the host writes to that region (see
--- <{html_spec_relative}#synchronization-submission-host-writes here> for
--- details on fulfilling such a guarantee). If the device memory was
+-- [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-host-writes)
+-- for details on fulfilling such a guarantee). If the device memory was
 -- allocated without the @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ set, these
 -- guarantees /must/ be made for an extended range: the application /must/
 -- round down the start of the range to the nearest multiple of
@@ -359,7 +351,8 @@
 --
 -- It is important for the application developer to become meticulously
 -- familiar with all of the mechanisms described in the chapter on
--- <{html_spec_relative}#synchronization Synchronization and Cache Control>
+-- [Synchronization and Cache
+-- Control](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization)
 -- as they are crucial to maintaining memory access ordering.
 --
 -- == Valid Usage
@@ -377,6 +370,8 @@
 -- -   @memory@ /must/ have been created with a memory type that reports
 --     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@
 --
+-- -   @memory@ /must/ not have been allocated with multiple instances.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -396,10 +391,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -407,7 +402,6 @@
 --     -   @VK_ERROR_MEMORY_MAP_FAILED@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkDeviceMemory', @VkDeviceSize@, 'VkMemoryMapFlags'
@@ -415,15 +409,11 @@
 -- | vkUnmapMemory - Unmap a previously mapped memory object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory.
 --
 -- -   @memory@ is the memory object to be unmapped.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @memory@ /must/ be currently mapped
@@ -442,14 +432,12 @@
 -- -   Host access to @memory@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkDeviceMemory'
 foreign import ccall "vkUnmapMemory" vkUnmapMemory :: ("device" ::: VkDevice) -> ("memory" ::: VkDeviceMemory) -> IO ()
 -- | vkFlushMappedMemoryRanges - Flush mapped memory ranges
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory ranges.
 --
@@ -459,14 +447,13 @@
 --     structures describing the memory ranges to flush.
 --
 -- = Description
--- #_description#
 --
 -- @vkFlushMappedMemoryRanges@ guarantees that host writes to the memory
 -- ranges described by @pMemoryRanges@ /can/ be made available to device
--- access, via
--- <{html_spec_relative}#synchronization-dependencies-available-and-visible availability operations>
--- from the @VK_ACCESS_HOST_WRITE_BIT@
--- <{html_spec_relative}#synchronization-access-types access type>.
+-- access, via [availability
+-- operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible)
+-- from the @VK_ACCESS_HOST_WRITE_BIT@ [access
+-- type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types).
 --
 -- Within each range described by @pMemoryRanges@, each set of
 -- @nonCoherentAtomSize@ bytes in that range is flushed if any byte in that
@@ -499,16 +486,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkMappedMemoryRange'
@@ -517,7 +503,6 @@
 -- objects
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory ranges.
 --
@@ -527,15 +512,14 @@
 --     structures describing the memory ranges to invalidate.
 --
 -- = Description
--- #_description#
 --
 -- @vkInvalidateMappedMemoryRanges@ guarantees that device writes to the
 -- memory ranges described by @pMemoryRanges@, which have been made visible
--- to the @VK_ACCESS_HOST_WRITE_BIT@ and @VK_ACCESS_HOST_READ_BIT@
--- <{html_spec_relative}#synchronization-access-types access types>, are
--- made visible to the host. If a range of non-coherent memory is written
--- by the host and then invalidated without first being flushed, its
--- contents are undefined.
+-- to the @VK_ACCESS_HOST_WRITE_BIT@ and @VK_ACCESS_HOST_READ_BIT@ [access
+-- types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types),
+-- are made visible to the host. If a range of non-coherent memory is
+-- written by the host and then invalidated without first being flushed,
+-- its contents are undefined.
 --
 -- Within each range described by @pMemoryRanges@, each set of
 -- @nonCoherentAtomSize@ bytes in that range is invalidated if any byte in
@@ -559,16 +543,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkMappedMemoryRange'
@@ -577,7 +560,6 @@
 -- VkDeviceMemory
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory.
 --
@@ -588,7 +570,6 @@
 --     success.
 --
 -- = Description
--- #_description#
 --
 -- The implementation /may/ update the commitment at any time, and the
 -- value returned by this query /may/ be out of date.
@@ -615,7 +596,6 @@
 --     @device@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkDeviceMemory', @VkDeviceSize@
@@ -624,12 +604,203 @@
 -- allocation
 --
 -- = Description
--- #_description#
 --
+-- An instance of the 'VkMemoryAllocateInfo' structure defines a memory
+-- import operation if the @pNext@ chain contains an instance of one of the
+-- following structures: *
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkImportMemoryWin32HandleInfoKHR'
+-- with non-zero @handleType@ value *
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.VkImportMemoryFdInfoKHR'
+-- with a non-zero @handleType@ value *
+-- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.VkImportMemoryHostPointerInfoEXT'
+-- with a non-zero @handleType@ value *
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkImportAndroidHardwareBufferInfoANDROID'
+-- with a non-@NULL@ @buffer@ value
+--
+-- Importing memory /must/ not modify the content of the memory.
+-- Implementations /must/ ensure that importing memory does not enable the
+-- importing Vulkan instance to access any memory or resources in other
+-- Vulkan instances other than that corresponding to the memory object
+-- imported. Implementations /must/ also ensure accessing imported memory
+-- which has not been initialized does not allow the importing Vulkan
+-- instance to obtain data from the exporting Vulkan instance or
+-- vice-versa.
+--
+-- __Note__
+--
+-- How exported and imported memory is isolated is left to the
+-- implementation, but applications should be aware that such isolation
+-- /may/ prevent implementations from placing multiple exportable memory
+-- objects in the same physical or virtual page. Hence, applications
+-- /should/ avoid creating many small external memory objects whenever
+-- possible.
+--
+-- When performing a memory import operation, it is the responsibility of
+-- the application to ensure the external handles meet all valid usage
+-- requirements. However, implementations /must/ perform sufficient
+-- validation of external handles to ensure that the operation results in a
+-- valid memory object which will not cause program termination, device
+-- loss, queue stalls, or corruption of other resources when used as
+-- allowed according to its allocation parameters. If the external handle
+-- provided does not meet these requirements, the implementation /must/
+-- fail the memory import operation with the error code
+-- @VK_ERROR_INVALID_EXTERNAL_HANDLE@.
+--
 -- == Valid Usage
 --
--- -   @allocationSize@ /must/ be greater than @0@
+-- -   If the @pNext@ chain contains an instance of
+--     @VkExportMemoryAllocateInfo@, and any of the handle types specified
+--     in @VkExportMemoryAllocateInfo@::@handleTypes@ require a dedicated
+--     allocation, as reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'
+--     in
+--     @VkExternalImageFormatProperties@::@externalMemoryProperties@::@externalMemoryFeatures@
+--     or
+--     @VkExternalBufferProperties@::@externalMemoryProperties@::@externalMemoryFeatures@,
+--     the @pNext@ chain must contain an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV'
+--     with either its @image@ or @buffer@ field set to a value other than
+--     @VK_NULL_HANDLE@.
 --
+-- -   If the @pNext@ chain contains an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExportMemoryAllocateInfo',
+--     it /must/ not contain an instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExportMemoryAllocateInfoNV'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.VkExportMemoryWin32HandleInfoNV'.
+--
+-- -   If the @pNext@ chain contains an instance of
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkImportMemoryWin32HandleInfoKHR',
+--     it /must/ not contain an instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.VkImportMemoryWin32HandleInfoNV'.
+--
+-- -   If the parameters define an import operation, the external handle
+--     specified was created by the Vulkan API, and the external handle
+--     type is @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR@, then the
+--     values of @allocationSize@ and @memoryTypeIndex@ /must/ match those
+--     specified when the memory object 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
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkMemoryAllocateFlagsInfo'
+--     /must/ match that specified when the memory object 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
+--     'vkAllocateMemory' /must/ match the list of physical devices that
+--     comprise the logical device on which the memory 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
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandlePropertiesKHR'.
+--
+-- -   If the parameters define an import operation, the external handle
+--     was created by the Vulkan API, and the external handle type is
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR@ or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR@, then the
+--     values of @allocationSize@ and @memoryTypeIndex@ /must/ match those
+--     specified when the memory object being imported was created.
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT@, or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@,
+--     @allocationSize@ /must/ match the size reported in the memory
+--     requirements of the @image@ or @buffer@ member of the instance of
+--     @VkDedicatedAllocationMemoryAllocateInfoNV@ included in the @pNext@
+--     chain.
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@,
+--     @allocationSize@ /must/ match the size specified when creating the
+--     Direct3D 12 heap from which the external handle 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
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdPropertiesKHR'.
+--
+-- -   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
+--     'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.vkGetMemoryHostPointerPropertiesEXT'
+--
+-- -   If the parameters define an import operation and the external handle
+--     is a host pointer, @allocationSize@ /must/ be an integer multiple of
+--     @VkPhysicalDeviceExternalMemoryHostPropertiesEXT@::@minImportedHostPointerAlignment@
+--
+-- -   If the parameters define an import operation and the external handle
+--     type is
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BIT_ANDROID@:
+--
+--     -   @allocationSize@ /must/ be the size returned by
+--         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetAndroidHardwareBufferPropertiesANDROID'
+--         for the Android hardware buffer
+--
+--     -   If the @pNext@ chain doesn’t contain an instance of
+--         'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--         or @VkMemoryDedicatedAllocateInfo@::@image@ is
+--         'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', the Android
+--         hardware buffer /must/ have a format of
+--         @AHARDWAREBUFFER_FORMAT_BLOB@ and a usage that includes
+--         @AHARDWAREBUFFER_USAGE_GPU_DATA_BUFFER@
+--
+--     -   @memoryTypeIndex@ /must/ be one of those returned by
+--         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetAndroidHardwareBufferPropertiesANDROID'
+--         for the Android hardware buffer
+--
+-- -   If the parameters do not define an import operation, and the @pNext@
+--     chain contains an instance of @VkExportMemoryAllocateInfo@ with
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@
+--     included in its @handleTypes@ member, and the @pNext@ contains an
+--     instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--     with @image@ not equal to
+--     'Graphics.Vulkan.Core10.Constants.VK_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 an
+--     instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--     with @image@ that is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE':
+--
+--     -   The Android hardware buffer’s usage /must/ include at least one
+--         of @AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT@ or
+--         @AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE@
+--
+--     -   The @image@’s format /must/ be @VK_FORMAT_UNDEFINED@ or the
+--         format returned by
+--         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.vkGetAndroidHardwareBufferPropertiesANDROID'
+--         in
+--         'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID'::@format@
+--         for the Android hardware buffer.
+--
+--     -   The image’s and Android hardware buffer’s width, height, and
+--         array layer dimensions /must/ be the same
+--
+--     -   If the Android hardware buffer’s usage includes
+--         @AHARDWAREBUFFER_USAGE_GPU_MIPMAP_COMPLETE@, the image must have
+--         ⌊log2(max(@width@, @height@))⌋ + 1 mip levels, otherwise it must
+--         have exactly @1@ mip level.
+--
+--     -   Each bit set in the image’s usage /must/ be listed in
+--         [AHardwareBuffer Usage
+--         Equivalence](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer-usage),
+--         and if there is a corresponding @AHARDWAREBUFFER_USAGE@ bit
+--         listed that bit /must/ be included in the Android hardware
+--         buffer’s usage
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO@
@@ -654,18 +825,20 @@
 -- -   Each @sType@ member in the @pNext@ chain /must/ be unique
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkDeviceSize@, 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkAllocateMemory'
 data VkMemoryAllocateInfo = VkMemoryAllocateInfo
-  { -- No documentation found for Nested "VkMemoryAllocateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryAllocateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryAllocateInfo" "vkAllocationSize"
+  , -- | @allocationSize@ is the size of the allocation in bytes
   vkAllocationSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkMemoryAllocateInfo" "vkMemoryTypeIndex"
+  , -- | @memoryTypeIndex@ is an index identifying a memory type from the
+  -- @memoryTypes@ array of the
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceMemoryProperties'
+  -- structure
   vkMemoryTypeIndex :: Word32
   }
   deriving (Eq, Show)
@@ -683,9 +856,6 @@
                 *> poke (ptr `plusPtr` 24) (vkMemoryTypeIndex (poked :: VkMemoryAllocateInfo))
 -- | VkMappedMemoryRange - Structure specifying a mapped memory range
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @memory@ /must/ be currently mapped
@@ -719,21 +889,22 @@
 -- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceMemory', @VkDeviceSize@,
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkFlushMappedMemoryRanges', 'vkInvalidateMappedMemoryRanges'
 data VkMappedMemoryRange = VkMappedMemoryRange
-  { -- No documentation found for Nested "VkMappedMemoryRange" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMappedMemoryRange" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMappedMemoryRange" "vkMemory"
+  , -- | @memory@ is the memory object to which this range belongs.
   vkMemory :: VkDeviceMemory
-  , -- No documentation found for Nested "VkMappedMemoryRange" "vkOffset"
+  , -- | @offset@ is the zero-based byte offset from the beginning of the memory
+  -- object.
   vkOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkMappedMemoryRange" "vkSize"
+  , -- | @size@ is either the size of range, or @VK_WHOLE_SIZE@ to affect the
+  -- range from @offset@ to the end of the current mapping of the allocation.
   vkSize :: VkDeviceSize
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/MemoryManagement.hs b/src/Graphics/Vulkan/Core10/MemoryManagement.hs
--- a/src/Graphics/Vulkan/Core10/MemoryManagement.hs
+++ b/src/Graphics/Vulkan/Core10/MemoryManagement.hs
@@ -46,11 +46,7 @@
 data VkBuffer_T
 -- | VkBuffer - Opaque handle to a buffer object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferMemoryBarrier',
@@ -87,11 +83,7 @@
 data VkImage_T
 -- | VkImage - Opaque handle to a image object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindImageMemoryInfo',
 -- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV',
@@ -121,7 +113,6 @@
 -- specified Vulkan object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the buffer.
 --
@@ -131,9 +122,6 @@
 --     'VkMemoryRequirements' structure in which the memory requirements of
 --     the buffer object are returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -147,7 +135,6 @@
 --     @device@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBuffer', 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkMemoryRequirements'
@@ -155,7 +142,6 @@
 -- | vkBindBufferMemory - Bind device memory to a buffer object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the buffer and memory.
 --
@@ -170,8 +156,13 @@
 --     @memoryOffset@ bytes, will be bound to the specified buffer.
 --
 -- = Description
--- #_description#
 --
+-- @vkBindBufferMemory@ is equivalent to passing the same parameters
+-- through
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo'
+-- to
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindBufferMemory2'.
+--
 -- == Valid Usage
 --
 -- -   @buffer@ /must/ not already be backed by a memory object
@@ -210,6 +201,30 @@
 --     from a call to @vkGetBufferMemoryRequirements@ with @buffer@ /must/
 --     be less than or equal to the size of @memory@ minus @memoryOffset@
 --
+-- -   If @buffer@ requires a dedicated allocation(as reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2'
+--     in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @buffer@), @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@buffer@
+--     equal to @buffer@
+--
+-- -   If the @VkMemoryAllocateInfo@ provided when @memory@ was allocated
+--     included an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--     in its @pNext@ chain, and
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@buffer@
+--     was not @VK_NULL_HANDLE@, then @buffer@ /must/ equal
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@buffer@,
+--     and @memoryOffset@ /must/ be zero.
+--
+-- -   If @buffer@ was created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@
+--     equal to @VK_TRUE@, @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV'::@buffer@
+--     equal to a buffer handle created with identical creation parameters
+--     to @buffer@ and @memoryOffset@ /must/ be zero
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -230,16 +245,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBuffer', 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory', @VkDeviceSize@
@@ -248,7 +262,6 @@
 -- specified Vulkan object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the image.
 --
@@ -258,9 +271,11 @@
 --     'VkMemoryRequirements' structure in which the memory requirements of
 --     the image object are returned.
 --
--- = Description
--- #_description#
+-- == Valid Usage
 --
+-- -   @image@ /must/ not have been created with the
+--     @VK_IMAGE_CREATE_DISJOINT_BIT@ flag set
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -274,7 +289,6 @@
 --     @device@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkImage',
 -- 'VkMemoryRequirements'
@@ -282,7 +296,6 @@
 -- | vkBindImageMemory - Bind device memory to an image object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the image and memory.
 --
@@ -297,10 +310,17 @@
 --     @memoryOffset@ bytes, will be bound to the specified image.
 --
 -- = Description
--- #_description#
 --
+-- @vkBindImageMemory@ is equivalent to passing the same parameters through
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindImageMemoryInfo'
+-- to
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2'.
+--
 -- == Valid Usage
 --
+-- -   @image@ /must/ not have been created with the
+--     @VK_IMAGE_CREATE_DISJOINT_BIT@ set.
+--
 -- -   @image@ /must/ not already be backed by a memory object
 --
 -- -   @image@ /must/ not have been created with any sparse memory binding
@@ -321,6 +341,30 @@
 --     from a call to @vkGetImageMemoryRequirements@ with @image@ /must/ be
 --     less than or equal to the size of @memory@ minus @memoryOffset@
 --
+-- -   If @image@ requires a dedicated allocation (as reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @image@), @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@image@
+--     equal to @image@
+--
+-- -   If the @VkMemoryAllocateInfo@ provided when @memory@ was allocated
+--     included an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--     in its @pNext@ chain, and
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@image@
+--     was not @VK_NULL_HANDLE@, then @image@ /must/ equal
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@image@
+--     and @memoryOffset@ /must/ be zero.
+--
+-- -   If @image@ was created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@
+--     equal to @VK_TRUE@, @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV'::@image@
+--     equal to an image handle created with identical creation parameters
+--     to @image@ and @memoryOffset@ /must/ be zero
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -341,16 +385,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory', @VkDeviceSize@,
@@ -358,21 +401,22 @@
 foreign import ccall "vkBindImageMemory" vkBindImageMemory :: ("device" ::: VkDevice) -> ("image" ::: VkImage) -> ("memory" ::: VkDeviceMemory) -> ("memoryOffset" ::: VkDeviceSize) -> IO VkResult
 -- | VkMemoryRequirements - Structure specifying memory requirements
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- @VkDeviceSize@,
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkMemoryRequirements2',
 -- 'vkGetBufferMemoryRequirements', 'vkGetImageMemoryRequirements'
 data VkMemoryRequirements = VkMemoryRequirements
-  { -- No documentation found for Nested "VkMemoryRequirements" "vkSize"
+  { -- | @size@ is the size, in bytes, of the memory allocation /required/ for
+  -- the resource.
   vkSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkMemoryRequirements" "vkAlignment"
+  , -- | @alignment@ is the alignment, in bytes, of the offset within the
+  -- allocation /required/ for the resource.
   vkAlignment :: VkDeviceSize
-  , -- No documentation found for Nested "VkMemoryRequirements" "vkMemoryTypeBits"
+  , -- | @memoryTypeBits@ is a bitmask and contains one bit set for every
+  -- supported memory type for the resource. Bit @i@ is set if and only if
+  -- the memory type @i@ in the @VkPhysicalDeviceMemoryProperties@ structure
+  -- for the physical device is supported for the resource.
   vkMemoryTypeBits :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/Pass.hs b/src/Graphics/Vulkan/Core10/Pass.hs
--- a/src/Graphics/Vulkan/Core10/Pass.hs
+++ b/src/Graphics/Vulkan/Core10/Pass.hs
@@ -131,7 +131,6 @@
 -- at the beginning of a subpass
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentDescription'
 newtype VkAttachmentLoadOp = VkAttachmentLoadOp Int32
@@ -189,7 +188,6 @@
 -- at the end of a subpass
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentDescription'
 newtype VkAttachmentStoreOp = VkAttachmentStoreOp Int32
@@ -235,7 +233,6 @@
 -- command buffer
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateCreateInfo',
 -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkIndirectCommandsLayoutCreateInfoNVX',
@@ -276,13 +273,11 @@
 -- | VkFramebufferCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkFramebufferCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkFramebufferCreateInfo'
 newtype VkFramebufferCreateFlags = VkFramebufferCreateFlags VkFlags
@@ -308,13 +303,11 @@
 -- | VkRenderPassCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkRenderPassCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkRenderPassCreateInfo'
 newtype VkRenderPassCreateFlags = VkRenderPassCreateFlags VkFlags
@@ -341,7 +334,6 @@
 -- participate in a memory dependency
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_ACCESS_INDIRECT_COMMAND_READ_BIT@ specifies read access to an
 --     indirect command structure read as part of an indirect drawing or
@@ -355,57 +347,84 @@
 --     vertex buffer as part of a drawing command, bound by
 --     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindVertexBuffers'.
 --
--- -   @VK_ACCESS_UNIFORM_READ_BIT@ specifies read access to a
---     <{html_spec_relative}#descriptorsets-uniformbuffer uniform buffer>.
+-- -   @VK_ACCESS_UNIFORM_READ_BIT@ specifies read access to a [uniform
+--     buffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformbuffer).
 --
 -- -   @VK_ACCESS_INPUT_ATTACHMENT_READ_BIT@ specifies read access to an
---     <{html_spec_relative}#renderpass input attachment> within a render
---     pass during fragment shading.
+--     [input
+--     attachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass)
+--     within a render pass during fragment shading.
 --
--- -   @VK_ACCESS_SHADER_READ_BIT@ specifies read access to a
---     <{html_spec_relative}#descriptorsets-storagebuffer storage buffer>,
---     <{html_spec_relative}#descriptorsets-uniformtexelbuffer uniform texel buffer>,
---     <{html_spec_relative}#descriptorsets-storagetexelbuffer storage texel buffer>,
---     <{html_spec_relative}#descriptorsets-sampledimage sampled image>, or
---     <{html_spec_relative}#descriptorsets-storageimage storage image>.
+-- -   @VK_ACCESS_SHADER_READ_BIT@ specifies read access to a [storage
+--     buffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebuffer),
+--     [uniform texel
+--     buffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-uniformtexelbuffer),
+--     [storage texel
+--     buffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer),
+--     [sampled
+--     image](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-sampledimage),
+--     or [storage
+--     image](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage).
 --
--- -   @VK_ACCESS_SHADER_WRITE_BIT@ specifies write access to a
---     <{html_spec_relative}#descriptorsets-storagebuffer storage buffer>,
---     <{html_spec_relative}#descriptorsets-storagetexelbuffer storage texel buffer>,
---     or <{html_spec_relative}#descriptorsets-storageimage storage image>.
+-- -   @VK_ACCESS_SHADER_WRITE_BIT@ specifies write access to a [storage
+--     buffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagebuffer),
+--     [storage texel
+--     buffer](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storagetexelbuffer),
+--     or [storage
+--     image](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-storageimage).
 --
 -- -   @VK_ACCESS_COLOR_ATTACHMENT_READ_BIT@ specifies read access to a
---     <{html_spec_relative}#renderpass color attachment>, such as via
---     <{html_spec_relative}#framebuffer-blending blending>,
---     <{html_spec_relative}#framebuffer-logicop logic operations>, or via
---     certain
---     <{html_spec_relative}#renderpass-load-store-ops subpass load operations>.
+--     [color
+--     attachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass),
+--     such as via
+--     [blending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blending),
+--     [logic
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-logicop),
+--     or via certain [subpass load
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops).
+--     It does not include [advanced blend
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced).
 --
+-- -   @VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT@ is similar to
+--     @VK_ACCESS_COLOR_ATTACHMENT_READ_BIT@, but also includes [advanced
+--     blend
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced).
+--
 -- -   @VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT@ specifies write access to a
---     <{html_spec_relative}#renderpass color or resolve attachment> during
---     a <{html_spec_relative}#renderpass render pass> or via certain
---     <{html_spec_relative}#renderpass-load-store-ops subpass load and store operations>.
+--     [color or resolve
+--     attachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass)
+--     during a [render
+--     pass](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass)
+--     or via certain [subpass load and store
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops).
 --
 -- -   @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT@ specifies read access
---     to a <{html_spec_relative}#renderpass depth\/stencil attachment>,
---     via
---     <{html_spec_relative}#fragops-ds-state depth or stencil operations>
---     or via certain
---     <{html_spec_relative}#renderpass-load-store-ops subpass load operations>.
+--     to a [depth\/stencil
+--     attachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass),
+--     via [depth or stencil
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-ds-state)
+--     or via certain [subpass load
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops).
 --
 -- -   @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT@ specifies write
---     access to a
---     <{html_spec_relative}#renderpass depth\/stencil attachment>, via
---     <{html_spec_relative}#fragops-ds-state depth or stencil operations>
---     or via certain
---     <{html_spec_relative}#renderpass-load-store-ops subpass load and store operations>.
+--     access to a [depth\/stencil
+--     attachment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass),
+--     via [depth or stencil
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-ds-state)
+--     or via certain [subpass load and store
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops).
 --
 -- -   @VK_ACCESS_TRANSFER_READ_BIT@ specifies read access to an image or
---     buffer in a <{html_spec_relative}#copies copy> operation.
+--     buffer in a
+--     [copy](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies)
+--     operation.
 --
 -- -   @VK_ACCESS_TRANSFER_WRITE_BIT@ specifies write access to an image or
---     buffer in a <{html_spec_relative}#clears clear> or
---     <{html_spec_relative}#copies copy> operation.
+--     buffer in a
+--     [clear](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears)
+--     or
+--     [copy](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies)
+--     operation.
 --
 -- -   @VK_ACCESS_HOST_READ_BIT@ specifies read access by a host operation.
 --     Accesses of this type are not performed through a resource, but
@@ -431,10 +450,18 @@
 --     destination access mask, makes all available writes visible to all
 --     future write accesses on entities known to the Vulkan device.
 --
+-- -   @VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX@ specifies reads from
+--     @VkBuffer@ inputs to
+--     'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCmdProcessCommandsNVX'.
+--
+-- -   @VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX@ specifies writes to the
+--     target command buffer in
+--     'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCmdProcessCommandsNVX'.
+--
 -- Certain access types are only performed by a subset of pipeline stages.
 -- Any synchronization command that takes both stage masks and access masks
--- uses both to define the
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scopes>
+-- uses both to define the [access
+-- scopes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
 -- - only the specified access types performed by the specified stages are
 -- included in the access scope. An application /must/ not specify an
 -- access flag in a synchronization command if it does not include a
@@ -442,124 +469,100 @@
 -- accesses of that type. The following table lists, for each access flag,
 -- which pipeline stages /can/ perform that type of access.
 --
--- > +-----------------------------------+-----------------------------------+
--- > | Access flag                       | Supported pipeline stages         |
--- > +===================================+===================================+
--- > | @VK_ACCESS_INDIRECT_COMMAND_READ_ | @VK_PIPELINE_STAGE_DRAW_INDIRECT_ |
--- > | BIT@                              | BIT@                              |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_INDEX_READ_BIT@        | @VK_PIPELINE_STAGE_VERTEX_INPUT_B |
--- > |                                   | IT@                               |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_VERTEX_ATTRIBUTE_READ_ | @VK_PIPELINE_STAGE_VERTEX_INPUT_B |
--- > | BIT@                              | IT@                               |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_UNIFORM_READ_BIT@      | @VK_PIPELINE_STAGE_VERTEX_SHADER_ |
--- > |                                   | BIT@,                             |
--- > |                                   | @VK_PIPELINE_STAGE_TESSELLATION_C |
--- > |                                   | ONTROL_SHADER_BIT@,               |
--- > |                                   | @VK_PIPELINE_STAGE_TESSELLATION_E |
--- > |                                   | VALUATION_SHADER_BIT@,            |
--- > |                                   | @VK_PIPELINE_STAGE_GEOMETRY_SHADE |
--- > |                                   | R_BIT@,                           |
--- > |                                   | @VK_PIPELINE_STAGE_FRAGMENT_SHADE |
--- > |                                   | R_BIT@,                           |
--- > |                                   | or                                |
--- > |                                   | @VK_PIPELINE_STAGE_COMPUTE_SHADER |
--- > |                                   | _BIT@                             |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_INPUT_ATTACHMENT_READ_ | @VK_PIPELINE_STAGE_FRAGMENT_SHADE |
--- > | BIT@                              | R_BIT@                            |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_SHADER_READ_BIT@       | @VK_PIPELINE_STAGE_VERTEX_SHADER_ |
--- > |                                   | BIT@,                             |
--- > |                                   | @VK_PIPELINE_STAGE_TESSELLATION_C |
--- > |                                   | ONTROL_SHADER_BIT@,               |
--- > |                                   | @VK_PIPELINE_STAGE_TESSELLATION_E |
--- > |                                   | VALUATION_SHADER_BIT@,            |
--- > |                                   | @VK_PIPELINE_STAGE_GEOMETRY_SHADE |
--- > |                                   | R_BIT@,                           |
--- > |                                   | @VK_PIPELINE_STAGE_FRAGMENT_SHADE |
--- > |                                   | R_BIT@,                           |
--- > |                                   | or                                |
--- > |                                   | @VK_PIPELINE_STAGE_COMPUTE_SHADER |
--- > |                                   | _BIT@                             |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_SHADER_WRITE_BIT@      | @VK_PIPELINE_STAGE_VERTEX_SHADER_ |
--- > |                                   | BIT@,                             |
--- > |                                   | @VK_PIPELINE_STAGE_TESSELLATION_C |
--- > |                                   | ONTROL_SHADER_BIT@,               |
--- > |                                   | @VK_PIPELINE_STAGE_TESSELLATION_E |
--- > |                                   | VALUATION_SHADER_BIT@,            |
--- > |                                   | @VK_PIPELINE_STAGE_GEOMETRY_SHADE |
--- > |                                   | R_BIT@,                           |
--- > |                                   | @VK_PIPELINE_STAGE_FRAGMENT_SHADE |
--- > |                                   | R_BIT@,                           |
--- > |                                   | or                                |
--- > |                                   | @VK_PIPELINE_STAGE_COMPUTE_SHADER |
--- > |                                   | _BIT@                             |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_COLOR_ATTACHMENT_READ_ | @VK_PIPELINE_STAGE_COLOR_ATTACHME |
--- > | BIT@                              | NT_OUTPUT_BIT@                    |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_COLOR_ATTACHMENT_WRITE | @VK_PIPELINE_STAGE_COLOR_ATTACHME |
--- > | _BIT@                             | NT_OUTPUT_BIT@                    |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_DEPTH_STENCIL_ATTACHME | @VK_PIPELINE_STAGE_EARLY_FRAGMENT |
--- > | NT_READ_BIT@                      | _TESTS_BIT@,                      |
--- > |                                   | or                                |
--- > |                                   | @VK_PIPELINE_STAGE_LATE_FRAGMENT_ |
--- > |                                   | TESTS_BIT@                        |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_DEPTH_STENCIL_ATTACHME | @VK_PIPELINE_STAGE_EARLY_FRAGMENT |
--- > | NT_WRITE_BIT@                     | _TESTS_BIT@,                      |
--- > |                                   | or                                |
--- > |                                   | @VK_PIPELINE_STAGE_LATE_FRAGMENT_ |
--- > |                                   | TESTS_BIT@                        |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_TRANSFER_READ_BIT@     | @VK_PIPELINE_STAGE_TRANSFER_BIT@  |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_TRANSFER_WRITE_BIT@    | @VK_PIPELINE_STAGE_TRANSFER_BIT@  |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_HOST_READ_BIT@         | @VK_PIPELINE_STAGE_HOST_BIT@      |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_HOST_WRITE_BIT@        | @VK_PIPELINE_STAGE_HOST_BIT@      |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_MEMORY_READ_BIT@       | N\/A                              |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_ACCESS_MEMORY_WRITE_BIT@      | N\/A                              |
--- > +-----------------------------------+-----------------------------------+
--- >
--- > Supported access types
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | Access flag                                           | Supported pipeline stages                               |
+-- +=======================================================+=========================================================+
+-- | @VK_ACCESS_INDIRECT_COMMAND_READ_BIT@                 | @VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT@                   |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_INDEX_READ_BIT@                            | @VK_PIPELINE_STAGE_VERTEX_INPUT_BIT@                    |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT@                 | @VK_PIPELINE_STAGE_VERTEX_INPUT_BIT@                    |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_UNIFORM_READ_BIT@                          | @VK_PIPELINE_STAGE_VERTEX_SHADER_BIT@,                  |
+-- |                                                       | @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@,    |
+-- |                                                       | @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@, |
+-- |                                                       | @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@,                |
+-- |                                                       | @VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT@, or             |
+-- |                                                       | @VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT@                  |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_INPUT_ATTACHMENT_READ_BIT@                 | @VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT@                 |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_SHADER_READ_BIT@                           | @VK_PIPELINE_STAGE_VERTEX_SHADER_BIT@,                  |
+-- |                                                       | @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@,    |
+-- |                                                       | @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@, |
+-- |                                                       | @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@,                |
+-- |                                                       | @VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT@, or             |
+-- |                                                       | @VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT@                  |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_SHADER_WRITE_BIT@                          | @VK_PIPELINE_STAGE_VERTEX_SHADER_BIT@,                  |
+-- |                                                       | @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@,    |
+-- |                                                       | @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@, |
+-- |                                                       | @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@,                |
+-- |                                                       | @VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT@, or             |
+-- |                                                       | @VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT@                  |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_COLOR_ATTACHMENT_READ_BIT@                 | @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@         |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT@ | @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@         |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT@                | @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@         |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT@         | @VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT@, or        |
+-- |                                                       | @VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT@             |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT@        | @VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT@, or        |
+-- |                                                       | @VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT@             |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_TRANSFER_READ_BIT@                         | @VK_PIPELINE_STAGE_TRANSFER_BIT@                        |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_TRANSFER_WRITE_BIT@                        | @VK_PIPELINE_STAGE_TRANSFER_BIT@                        |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_HOST_READ_BIT@                             | @VK_PIPELINE_STAGE_HOST_BIT@                            |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_HOST_WRITE_BIT@                            | @VK_PIPELINE_STAGE_HOST_BIT@                            |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_MEMORY_READ_BIT@                           | N\/A                                                    |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_MEMORY_WRITE_BIT@                          | N\/A                                                    |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX@              | @VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX@             |
+-- +-------------------------------------------------------+---------------------------------------------------------+
+-- | @VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX@             | @VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX@             |
+-- +-------------------------------------------------------+---------------------------------------------------------+
 --
+-- Supported access types
+--
 -- If a memory object does not have the
 -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ property, then
 -- 'Graphics.Vulkan.Core10.Memory.vkFlushMappedMemoryRanges' /must/ be
 -- called in order to guarantee that writes to the memory object from the
--- host are made visible to the @VK_ACCESS_HOST_WRITE_BIT@
--- <{html_spec_relative}#synchronization-access-types access type>, where
--- it /can/ be further made available to the device by
--- <{html_spec_relative}#synchronization synchronization commands>.
+-- host are made visible to the @VK_ACCESS_HOST_WRITE_BIT@ [access
+-- type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types),
+-- where it /can/ be further made available to the device by
+-- [synchronization
+-- commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization).
 -- Similarly,
 -- 'Graphics.Vulkan.Core10.Memory.vkInvalidateMappedMemoryRanges' /must/ be
 -- called to guarantee that writes which are visible to the
--- @VK_ACCESS_HOST_READ_BIT@
--- <{html_spec_relative}#synchronization-access-types access type> are made
--- visible to host operations.
+-- @VK_ACCESS_HOST_READ_BIT@ [access
+-- type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types)
+-- are made visible to host operations.
 --
 -- If the memory object does have the
 -- @VK_MEMORY_PROPERTY_HOST_COHERENT_BIT@ property flag, writes to the
 -- memory object from the host are automatically made visible to the
--- @VK_ACCESS_HOST_WRITE_BIT@
--- <{html_spec_relative}#synchronization-access-types access type>.
--- Similarly, writes made visible to the @VK_ACCESS_HOST_READ_BIT@
--- <{html_spec_relative}#synchronization-access-types access type> are
--- automatically made visible to the host.
+-- @VK_ACCESS_HOST_WRITE_BIT@ [access
+-- type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types).
+-- Similarly, writes made visible to the @VK_ACCESS_HOST_READ_BIT@ [access
+-- type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types)
+-- are automatically made visible to the host.
 --
 -- __Note__
 --
--- The 'Graphics.Vulkan.Core10.Queue.vkQueueSubmit' command
--- <{html_spec_relative}#synchronization-submission-host-writes automatically guarantees that host writes flushed to VK_ACCESS_HOST_WRITE_BIT are made available>
+-- The 'Graphics.Vulkan.Core10.Queue.vkQueueSubmit' command [automatically
+-- guarantees that host writes flushed to @VK_ACCESS_HOST_WRITE_BIT@ are
+-- made
+-- available](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-host-writes)
 -- if they were flushed before the command executed, so in most cases an
 -- explicit memory barrier is not needed for this case. In the few
 -- circumstances where a submit does not occur between the host write and
@@ -567,7 +570,6 @@
 -- explicit memory barrier.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAccessFlags'
 newtype VkAccessFlagBits = VkAccessFlagBits VkFlags
@@ -698,16 +700,7 @@
 
 -- | VkSubpassDescriptionFlagBits - Bitmask specifying usage of a subpass
 --
--- = Description
--- #_description#
---
--- __Note__
---
--- All bits for this type are defined by extensions, and none of those
--- extensions are enabled in this build of the specification.
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkSubpassDescriptionFlags'
 newtype VkSubpassDescriptionFlagBits = VkSubpassDescriptionFlagBits VkFlags
@@ -738,7 +731,6 @@
 -- properties of an attachment
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentDescriptionFlags'
 newtype VkAttachmentDescriptionFlagBits = VkAttachmentDescriptionFlagBits VkFlags
@@ -768,7 +760,6 @@
 -- dependencies are formed
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDependencyFlags'
 newtype VkDependencyFlagBits = VkDependencyFlagBits VkFlags
@@ -795,18 +786,14 @@
                     )
 
 -- | @VK_DEPENDENCY_BY_REGION_BIT@ specifies that dependencies will be
--- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-local>.
+-- [framebuffer-local](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-framebuffer-regions).
 pattern VK_DEPENDENCY_BY_REGION_BIT :: VkDependencyFlagBits
 pattern VK_DEPENDENCY_BY_REGION_BIT = VkDependencyFlagBits 0x00000001
 -- | Dummy data to tag the 'Ptr' with
 data VkFramebuffer_T
 -- | VkFramebuffer - Opaque handle to a framebuffer object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferInheritanceInfo',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
@@ -815,7 +802,6 @@
 -- | vkCreateFramebuffer - Create a new framebuffer object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the framebuffer.
 --
@@ -823,14 +809,13 @@
 --     describes additional information about framebuffer creation.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pFramebuffer@ points to a @VkFramebuffer@ handle in which the
 --     resulting framebuffer object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -845,16 +830,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkFramebuffer',
@@ -863,17 +847,15 @@
 -- | vkDestroyFramebuffer - Destroy a framebuffer object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the framebuffer.
 --
 -- -   @framebuffer@ is the handle of the framebuffer to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -905,7 +887,6 @@
 -- -   Host access to @framebuffer@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkFramebuffer'
@@ -913,7 +894,6 @@
 -- | vkCreateRenderPass - Create a new render pass object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the render pass.
 --
@@ -922,14 +902,13 @@
 --     the render pass.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pRenderPass@ points to a @VkRenderPass@ handle in which the
 --     resulting render pass object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -944,16 +923,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -962,17 +940,15 @@
 -- | vkDestroyRenderPass - Destroy a render pass object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the render pass.
 --
 -- -   @renderPass@ is the handle of the render pass to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -1004,7 +980,6 @@
 -- -   Host access to @renderPass@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -1014,7 +989,6 @@
 -- area
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the render pass.
 --
@@ -1025,7 +999,6 @@
 --     granularity is returned.
 --
 -- = Description
--- #_description#
 --
 -- The conditions leading to an optimal @renderArea@ are:
 --
@@ -1049,8 +1022,8 @@
 --
 -- Subpass dependencies are not affected by the render area, and apply to
 -- the entire image subresources attached to the framebuffer as specified
--- in the description of
--- <{html_spec_relative}#renderpass-layout-transitions automatic layout transitions>.
+-- in the description of [automatic layout
+-- transitions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-layout-transitions).
 -- Similarly, pipeline barriers are valid even if their effect extends
 -- outside the render area.
 --
@@ -1066,7 +1039,6 @@
 --     @device@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
@@ -1075,7 +1047,6 @@
 -- | VkAttachmentDescription - Structure specifying an attachment description
 --
 -- = Description
--- #_description#
 --
 -- If the attachment uses a color format, then @loadOp@ and @storeOp@ are
 -- used, and @stencilLoadOp@ and @stencilStoreOp@ are ignored. If the
@@ -1108,6 +1079,12 @@
 -- memory contents will not be modified by execution of a render pass
 -- instance.
 --
+-- The load and store operations apply on the first and last use of each
+-- view in the render pass, respectively. If a view index of an attachment
+-- is not included in the view mask in any subpass that uses it, then the
+-- load and store operations are ignored, and the attachment’s memory
+-- contents will not be modified by execution of a render pass instance.
+--
 -- During a render pass instance, input\/color attachments with color
 -- formats that have a component size of 8, 16, or 32 bits /must/ be
 -- represented in the attachment’s format throughout the instance.
@@ -1119,10 +1096,10 @@
 -- pass. Such components /must/ be converted from the render pass format,
 -- to the format of the attachment, before they are resolved or stored at
 -- the end of a render pass instance via @storeOp@. Conversions occur as
--- described in
--- <{html_spec_relative}#fundamentals-numerics Numeric Representation and Computation>
--- and
--- <{html_spec_relative}#fundamentals-fixedconv Fixed-Point Data Conversions>.
+-- described in [Numeric Representation and
+-- Computation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-numerics)
+-- and [Fixed-Point Data
+-- Conversions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-fixedconv).
 --
 -- If @flags@ includes @VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT@, then the
 -- attachment is treated as if it shares physical memory with another
@@ -1164,30 +1141,44 @@
 --     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentDescriptionFlags', 'VkAttachmentLoadOp',
 -- 'VkAttachmentStoreOp', 'Graphics.Vulkan.Core10.Core.VkFormat',
 -- 'Graphics.Vulkan.Core10.Image.VkImageLayout', 'VkRenderPassCreateInfo',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
 data VkAttachmentDescription = VkAttachmentDescription
-  { -- No documentation found for Nested "VkAttachmentDescription" "vkFlags"
+  { -- | @flags@ is a bitmask of 'VkAttachmentDescriptionFlagBits' specifying
+  -- additional properties of the attachment.
   vkFlags :: VkAttachmentDescriptionFlags
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkFormat"
+  , -- | @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' value specifying
+  -- the format of the image that will be used for the attachment.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkSamples"
+  , -- | @samples@ is the number of samples of the image as defined in
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'.
   vkSamples :: VkSampleCountFlagBits
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkLoadOp"
+  , -- | @loadOp@ is a 'VkAttachmentLoadOp' value specifying how the contents of
+  -- color and depth components of the attachment are treated at the
+  -- beginning of the subpass where it is first used.
   vkLoadOp :: VkAttachmentLoadOp
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkStoreOp"
+  , -- | @storeOp@ is a 'VkAttachmentStoreOp' value specifying how the contents
+  -- of color and depth components of the attachment are treated at the end
+  -- of the subpass where it is last used.
   vkStoreOp :: VkAttachmentStoreOp
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkStencilLoadOp"
+  , -- | @stencilLoadOp@ is a 'VkAttachmentLoadOp' value specifying how the
+  -- contents of stencil components of the attachment are treated at the
+  -- beginning of the subpass where it is first used.
   vkStencilLoadOp :: VkAttachmentLoadOp
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkStencilStoreOp"
+  , -- | @stencilStoreOp@ is a 'VkAttachmentStoreOp' value specifying how the
+  -- contents of stencil components of the attachment are treated at the end
+  -- of the last subpass where it is used.
   vkStencilStoreOp :: VkAttachmentStoreOp
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkInitialLayout"
+  , -- | @initialLayout@ is the layout the attachment image subresource will be
+  -- in when a render pass instance begins.
   vkInitialLayout :: VkImageLayout
-  , -- No documentation found for Nested "VkAttachmentDescription" "vkFinalLayout"
+  , -- | @finalLayout@ is the layout the attachment image subresource will be
+  -- transitioned to when a render pass instance ends. During a render pass
+  -- instance, an attachment /can/ use a different layout in each subpass, if
+  -- desired.
   vkFinalLayout :: VkImageLayout
   }
   deriving (Eq, Show)
@@ -1215,9 +1206,6 @@
                 *> poke (ptr `plusPtr` 32) (vkFinalLayout (poked :: VkAttachmentDescription))
 -- | VkAttachmentReference - Structure specifying an attachment reference
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @layout@ /must/ not be @VK_IMAGE_LAYOUT_UNDEFINED@ or
@@ -1229,13 +1217,17 @@
 --     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Image.VkImageLayout', 'VkSubpassDescription'
 data VkAttachmentReference = VkAttachmentReference
-  { -- No documentation found for Nested "VkAttachmentReference" "vkAttachment"
+  { -- | @attachment@ is the index of the attachment of the render pass, and
+  -- corresponds to the index of the corresponding element in the
+  -- @pAttachments@ array of the @VkRenderPassCreateInfo@ structure. If any
+  -- color or depth\/stencil attachments are @VK_ATTACHMENT_UNUSED@, then no
+  -- writes occur for those attachments.
   vkAttachment :: Word32
-  , -- No documentation found for Nested "VkAttachmentReference" "vkLayout"
+  , -- | @layout@ is a 'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+  -- specifying the layout the attachment uses during the subpass.
   vkLayout :: VkImageLayout
   }
   deriving (Eq, Show)
@@ -1250,7 +1242,6 @@
 -- | VkSubpassDescription - Structure specifying a subpass description
 --
 -- = Description
--- #_description#
 --
 -- The contents of an attachment within the render area become undefined at
 -- the start of a subpass __S__ if all of the following conditions are
@@ -1301,9 +1292,10 @@
 -- -   All attachments in @pColorAttachments@ that are not
 --     @VK_ATTACHMENT_UNUSED@ /must/ have the same sample count
 --
--- -   If @pDepthStencilAttachment@ is not @VK_ATTACHMENT_UNUSED@ and any
---     attachments in @pColorAttachments@ are not @VK_ATTACHMENT_UNUSED@,
---     they /must/ have the same sample count
+-- -   All attachments in @pColorAttachments@ that are not
+--     @VK_ATTACHMENT_UNUSED@ /must/ have a sample count that is smaller
+--     than or equal to the sample count of @pDepthStencilAttachment@ if it
+--     is not @VK_ATTACHMENT_UNUSED@
 --
 -- -   If any input attachments are @VK_ATTACHMENT_UNUSED@, then any
 --     pipelines bound during the subpass /must/ not access those input
@@ -1319,6 +1311,10 @@
 --     depth\/stencil attachment, then each use /must/ use the same
 --     @layout@
 --
+-- -   If @flags@ includes
+--     @VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX@, it /must/
+--     also include @VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX@.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @flags@ /must/ be a valid combination of
@@ -1348,30 +1344,71 @@
 --     @uint32_t@ values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentReference', 'VkPipelineBindPoint',
 -- 'VkRenderPassCreateInfo', 'VkSubpassDescriptionFlags'
 data VkSubpassDescription = VkSubpassDescription
-  { -- No documentation found for Nested "VkSubpassDescription" "vkFlags"
+  { -- | @flags@ is a bitmask of 'VkSubpassDescriptionFlagBits' specifying usage
+  -- of the subpass.
   vkFlags :: VkSubpassDescriptionFlags
-  , -- No documentation found for Nested "VkSubpassDescription" "vkPipelineBindPoint"
+  , -- | @pipelineBindPoint@ is a 'VkPipelineBindPoint' value specifying whether
+  -- this is a compute or graphics subpass. Currently, only graphics
+  -- subpasses are supported.
   vkPipelineBindPoint :: VkPipelineBindPoint
-  , -- No documentation found for Nested "VkSubpassDescription" "vkInputAttachmentCount"
+  , -- | @inputAttachmentCount@ is the number of input attachments.
   vkInputAttachmentCount :: Word32
-  , -- No documentation found for Nested "VkSubpassDescription" "vkPInputAttachments"
+  , -- | @pInputAttachments@ is an array of 'VkAttachmentReference' structures
+  -- (defined below) that lists which of the render pass’s attachments /can/
+  -- be read in the fragment shader stage during the subpass, and what layout
+  -- each attachment will be in during the subpass. Each element of the array
+  -- corresponds to an input attachment unit number in the shader, i.e. if
+  -- the shader declares an input variable
+  -- @layout(input_attachment_index=X, set=Y, binding=Z)@ then it uses the
+  -- attachment provided in @pInputAttachments@[X]. Input attachments /must/
+  -- also be bound to the pipeline with a descriptor set, with the input
+  -- attachment descriptor written in the location (set=Y, binding=Z).
+  -- Fragment shaders /can/ use subpass input variables to access the
+  -- contents of an input attachment at the fragment’s (x, y, layer)
+  -- framebuffer coordinates.
   vkPInputAttachments :: Ptr VkAttachmentReference
-  , -- No documentation found for Nested "VkSubpassDescription" "vkColorAttachmentCount"
+  , -- | @colorAttachmentCount@ is the number of color attachments.
   vkColorAttachmentCount :: Word32
-  , -- No documentation found for Nested "VkSubpassDescription" "vkPColorAttachments"
+  , -- | @pColorAttachments@ is an array of @colorAttachmentCount@
+  -- 'VkAttachmentReference' structures that lists which of the render pass’s
+  -- attachments will be used as color attachments in the subpass, and what
+  -- layout each attachment will be in during the subpass. Each element of
+  -- the array corresponds to a fragment shader output location, i.e. if the
+  -- shader declared an output variable @layout(location=X)@ then it uses the
+  -- attachment provided in @pColorAttachments@[X].
   vkPColorAttachments :: Ptr VkAttachmentReference
-  , -- No documentation found for Nested "VkSubpassDescription" "vkPResolveAttachments"
+  , -- | @pResolveAttachments@ is @NULL@ or an array of @colorAttachmentCount@
+  -- 'VkAttachmentReference' structures that lists which of the render pass’s
+  -- attachments are resolved to at the end of the subpass, and what layout
+  -- each attachment will be in during the multisample resolve operation. If
+  -- @pResolveAttachments@ is not @NULL@, each of its elements corresponds to
+  -- a color attachment (the element in @pColorAttachments@ at the same
+  -- index), and a multisample resolve operation is defined for each
+  -- attachment. At the end of each subpass, multisample resolve operations
+  -- read the subpass’s color attachments, and resolve the samples for each
+  -- pixel to the same pixel location in the corresponding resolve
+  -- attachments, unless the resolve attachment index is
+  -- @VK_ATTACHMENT_UNUSED@. If the first use of an attachment in a render
+  -- pass is as a resolve attachment, then the @loadOp@ is effectively
+  -- ignored as the resolve is guaranteed to overwrite all pixels in the
+  -- render area.
   vkPResolveAttachments :: Ptr VkAttachmentReference
-  , -- No documentation found for Nested "VkSubpassDescription" "vkPDepthStencilAttachment"
+  , -- | @pDepthStencilAttachment@ is a pointer to a 'VkAttachmentReference'
+  -- specifying which attachment will be used for depth\/stencil data and the
+  -- layout it will be in during the subpass. Setting the attachment index to
+  -- @VK_ATTACHMENT_UNUSED@ or leaving this pointer as @NULL@ indicates that
+  -- no depth\/stencil attachment will be used in the subpass.
   vkPDepthStencilAttachment :: Ptr VkAttachmentReference
-  , -- No documentation found for Nested "VkSubpassDescription" "vkPreserveAttachmentCount"
+  , -- | @preserveAttachmentCount@ is the number of preserved attachments.
   vkPreserveAttachmentCount :: Word32
-  , -- No documentation found for Nested "VkSubpassDescription" "vkPPreserveAttachments"
+  , -- | @pPreserveAttachments@ is an array of @preserveAttachmentCount@ render
+  -- pass attachment indices describing the attachments that are not used by
+  -- a subpass, but whose contents /must/ be preserved throughout the
+  -- subpass.
   vkPPreserveAttachments :: Ptr Word32
   }
   deriving (Eq, Show)
@@ -1402,11 +1439,10 @@
 -- | VkSubpassDependency - Structure specifying a subpass dependency
 --
 -- = Description
--- #_description#
 --
 -- If @srcSubpass@ is equal to @dstSubpass@ then the 'VkSubpassDependency'
--- describes a
--- <{html_spec_relative}#synchronization-pipeline-barriers-subpass-self-dependencies subpass self-dependency>,
+-- describes a [subpass
+-- self-dependency](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-barriers-subpass-self-dependencies),
 -- and only constrains the pipeline barriers allowed within a subpass
 -- instance. Otherwise, when a render pass instance which includes a
 -- subpass dependency is submitted to a queue, it defines a memory
@@ -1414,9 +1450,10 @@
 -- @dstSubpass@.
 --
 -- If @srcSubpass@ is equal to @VK_SUBPASS_EXTERNAL@, the first
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes commands that occur earlier in
--- <{html_spec_relative}#synchronization-submission-order submission order>
+-- [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes commands that occur earlier in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order)
 -- than the
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBeginRenderPass' used
 -- to begin the render pass instance. Otherwise, the first set of commands
@@ -1424,14 +1461,15 @@
 -- identified by @srcSubpass@ and any load, store or multisample resolve
 -- operations on attachments used in @srcSubpass@. In either case, the
 -- first synchronization scope is limited to operations on the pipeline
--- stages determined by the
--- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
+-- stages determined by the [source stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
 -- specified by @srcStageMask@.
 --
 -- If @dstSubpass@ is equal to @VK_SUBPASS_EXTERNAL@, the second
--- <{html_spec_relative}#synchronization-dependencies-scopes synchronization scope>
--- includes commands that occur later in
--- <{html_spec_relative}#synchronization-submission-order submission order>
+-- [synchronization
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-scopes)
+-- includes commands that occur later in [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order)
 -- than the
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdEndRenderPass' used
 -- to end the render pass instance. Otherwise, the second set of commands
@@ -1439,30 +1477,34 @@
 -- identified by @dstSubpass@ and any load, store or multisample resolve
 -- operations on attachments used in @dstSubpass@. In either case, the
 -- second synchronization scope is limited to operations on the pipeline
--- stages determined by the
--- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
+-- stages determined by the [destination stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
 -- specified by @dstStageMask@.
 --
--- The first
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
--- is limited to access in the pipeline stages determined by the
--- <{html_spec_relative}#synchronization-pipeline-stages-masks source stage mask>
+-- The first [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
+-- is limited to access in the pipeline stages determined by the [source
+-- stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
 -- specified by @srcStageMask@. It is also limited to access types in the
--- <{html_spec_relative}#synchronization-access-masks source access mask>
+-- [source access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks)
 -- specified by @srcAccessMask@.
 --
--- The second
--- <{html_spec_relative}#synchronization-dependencies-access-scopes access scope>
+-- The second [access
+-- scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-access-scopes)
 -- is limited to access in the pipeline stages determined by the
--- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
+-- [destination stage
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
 -- specified by @dstStageMask@. It is also limited to access types in the
--- <{html_spec_relative}#synchronization-access-masks destination access mask>
+-- [destination access
+-- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks)
 -- specified by @dstAccessMask@.
 --
--- The
--- <{html_spec_relative}#synchronization-dependencies-available-and-visible availability and visibility operations>
--- defined by a subpass dependency affect the execution of
--- <{html_spec_relative}#renderpass-layout-transitions image layout transitions>
+-- The [availability and visibility
+-- operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-dependencies-available-and-visible)
+-- defined by a subpass dependency affect the execution of [image layout
+-- transitions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-layout-transitions)
 -- within the render pass.
 --
 -- __Note__
@@ -1498,24 +1540,24 @@
 -- -   If @dstSubpass@ is not @VK_SUBPASS_EXTERNAL@, @dstStageMask@ /must/
 --     not include @VK_PIPELINE_STAGE_HOST_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
 --     feature is not enabled, @srcStageMask@ /must/ not contain
 --     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
 --     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
 --     feature is not enabled, @dstStageMask@ /must/ not contain
 --     @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
 --     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
@@ -1544,24 +1586,37 @@
 --     @VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT@
 --
 -- -   If @srcSubpass@ is equal to @dstSubpass@ and not all of the stages
---     in @srcStageMask@ and @dstStageMask@ are
---     <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-space stages>,
---     the
---     <{html_spec_relative}#synchronization-pipeline-stages-order logically latest>
---     pipeline stage in @srcStageMask@ /must/ be
---     <{html_spec_relative}#synchronization-pipeline-stages-order logically earlier>
---     than or equal to the
---     <{html_spec_relative}#synchronization-pipeline-stages-order logically earliest>
+--     in @srcStageMask@ and @dstStageMask@ are [framebuffer-space
+--     stages](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-framebuffer-regions),
+--     the [logically
+--     latest](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-order)
+--     pipeline stage in @srcStageMask@ /must/ be [logically
+--     earlier](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-order)
+--     than or equal to the [logically
+--     earliest](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-order)
 --     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
---     <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
+--     [table of supported access
+--     types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types-supported).
 --
 -- -   Any access flag included in @dstAccessMask@ /must/ be supported by
 --     one of the pipeline stages in @dstStageMask@, as specified in the
---     <{html_spec_relative}#synchronization-access-types-supported table of supported access types>.
+--     [table of supported access
+--     types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-types-supported).
 --
+-- -   If @dependencyFlags@ includes @VK_DEPENDENCY_VIEW_LOCAL_BIT@, then
+--     both @srcSubpass@ and @dstSubpass@ /must/ not equal
+--     @VK_SUBPASS_EXTERNAL@
+--
+-- -   If @dependencyFlags@ includes @VK_DEPENDENCY_VIEW_LOCAL_BIT@, then
+--     the render pass /must/ have multiview enabled
+--
+-- -   If @srcSubpass@ equals @dstSubpass@ and that subpass has more than
+--     one bit set in the view mask, then @dependencyFlags@ /must/ include
+--     @VK_DEPENDENCY_VIEW_LOCAL_BIT@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @srcStageMask@ /must/ be a valid combination of
@@ -1584,25 +1639,36 @@
 --     'VkDependencyFlagBits' values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAccessFlags', 'VkDependencyFlags',
 -- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags',
 -- 'VkRenderPassCreateInfo'
 data VkSubpassDependency = VkSubpassDependency
-  { -- No documentation found for Nested "VkSubpassDependency" "vkSrcSubpass"
+  { -- | @srcSubpass@ is the subpass index of the first subpass in the
+  -- dependency, or @VK_SUBPASS_EXTERNAL@.
   vkSrcSubpass :: Word32
-  , -- No documentation found for Nested "VkSubpassDependency" "vkDstSubpass"
+  , -- | @dstSubpass@ is the subpass index of the second subpass in the
+  -- dependency, or @VK_SUBPASS_EXTERNAL@.
   vkDstSubpass :: Word32
-  , -- No documentation found for Nested "VkSubpassDependency" "vkSrcStageMask"
+  , -- | @srcStageMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying the
+  -- [source stage
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks).
   vkSrcStageMask :: VkPipelineStageFlags
-  , -- No documentation found for Nested "VkSubpassDependency" "vkDstStageMask"
+  , -- | @dstStageMask@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' specifying the
+  -- [destination stage
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-masks)
   vkDstStageMask :: VkPipelineStageFlags
-  , -- No documentation found for Nested "VkSubpassDependency" "vkSrcAccessMask"
+  , -- | @srcAccessMask@ is a bitmask of 'VkAccessFlagBits' specifying a [source
+  -- access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
   vkSrcAccessMask :: VkAccessFlags
-  , -- No documentation found for Nested "VkSubpassDependency" "vkDstAccessMask"
+  , -- | @dstAccessMask@ is a bitmask of 'VkAccessFlagBits' specifying a
+  -- [destination access
+  -- mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-access-masks).
   vkDstAccessMask :: VkAccessFlags
-  , -- No documentation found for Nested "VkSubpassDependency" "vkDependencyFlags"
+  , -- | @dependencyFlags@ is a bitmask of 'VkDependencyFlagBits'.
   vkDependencyFlags :: VkDependencyFlags
   }
   deriving (Eq, Show)
@@ -1627,9 +1693,6 @@
 -- | VkRenderPassCreateInfo - Structure specifying parameters of a newly
 -- created render pass
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If any two subpasses operate on attachments with overlapping ranges
@@ -1662,18 +1725,28 @@
 --     @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@ or
 --     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@.
 --
+-- -   For any member of @pAttachments@ with a @loadOp@ equal to
+--     @VK_ATTACHMENT_LOAD_OP_CLEAR@, the first use of that attachment
+--     /must/ not specify a @layout@ equal to
+--     @VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL@.
+--
+-- -   For any member of @pAttachments@ with a @stencilLoadOp@ equal to
+--     @VK_ATTACHMENT_LOAD_OP_CLEAR@, the first use of that attachment
+--     /must/ not specify a @layout@ equal to
+--     @VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL@.
+--
 -- -   For any element of @pDependencies@, if the @srcSubpass@ is not
 --     @VK_SUBPASS_EXTERNAL@, all stage flags included in the
 --     @srcStageMask@ member of that dependency /must/ be a pipeline stage
 --     supported by the
---     <{html_spec_relative}#synchronization-pipeline-stages-types pipeline>
+--     [pipeline](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types)
 --     identified by the @pipelineBindPoint@ member of the source subpass.
 --
 -- -   For any element of @pDependencies@, if the @dstSubpass@ is not
 --     @VK_SUBPASS_EXTERNAL@, all stage flags included in the
 --     @dstStageMask@ member of that dependency /must/ be a pipeline stage
 --     supported by the
---     <{html_spec_relative}#synchronization-pipeline-stages-types pipeline>
+--     [pipeline](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types)
 --     identified by the @pipelineBindPoint@ member of the source subpass.
 --
 -- == Valid Usage (Implicit)
@@ -1705,29 +1778,39 @@
 -- -   @subpassCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentDescription', 'VkRenderPassCreateFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkSubpassDependency',
 -- 'VkSubpassDescription', 'vkCreateRenderPass'
 data VkRenderPassCreateInfo = VkRenderPassCreateInfo
-  { -- No documentation found for Nested "VkRenderPassCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkRenderPassCreateFlags
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkAttachmentCount"
+  , -- | @attachmentCount@ is the number of attachments used by this render pass,
+  -- or zero indicating no attachments. Attachments are referred to by
+  -- zero-based indices in the range [0,@attachmentCount@).
   vkAttachmentCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPAttachments"
+  , -- | @pAttachments@ points to an array of @attachmentCount@ number of
+  -- 'VkAttachmentDescription' structures describing properties of the
+  -- attachments, or @NULL@ if @attachmentCount@ is zero.
   vkPAttachments :: Ptr VkAttachmentDescription
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkSubpassCount"
+  , -- | @subpassCount@ is the number of subpasses to create for this render
+  -- pass. Subpasses are referred to by zero-based indices in the range
+  -- [0,@subpassCount@). A render pass /must/ have at least one subpass.
   vkSubpassCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPSubpasses"
+  , -- | @pSubpasses@ points to an array of @subpassCount@ number of
+  -- 'VkSubpassDescription' structures describing properties of the
+  -- subpasses.
   vkPSubpasses :: Ptr VkSubpassDescription
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkDependencyCount"
+  , -- | @dependencyCount@ is the number of dependencies between pairs of
+  -- subpasses, or zero indicating no dependencies.
   vkDependencyCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPDependencies"
+  , -- | @pDependencies@ points to an array of @dependencyCount@ number of
+  -- 'VkSubpassDependency' structures describing dependencies between pairs
+  -- of subpasses, or @NULL@ if @dependencyCount@ is zero.
   vkPDependencies :: Ptr VkSubpassDependency
   }
   deriving (Eq, Show)
@@ -1757,19 +1840,30 @@
 -- created framebuffer
 --
 -- = Description
--- #_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
--- <{html_spec_relative}#renderpass-load-store-ops load operations> for
--- those attachments, or happen-after the
--- <{html_spec_relative}#renderpass-load-store-ops store operations> for
--- those attachments.
+-- happen-before the [load
+-- operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops)
+-- for those attachments, or happen-after the [store
+-- operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops)
+-- 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
+-- @VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL@ layout or
+-- the @VK_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@.
+--
 -- __Note__
 --
--- This restriction means that the render pass has full knowledge of all
+-- These restrictions mean that the render pass has full knowledge of all
 -- uses of all of the attachments, so that the implementation is able to
 -- make correct decisions about when and how to perform layout transitions,
 -- when to overlap execution of subpasses, etc.
@@ -1837,6 +1931,9 @@
 -- -   @layers@ /must/ be less than or equal to
 --     @VkPhysicalDeviceLimits@::@maxFramebufferLayers@
 --
+-- -   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
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO@
@@ -1855,30 +1952,36 @@
 --     the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkFramebufferCreateFlags',
 -- 'Graphics.Vulkan.Core10.ImageView.VkImageView',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateFramebuffer'
 data VkFramebufferCreateInfo = VkFramebufferCreateInfo
-  { -- No documentation found for Nested "VkFramebufferCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkFramebufferCreateFlags
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkRenderPass"
+  , -- | @renderPass@ is a render pass that defines what render passes the
+  -- framebuffer will be compatible with. See [Render Pass
+  -- Compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+  -- for details.
   vkRenderPass :: VkRenderPass
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkAttachmentCount"
+  , -- | @attachmentCount@ is the number of attachments.
   vkAttachmentCount :: Word32
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkPAttachments"
+  , -- | @pAttachments@ is an array of @VkImageView@ handles, each of which will
+  -- be used as the corresponding attachment in a render pass instance.
   vkPAttachments :: Ptr VkImageView
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkWidth"
+  , -- | @width@, @height@ and @layers@ define the dimensions of the framebuffer.
+  -- If the render pass uses multiview, then @layers@ /must/ be one and each
+  -- attachment requires a number of layers that is greater than the maximum
+  -- bit index set in the view mask in the subpasses in which it is used.
   vkWidth :: Word32
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkHeight"
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "height"
   vkHeight :: Word32
-  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkLayers"
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "layers"
   vkLayers :: Word32
   }
   deriving (Eq, Show)
@@ -1907,13 +2010,11 @@
 -- | VkAccessFlags - Bitmask of VkAccessFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkAccessFlags@ is a bitmask type for setting a mask of zero or more
 -- 'VkAccessFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAccessFlagBits',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferMemoryBarrier',
@@ -1924,13 +2025,11 @@
 -- | VkSubpassDescriptionFlags - Bitmask of VkSubpassDescriptionFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkSubpassDescriptionFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkSubpassDescriptionFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSubpassDescription', 'VkSubpassDescriptionFlagBits'
 type VkSubpassDescriptionFlags = VkSubpassDescriptionFlagBits
@@ -1938,26 +2037,22 @@
 -- VkAttachmentDescriptionFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkAttachmentDescriptionFlags@ is a bitmask type for setting a mask of
 -- zero or more 'VkAttachmentDescriptionFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentDescription', 'VkAttachmentDescriptionFlagBits'
 type VkAttachmentDescriptionFlags = VkAttachmentDescriptionFlagBits
 -- | VkDependencyFlags - Bitmask of VkDependencyFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkDependencyFlags@ is a bitmask type for setting a mask of zero or more
 -- 'VkDependencyFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDependencyFlagBits', 'VkSubpassDependency',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPipelineBarrier'
diff --git a/src/Graphics/Vulkan/Core10/Pipeline.hs b/src/Graphics/Vulkan/Core10/Pipeline.hs
--- a/src/Graphics/Vulkan/Core10/Pipeline.hs
+++ b/src/Graphics/Vulkan/Core10/Pipeline.hs
@@ -239,3956 +239,4149 @@
 -- | VkBlendFactor - Framebuffer blending factors
 --
 -- = Description
--- #_description#
---
--- The semantics of each enum value is described in the table below:
---
--- > +-----------------------------------------+-------------------+--------+
--- > | VkBlendFactor                           | RGB Blend Factors | Alpha  |
--- > |                                         | (Sr,Sg,Sb) or     | Blend  |
--- > |                                         | (Dr,Dg,Db)        | Factor |
--- > |                                         |                   | (Sa or |
--- > |                                         |                   | Da)    |
--- > +=========================================+===================+========+
--- > | @VK_BLEND_FACTOR_ZERO@                  | (0,0,0)           | 0      |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE@                   | (1,1,1)           | 1      |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_SRC_COLOR@             | (Rs0,Gs0,Bs0)     | As0    |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR@   | (1-Rs0,1-Gs0,1-Bs | 1-As0  |
--- > |                                         | 0)                |        |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_DST_COLOR@             | (Rd,Gd,Bd)        | Ad     |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR@   | (1-Rd,1-Gd,1-Bd)  | 1-Ad   |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_SRC_ALPHA@             | (As0,As0,As0)     | As0    |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA@   | (1-As0,1-As0,1-As | 1-As0  |
--- > |                                         | 0)                |        |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_DST_ALPHA@             | (Ad,Ad,Ad)        | Ad     |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA@   | (1-Ad,1-Ad,1-Ad)  | 1-Ad   |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_CONSTANT_COLOR@        | (Rc,Gc,Bc)        | Ac     |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COL | (1-Rc,1-Gc,1-Bc)  | 1-Ac   |
--- > | OR@                                     |                   |        |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_CONSTANT_ALPHA@        | (Ac,Ac,Ac)        | Ac     |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALP | (1-Ac,1-Ac,1-Ac)  | 1-Ac   |
--- > | HA@                                     |                   |        |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_SRC_ALPHA_SATURATE@    | (f,f,f); f =      | 1      |
--- > |                                         | min(As0,1-Ad)     |        |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_SRC1_COLOR@            | (Rs1,Gs1,Bs1)     | As1    |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@  | (1-Rs1,1-Gs1,1-Bs | 1-As1  |
--- > |                                         | 1)                |        |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_SRC1_ALPHA@            | (As1,As1,As1)     | As1    |
--- > +-----------------------------------------+-------------------+--------+
--- > | @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@  | (1-As1,1-As1,1-As | 1-As1  |
--- > |                                         | 1)                |        |
--- > +-----------------------------------------+-------------------+--------+
--- >
--- > Blend Factors
---
--- In this table, the following conventions are used:
---
--- -   Rs0,Gs0,Bs0 and As0 represent the first source color R, G, B, and A
---     components, respectively, for the fragment output location
---     corresponding to the color attachment being blended.
---
--- -   Rs1,Gs1,Bs1 and As1 represent the second source color R, G, B, and A
---     components, respectively, used in dual source blending modes, for
---     the fragment output location corresponding to the color attachment
---     being blended.
---
--- -   Rd,Gd,Bd and Ad represent the R, G, B, and A components of the
---     destination color. That is, the color currently in the corresponding
---     color attachment for this fragment\/sample.
---
--- -   Rc,Gc,Bc and Ac represent the blend constant R, G, B, and A
---     components, respectively.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineColorBlendAttachmentState'
-newtype VkBlendFactor = VkBlendFactor Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkBlendFactor where
-  showsPrec _ VK_BLEND_FACTOR_ZERO = showString "VK_BLEND_FACTOR_ZERO"
-  showsPrec _ VK_BLEND_FACTOR_ONE = showString "VK_BLEND_FACTOR_ONE"
-  showsPrec _ VK_BLEND_FACTOR_SRC_COLOR = showString "VK_BLEND_FACTOR_SRC_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_DST_COLOR = showString "VK_BLEND_FACTOR_DST_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_SRC_ALPHA = showString "VK_BLEND_FACTOR_SRC_ALPHA"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
-  showsPrec _ VK_BLEND_FACTOR_DST_ALPHA = showString "VK_BLEND_FACTOR_DST_ALPHA"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
-  showsPrec _ VK_BLEND_FACTOR_CONSTANT_COLOR = showString "VK_BLEND_FACTOR_CONSTANT_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_CONSTANT_ALPHA = showString "VK_BLEND_FACTOR_CONSTANT_ALPHA"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
-  showsPrec _ VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = showString "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
-  showsPrec _ VK_BLEND_FACTOR_SRC1_COLOR = showString "VK_BLEND_FACTOR_SRC1_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
-  showsPrec _ VK_BLEND_FACTOR_SRC1_ALPHA = showString "VK_BLEND_FACTOR_SRC1_ALPHA"
-  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
-  showsPrec p (VkBlendFactor x) = showParen (p >= 11) (showString "VkBlendFactor " . showsPrec 11 x)
-
-instance Read VkBlendFactor where
-  readPrec = parens ( choose [ ("VK_BLEND_FACTOR_ZERO",                     pure VK_BLEND_FACTOR_ZERO)
-                             , ("VK_BLEND_FACTOR_ONE",                      pure VK_BLEND_FACTOR_ONE)
-                             , ("VK_BLEND_FACTOR_SRC_COLOR",                pure VK_BLEND_FACTOR_SRC_COLOR)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR",      pure VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR)
-                             , ("VK_BLEND_FACTOR_DST_COLOR",                pure VK_BLEND_FACTOR_DST_COLOR)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR",      pure VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR)
-                             , ("VK_BLEND_FACTOR_SRC_ALPHA",                pure VK_BLEND_FACTOR_SRC_ALPHA)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA",      pure VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA)
-                             , ("VK_BLEND_FACTOR_DST_ALPHA",                pure VK_BLEND_FACTOR_DST_ALPHA)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA",      pure VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA)
-                             , ("VK_BLEND_FACTOR_CONSTANT_COLOR",           pure VK_BLEND_FACTOR_CONSTANT_COLOR)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR", pure VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR)
-                             , ("VK_BLEND_FACTOR_CONSTANT_ALPHA",           pure VK_BLEND_FACTOR_CONSTANT_ALPHA)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", pure VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA)
-                             , ("VK_BLEND_FACTOR_SRC_ALPHA_SATURATE",       pure VK_BLEND_FACTOR_SRC_ALPHA_SATURATE)
-                             , ("VK_BLEND_FACTOR_SRC1_COLOR",               pure VK_BLEND_FACTOR_SRC1_COLOR)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR",     pure VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR)
-                             , ("VK_BLEND_FACTOR_SRC1_ALPHA",               pure VK_BLEND_FACTOR_SRC1_ALPHA)
-                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA",     pure VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkBlendFactor")
-                        v <- step readPrec
-                        pure (VkBlendFactor v)
-                        )
-                    )
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ZERO"
-pattern VK_BLEND_FACTOR_ZERO :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ZERO = VkBlendFactor 0
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE"
-pattern VK_BLEND_FACTOR_ONE :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE = VkBlendFactor 1
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_COLOR"
-pattern VK_BLEND_FACTOR_SRC_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_SRC_COLOR = VkBlendFactor 2
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = VkBlendFactor 3
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_COLOR"
-pattern VK_BLEND_FACTOR_DST_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_DST_COLOR = VkBlendFactor 4
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
-pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = VkBlendFactor 5
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA"
-pattern VK_BLEND_FACTOR_SRC_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_SRC_ALPHA = VkBlendFactor 6
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = VkBlendFactor 7
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_ALPHA"
-pattern VK_BLEND_FACTOR_DST_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_DST_ALPHA = VkBlendFactor 8
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
-pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = VkBlendFactor 9
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_COLOR"
-pattern VK_BLEND_FACTOR_CONSTANT_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_CONSTANT_COLOR = VkBlendFactor 10
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
-pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = VkBlendFactor 11
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_ALPHA"
-pattern VK_BLEND_FACTOR_CONSTANT_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_CONSTANT_ALPHA = VkBlendFactor 12
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
-pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = VkBlendFactor 13
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
-pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE :: VkBlendFactor
-pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = VkBlendFactor 14
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_COLOR"
-pattern VK_BLEND_FACTOR_SRC1_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_SRC1_COLOR = VkBlendFactor 15
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = VkBlendFactor 16
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_ALPHA"
-pattern VK_BLEND_FACTOR_SRC1_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_SRC1_ALPHA = VkBlendFactor 17
-
--- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA :: VkBlendFactor
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = VkBlendFactor 18
--- ** VkBlendOp
-
--- | VkBlendOp - Framebuffer blending operations
---
--- = Description
--- #_description#
---
--- The semantics of each basic blend operations is described in the table
--- below:
---
--- > +-------------------------------+--------------------+----------------+
--- > | VkBlendOp                     | RGB Components     | Alpha          |
--- > |                               |                    | Component      |
--- > +===============================+====================+================+
--- > | @VK_BLEND_OP_ADD@             | R = Rs0 × Sr + Rd  | A = As0 × Sa + |
--- > |                               | × Dr               | Ad × Da        |
--- > |                               | G = Gs0 × Sg + Gd  |                |
--- > |                               | × Dg               |                |
--- > |                               | B = Bs0 × Sb + Bd  |                |
--- > |                               | × Db               |                |
--- > +-------------------------------+--------------------+----------------+
--- > | @VK_BLEND_OP_SUBTRACT@        | R = Rs0 × Sr - Rd  | A = As0 × Sa - |
--- > |                               | × Dr               | Ad × Da        |
--- > |                               | G = Gs0 × Sg - Gd  |                |
--- > |                               | × Dg               |                |
--- > |                               | B = Bs0 × Sb - Bd  |                |
--- > |                               | × Db               |                |
--- > +-------------------------------+--------------------+----------------+
--- > | @VK_BLEND_OP_REVERSE_SUBTRACT | R = Rd × Dr - Rs0  | A = Ad × Da -  |
--- > | @                             | × Sr               | As0 × Sa       |
--- > |                               | G = Gd × Dg - Gs0  |                |
--- > |                               | × Sg               |                |
--- > |                               | B = Bd × Db - Bs0  |                |
--- > |                               | × Sb               |                |
--- > +-------------------------------+--------------------+----------------+
--- > | @VK_BLEND_OP_MIN@             | R = min(Rs0,Rd)    | A =            |
--- > |                               | G = min(Gs0,Gd)    | min(As0,Ad)    |
--- > |                               | B = min(Bs0,Bd)    |                |
--- > +-------------------------------+--------------------+----------------+
--- > | @VK_BLEND_OP_MAX@             | R = max(Rs0,Rd)    | A =            |
--- > |                               | G = max(Gs0,Gd)    | max(As0,Ad)    |
--- > |                               | B = max(Bs0,Bd)    |                |
--- > +-------------------------------+--------------------+----------------+
--- >
--- > Basic Blend Operations
---
--- In this table, the following conventions are used:
---
--- -   Rs0, Gs0, Bs0 and As0 represent the first source color R, G, B, and
---     A components, respectively.
---
--- -   Rd, Gd, Bd and Ad represent the R, G, B, and A components of the
---     destination color. That is, the color currently in the corresponding
---     color attachment for this fragment\/sample.
---
--- -   Sr, Sg, Sb and Sa represent the source blend factor R, G, B, and A
---     components, respectively.
---
--- -   Dr, Dg, Db and Da represent the destination blend factor R, G, B,
---     and A components, respectively.
---
--- The blending operation produces a new set of values R, G, B and A, which
--- are written to the framebuffer attachment. If blending is not enabled
--- for this attachment, then R, G, B and A are assigned Rs0, Gs0, Bs0 and
--- As0, respectively.
---
--- If the color attachment is fixed-point, the components of the source and
--- destination values and blend factors are each clamped to [0,1] or [-1,1]
--- respectively for an unsigned normalized or signed normalized color
--- attachment prior to evaluating the blend operations. If the color
--- attachment is floating-point, no clamping occurs.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineColorBlendAttachmentState'
-newtype VkBlendOp = VkBlendOp Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkBlendOp where
-  showsPrec _ VK_BLEND_OP_ADD = showString "VK_BLEND_OP_ADD"
-  showsPrec _ VK_BLEND_OP_SUBTRACT = showString "VK_BLEND_OP_SUBTRACT"
-  showsPrec _ VK_BLEND_OP_REVERSE_SUBTRACT = showString "VK_BLEND_OP_REVERSE_SUBTRACT"
-  showsPrec _ VK_BLEND_OP_MIN = showString "VK_BLEND_OP_MIN"
-  showsPrec _ VK_BLEND_OP_MAX = showString "VK_BLEND_OP_MAX"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkBlendOp 1000148000) = showString "VK_BLEND_OP_ZERO_EXT"
-  showsPrec _ (VkBlendOp 1000148001) = showString "VK_BLEND_OP_SRC_EXT"
-  showsPrec _ (VkBlendOp 1000148002) = showString "VK_BLEND_OP_DST_EXT"
-  showsPrec _ (VkBlendOp 1000148003) = showString "VK_BLEND_OP_SRC_OVER_EXT"
-  showsPrec _ (VkBlendOp 1000148004) = showString "VK_BLEND_OP_DST_OVER_EXT"
-  showsPrec _ (VkBlendOp 1000148005) = showString "VK_BLEND_OP_SRC_IN_EXT"
-  showsPrec _ (VkBlendOp 1000148006) = showString "VK_BLEND_OP_DST_IN_EXT"
-  showsPrec _ (VkBlendOp 1000148007) = showString "VK_BLEND_OP_SRC_OUT_EXT"
-  showsPrec _ (VkBlendOp 1000148008) = showString "VK_BLEND_OP_DST_OUT_EXT"
-  showsPrec _ (VkBlendOp 1000148009) = showString "VK_BLEND_OP_SRC_ATOP_EXT"
-  showsPrec _ (VkBlendOp 1000148010) = showString "VK_BLEND_OP_DST_ATOP_EXT"
-  showsPrec _ (VkBlendOp 1000148011) = showString "VK_BLEND_OP_XOR_EXT"
-  showsPrec _ (VkBlendOp 1000148012) = showString "VK_BLEND_OP_MULTIPLY_EXT"
-  showsPrec _ (VkBlendOp 1000148013) = showString "VK_BLEND_OP_SCREEN_EXT"
-  showsPrec _ (VkBlendOp 1000148014) = showString "VK_BLEND_OP_OVERLAY_EXT"
-  showsPrec _ (VkBlendOp 1000148015) = showString "VK_BLEND_OP_DARKEN_EXT"
-  showsPrec _ (VkBlendOp 1000148016) = showString "VK_BLEND_OP_LIGHTEN_EXT"
-  showsPrec _ (VkBlendOp 1000148017) = showString "VK_BLEND_OP_COLORDODGE_EXT"
-  showsPrec _ (VkBlendOp 1000148018) = showString "VK_BLEND_OP_COLORBURN_EXT"
-  showsPrec _ (VkBlendOp 1000148019) = showString "VK_BLEND_OP_HARDLIGHT_EXT"
-  showsPrec _ (VkBlendOp 1000148020) = showString "VK_BLEND_OP_SOFTLIGHT_EXT"
-  showsPrec _ (VkBlendOp 1000148021) = showString "VK_BLEND_OP_DIFFERENCE_EXT"
-  showsPrec _ (VkBlendOp 1000148022) = showString "VK_BLEND_OP_EXCLUSION_EXT"
-  showsPrec _ (VkBlendOp 1000148023) = showString "VK_BLEND_OP_INVERT_EXT"
-  showsPrec _ (VkBlendOp 1000148024) = showString "VK_BLEND_OP_INVERT_RGB_EXT"
-  showsPrec _ (VkBlendOp 1000148025) = showString "VK_BLEND_OP_LINEARDODGE_EXT"
-  showsPrec _ (VkBlendOp 1000148026) = showString "VK_BLEND_OP_LINEARBURN_EXT"
-  showsPrec _ (VkBlendOp 1000148027) = showString "VK_BLEND_OP_VIVIDLIGHT_EXT"
-  showsPrec _ (VkBlendOp 1000148028) = showString "VK_BLEND_OP_LINEARLIGHT_EXT"
-  showsPrec _ (VkBlendOp 1000148029) = showString "VK_BLEND_OP_PINLIGHT_EXT"
-  showsPrec _ (VkBlendOp 1000148030) = showString "VK_BLEND_OP_HARDMIX_EXT"
-  showsPrec _ (VkBlendOp 1000148031) = showString "VK_BLEND_OP_HSL_HUE_EXT"
-  showsPrec _ (VkBlendOp 1000148032) = showString "VK_BLEND_OP_HSL_SATURATION_EXT"
-  showsPrec _ (VkBlendOp 1000148033) = showString "VK_BLEND_OP_HSL_COLOR_EXT"
-  showsPrec _ (VkBlendOp 1000148034) = showString "VK_BLEND_OP_HSL_LUMINOSITY_EXT"
-  showsPrec _ (VkBlendOp 1000148035) = showString "VK_BLEND_OP_PLUS_EXT"
-  showsPrec _ (VkBlendOp 1000148036) = showString "VK_BLEND_OP_PLUS_CLAMPED_EXT"
-  showsPrec _ (VkBlendOp 1000148037) = showString "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
-  showsPrec _ (VkBlendOp 1000148038) = showString "VK_BLEND_OP_PLUS_DARKER_EXT"
-  showsPrec _ (VkBlendOp 1000148039) = showString "VK_BLEND_OP_MINUS_EXT"
-  showsPrec _ (VkBlendOp 1000148040) = showString "VK_BLEND_OP_MINUS_CLAMPED_EXT"
-  showsPrec _ (VkBlendOp 1000148041) = showString "VK_BLEND_OP_CONTRAST_EXT"
-  showsPrec _ (VkBlendOp 1000148042) = showString "VK_BLEND_OP_INVERT_OVG_EXT"
-  showsPrec _ (VkBlendOp 1000148043) = showString "VK_BLEND_OP_RED_EXT"
-  showsPrec _ (VkBlendOp 1000148044) = showString "VK_BLEND_OP_GREEN_EXT"
-  showsPrec _ (VkBlendOp 1000148045) = showString "VK_BLEND_OP_BLUE_EXT"
-  showsPrec p (VkBlendOp x) = showParen (p >= 11) (showString "VkBlendOp " . showsPrec 11 x)
-
-instance Read VkBlendOp where
-  readPrec = parens ( choose [ ("VK_BLEND_OP_ADD",              pure VK_BLEND_OP_ADD)
-                             , ("VK_BLEND_OP_SUBTRACT",         pure VK_BLEND_OP_SUBTRACT)
-                             , ("VK_BLEND_OP_REVERSE_SUBTRACT", pure VK_BLEND_OP_REVERSE_SUBTRACT)
-                             , ("VK_BLEND_OP_MIN",              pure VK_BLEND_OP_MIN)
-                             , ("VK_BLEND_OP_MAX",              pure VK_BLEND_OP_MAX)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_BLEND_OP_ZERO_EXT",               pure (VkBlendOp 1000148000))
-                             , ("VK_BLEND_OP_SRC_EXT",                pure (VkBlendOp 1000148001))
-                             , ("VK_BLEND_OP_DST_EXT",                pure (VkBlendOp 1000148002))
-                             , ("VK_BLEND_OP_SRC_OVER_EXT",           pure (VkBlendOp 1000148003))
-                             , ("VK_BLEND_OP_DST_OVER_EXT",           pure (VkBlendOp 1000148004))
-                             , ("VK_BLEND_OP_SRC_IN_EXT",             pure (VkBlendOp 1000148005))
-                             , ("VK_BLEND_OP_DST_IN_EXT",             pure (VkBlendOp 1000148006))
-                             , ("VK_BLEND_OP_SRC_OUT_EXT",            pure (VkBlendOp 1000148007))
-                             , ("VK_BLEND_OP_DST_OUT_EXT",            pure (VkBlendOp 1000148008))
-                             , ("VK_BLEND_OP_SRC_ATOP_EXT",           pure (VkBlendOp 1000148009))
-                             , ("VK_BLEND_OP_DST_ATOP_EXT",           pure (VkBlendOp 1000148010))
-                             , ("VK_BLEND_OP_XOR_EXT",                pure (VkBlendOp 1000148011))
-                             , ("VK_BLEND_OP_MULTIPLY_EXT",           pure (VkBlendOp 1000148012))
-                             , ("VK_BLEND_OP_SCREEN_EXT",             pure (VkBlendOp 1000148013))
-                             , ("VK_BLEND_OP_OVERLAY_EXT",            pure (VkBlendOp 1000148014))
-                             , ("VK_BLEND_OP_DARKEN_EXT",             pure (VkBlendOp 1000148015))
-                             , ("VK_BLEND_OP_LIGHTEN_EXT",            pure (VkBlendOp 1000148016))
-                             , ("VK_BLEND_OP_COLORDODGE_EXT",         pure (VkBlendOp 1000148017))
-                             , ("VK_BLEND_OP_COLORBURN_EXT",          pure (VkBlendOp 1000148018))
-                             , ("VK_BLEND_OP_HARDLIGHT_EXT",          pure (VkBlendOp 1000148019))
-                             , ("VK_BLEND_OP_SOFTLIGHT_EXT",          pure (VkBlendOp 1000148020))
-                             , ("VK_BLEND_OP_DIFFERENCE_EXT",         pure (VkBlendOp 1000148021))
-                             , ("VK_BLEND_OP_EXCLUSION_EXT",          pure (VkBlendOp 1000148022))
-                             , ("VK_BLEND_OP_INVERT_EXT",             pure (VkBlendOp 1000148023))
-                             , ("VK_BLEND_OP_INVERT_RGB_EXT",         pure (VkBlendOp 1000148024))
-                             , ("VK_BLEND_OP_LINEARDODGE_EXT",        pure (VkBlendOp 1000148025))
-                             , ("VK_BLEND_OP_LINEARBURN_EXT",         pure (VkBlendOp 1000148026))
-                             , ("VK_BLEND_OP_VIVIDLIGHT_EXT",         pure (VkBlendOp 1000148027))
-                             , ("VK_BLEND_OP_LINEARLIGHT_EXT",        pure (VkBlendOp 1000148028))
-                             , ("VK_BLEND_OP_PINLIGHT_EXT",           pure (VkBlendOp 1000148029))
-                             , ("VK_BLEND_OP_HARDMIX_EXT",            pure (VkBlendOp 1000148030))
-                             , ("VK_BLEND_OP_HSL_HUE_EXT",            pure (VkBlendOp 1000148031))
-                             , ("VK_BLEND_OP_HSL_SATURATION_EXT",     pure (VkBlendOp 1000148032))
-                             , ("VK_BLEND_OP_HSL_COLOR_EXT",          pure (VkBlendOp 1000148033))
-                             , ("VK_BLEND_OP_HSL_LUMINOSITY_EXT",     pure (VkBlendOp 1000148034))
-                             , ("VK_BLEND_OP_PLUS_EXT",               pure (VkBlendOp 1000148035))
-                             , ("VK_BLEND_OP_PLUS_CLAMPED_EXT",       pure (VkBlendOp 1000148036))
-                             , ("VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT", pure (VkBlendOp 1000148037))
-                             , ("VK_BLEND_OP_PLUS_DARKER_EXT",        pure (VkBlendOp 1000148038))
-                             , ("VK_BLEND_OP_MINUS_EXT",              pure (VkBlendOp 1000148039))
-                             , ("VK_BLEND_OP_MINUS_CLAMPED_EXT",      pure (VkBlendOp 1000148040))
-                             , ("VK_BLEND_OP_CONTRAST_EXT",           pure (VkBlendOp 1000148041))
-                             , ("VK_BLEND_OP_INVERT_OVG_EXT",         pure (VkBlendOp 1000148042))
-                             , ("VK_BLEND_OP_RED_EXT",                pure (VkBlendOp 1000148043))
-                             , ("VK_BLEND_OP_GREEN_EXT",              pure (VkBlendOp 1000148044))
-                             , ("VK_BLEND_OP_BLUE_EXT",               pure (VkBlendOp 1000148045))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkBlendOp")
-                        v <- step readPrec
-                        pure (VkBlendOp v)
-                        )
-                    )
-
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ADD"
-pattern VK_BLEND_OP_ADD :: VkBlendOp
-pattern VK_BLEND_OP_ADD = VkBlendOp 0
-
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SUBTRACT"
-pattern VK_BLEND_OP_SUBTRACT :: VkBlendOp
-pattern VK_BLEND_OP_SUBTRACT = VkBlendOp 1
-
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_REVERSE_SUBTRACT"
-pattern VK_BLEND_OP_REVERSE_SUBTRACT :: VkBlendOp
-pattern VK_BLEND_OP_REVERSE_SUBTRACT = VkBlendOp 2
-
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MIN"
-pattern VK_BLEND_OP_MIN :: VkBlendOp
-pattern VK_BLEND_OP_MIN = VkBlendOp 3
-
--- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MAX"
-pattern VK_BLEND_OP_MAX :: VkBlendOp
-pattern VK_BLEND_OP_MAX = VkBlendOp 4
--- ** VkCompareOp
-
--- | VkCompareOp - Stencil comparison function
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineDepthStencilStateCreateInfo',
--- 'Graphics.Vulkan.Core10.Sampler.VkSamplerCreateInfo', 'VkStencilOpState'
-newtype VkCompareOp = VkCompareOp Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkCompareOp where
-  showsPrec _ VK_COMPARE_OP_NEVER = showString "VK_COMPARE_OP_NEVER"
-  showsPrec _ VK_COMPARE_OP_LESS = showString "VK_COMPARE_OP_LESS"
-  showsPrec _ VK_COMPARE_OP_EQUAL = showString "VK_COMPARE_OP_EQUAL"
-  showsPrec _ VK_COMPARE_OP_LESS_OR_EQUAL = showString "VK_COMPARE_OP_LESS_OR_EQUAL"
-  showsPrec _ VK_COMPARE_OP_GREATER = showString "VK_COMPARE_OP_GREATER"
-  showsPrec _ VK_COMPARE_OP_NOT_EQUAL = showString "VK_COMPARE_OP_NOT_EQUAL"
-  showsPrec _ VK_COMPARE_OP_GREATER_OR_EQUAL = showString "VK_COMPARE_OP_GREATER_OR_EQUAL"
-  showsPrec _ VK_COMPARE_OP_ALWAYS = showString "VK_COMPARE_OP_ALWAYS"
-  showsPrec p (VkCompareOp x) = showParen (p >= 11) (showString "VkCompareOp " . showsPrec 11 x)
-
-instance Read VkCompareOp where
-  readPrec = parens ( choose [ ("VK_COMPARE_OP_NEVER",            pure VK_COMPARE_OP_NEVER)
-                             , ("VK_COMPARE_OP_LESS",             pure VK_COMPARE_OP_LESS)
-                             , ("VK_COMPARE_OP_EQUAL",            pure VK_COMPARE_OP_EQUAL)
-                             , ("VK_COMPARE_OP_LESS_OR_EQUAL",    pure VK_COMPARE_OP_LESS_OR_EQUAL)
-                             , ("VK_COMPARE_OP_GREATER",          pure VK_COMPARE_OP_GREATER)
-                             , ("VK_COMPARE_OP_NOT_EQUAL",        pure VK_COMPARE_OP_NOT_EQUAL)
-                             , ("VK_COMPARE_OP_GREATER_OR_EQUAL", pure VK_COMPARE_OP_GREATER_OR_EQUAL)
-                             , ("VK_COMPARE_OP_ALWAYS",           pure VK_COMPARE_OP_ALWAYS)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCompareOp")
-                        v <- step readPrec
-                        pure (VkCompareOp v)
-                        )
-                    )
-
--- | @VK_COMPARE_OP_NEVER@ specifies that the test never passes.
-pattern VK_COMPARE_OP_NEVER :: VkCompareOp
-pattern VK_COMPARE_OP_NEVER = VkCompareOp 0
-
--- | @VK_COMPARE_OP_LESS@ specifies that the test passes when R \< S.
-pattern VK_COMPARE_OP_LESS :: VkCompareOp
-pattern VK_COMPARE_OP_LESS = VkCompareOp 1
-
--- | @VK_COMPARE_OP_EQUAL@ specifies that the test passes when R = S.
-pattern VK_COMPARE_OP_EQUAL :: VkCompareOp
-pattern VK_COMPARE_OP_EQUAL = VkCompareOp 2
-
--- | @VK_COMPARE_OP_LESS_OR_EQUAL@ specifies that the test passes when R ≤ S.
-pattern VK_COMPARE_OP_LESS_OR_EQUAL :: VkCompareOp
-pattern VK_COMPARE_OP_LESS_OR_EQUAL = VkCompareOp 3
-
--- | @VK_COMPARE_OP_GREATER@ specifies that the test passes when R > S.
-pattern VK_COMPARE_OP_GREATER :: VkCompareOp
-pattern VK_COMPARE_OP_GREATER = VkCompareOp 4
-
--- | @VK_COMPARE_OP_NOT_EQUAL@ specifies that the test passes when R ≠ S.
-pattern VK_COMPARE_OP_NOT_EQUAL :: VkCompareOp
-pattern VK_COMPARE_OP_NOT_EQUAL = VkCompareOp 5
-
--- | @VK_COMPARE_OP_GREATER_OR_EQUAL@ specifies that the test passes when R ≥
--- S.
-pattern VK_COMPARE_OP_GREATER_OR_EQUAL :: VkCompareOp
-pattern VK_COMPARE_OP_GREATER_OR_EQUAL = VkCompareOp 6
-
--- | @VK_COMPARE_OP_ALWAYS@ specifies that the test always passes.
-pattern VK_COMPARE_OP_ALWAYS :: VkCompareOp
-pattern VK_COMPARE_OP_ALWAYS = VkCompareOp 7
--- ** VkDynamicState
-
--- | VkDynamicState - Indicate which dynamic state is taken from dynamic
--- state commands
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineDynamicStateCreateInfo'
-newtype VkDynamicState = VkDynamicState Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkDynamicState where
-  showsPrec _ VK_DYNAMIC_STATE_VIEWPORT = showString "VK_DYNAMIC_STATE_VIEWPORT"
-  showsPrec _ VK_DYNAMIC_STATE_SCISSOR = showString "VK_DYNAMIC_STATE_SCISSOR"
-  showsPrec _ VK_DYNAMIC_STATE_LINE_WIDTH = showString "VK_DYNAMIC_STATE_LINE_WIDTH"
-  showsPrec _ VK_DYNAMIC_STATE_DEPTH_BIAS = showString "VK_DYNAMIC_STATE_DEPTH_BIAS"
-  showsPrec _ VK_DYNAMIC_STATE_BLEND_CONSTANTS = showString "VK_DYNAMIC_STATE_BLEND_CONSTANTS"
-  showsPrec _ VK_DYNAMIC_STATE_DEPTH_BOUNDS = showString "VK_DYNAMIC_STATE_DEPTH_BOUNDS"
-  showsPrec _ VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = showString "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK"
-  showsPrec _ VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = showString "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK"
-  showsPrec _ VK_DYNAMIC_STATE_STENCIL_REFERENCE = showString "VK_DYNAMIC_STATE_STENCIL_REFERENCE"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkDynamicState 1000087000) = showString "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"
-  showsPrec _ (VkDynamicState 1000099000) = showString "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"
-  showsPrec _ (VkDynamicState 1000143000) = showString "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"
-  showsPrec p (VkDynamicState x) = showParen (p >= 11) (showString "VkDynamicState " . showsPrec 11 x)
-
-instance Read VkDynamicState where
-  readPrec = parens ( choose [ ("VK_DYNAMIC_STATE_VIEWPORT",             pure VK_DYNAMIC_STATE_VIEWPORT)
-                             , ("VK_DYNAMIC_STATE_SCISSOR",              pure VK_DYNAMIC_STATE_SCISSOR)
-                             , ("VK_DYNAMIC_STATE_LINE_WIDTH",           pure VK_DYNAMIC_STATE_LINE_WIDTH)
-                             , ("VK_DYNAMIC_STATE_DEPTH_BIAS",           pure VK_DYNAMIC_STATE_DEPTH_BIAS)
-                             , ("VK_DYNAMIC_STATE_BLEND_CONSTANTS",      pure VK_DYNAMIC_STATE_BLEND_CONSTANTS)
-                             , ("VK_DYNAMIC_STATE_DEPTH_BOUNDS",         pure VK_DYNAMIC_STATE_DEPTH_BOUNDS)
-                             , ("VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK", pure VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK)
-                             , ("VK_DYNAMIC_STATE_STENCIL_WRITE_MASK",   pure VK_DYNAMIC_STATE_STENCIL_WRITE_MASK)
-                             , ("VK_DYNAMIC_STATE_STENCIL_REFERENCE",    pure VK_DYNAMIC_STATE_STENCIL_REFERENCE)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV", pure (VkDynamicState 1000087000))
-                             , ("VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT", pure (VkDynamicState 1000099000))
-                             , ("VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT",  pure (VkDynamicState 1000143000))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDynamicState")
-                        v <- step readPrec
-                        pure (VkDynamicState v)
-                        )
-                    )
-
--- | @VK_DYNAMIC_STATE_VIEWPORT@ specifies that the @pViewports@ state in
--- @VkPipelineViewportStateCreateInfo@ will be ignored and /must/ be set
--- dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetViewport' before
--- any draw commands. The number of viewports used by a pipeline is still
--- specified by the @viewportCount@ member of
--- @VkPipelineViewportStateCreateInfo@.
-pattern VK_DYNAMIC_STATE_VIEWPORT :: VkDynamicState
-pattern VK_DYNAMIC_STATE_VIEWPORT = VkDynamicState 0
-
--- | @VK_DYNAMIC_STATE_SCISSOR@ specifies that the @pScissors@ state in
--- @VkPipelineViewportStateCreateInfo@ will be ignored and /must/ be set
--- dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetScissor' before
--- any draw commands. The number of scissor rectangles used by a pipeline
--- is still specified by the @scissorCount@ member of
--- @VkPipelineViewportStateCreateInfo@.
-pattern VK_DYNAMIC_STATE_SCISSOR :: VkDynamicState
-pattern VK_DYNAMIC_STATE_SCISSOR = VkDynamicState 1
-
--- | @VK_DYNAMIC_STATE_LINE_WIDTH@ specifies that the @lineWidth@ state in
--- @VkPipelineRasterizationStateCreateInfo@ will be ignored and /must/ be
--- set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetLineWidth' before
--- any draw commands that generate line primitives for the rasterizer.
-pattern VK_DYNAMIC_STATE_LINE_WIDTH :: VkDynamicState
-pattern VK_DYNAMIC_STATE_LINE_WIDTH = VkDynamicState 2
-
--- | @VK_DYNAMIC_STATE_DEPTH_BIAS@ specifies that the
--- @depthBiasConstantFactor@, @depthBiasClamp@ and @depthBiasSlopeFactor@
--- states in @VkPipelineRasterizationStateCreateInfo@ will be ignored and
--- /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBias' before
--- any draws are performed with @depthBiasEnable@ in
--- @VkPipelineRasterizationStateCreateInfo@ set to @VK_TRUE@.
-pattern VK_DYNAMIC_STATE_DEPTH_BIAS :: VkDynamicState
-pattern VK_DYNAMIC_STATE_DEPTH_BIAS = VkDynamicState 3
-
--- | @VK_DYNAMIC_STATE_BLEND_CONSTANTS@ specifies that the @blendConstants@
--- state in @VkPipelineColorBlendStateCreateInfo@ will be ignored and
--- /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetBlendConstants'
--- before any draws are performed with a pipeline state with
--- @VkPipelineColorBlendAttachmentState@ member @blendEnable@ set to
--- @VK_TRUE@ and any of the blend functions using a constant blend color.
-pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS :: VkDynamicState
-pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS = VkDynamicState 4
-
--- | @VK_DYNAMIC_STATE_DEPTH_BOUNDS@ specifies that the @minDepthBounds@ and
--- @maxDepthBounds@ states of 'VkPipelineDepthStencilStateCreateInfo' will
--- be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBounds'
--- before any draws are performed with a pipeline state with
--- @VkPipelineDepthStencilStateCreateInfo@ member @depthBoundsTestEnable@
--- set to @VK_TRUE@.
-pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS :: VkDynamicState
-pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS = VkDynamicState 5
-
--- | @VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK@ specifies that the @compareMask@
--- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
--- @back@ will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilCompareMask'
--- before any draws are performed with a pipeline state with
--- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
--- to @VK_TRUE@
-pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK :: VkDynamicState
-pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = VkDynamicState 6
-
--- | @VK_DYNAMIC_STATE_STENCIL_WRITE_MASK@ specifies that the @writeMask@
--- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
--- @back@ will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilWriteMask'
--- before any draws are performed with a pipeline state with
--- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
--- to @VK_TRUE@
-pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK :: VkDynamicState
-pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = VkDynamicState 7
-
--- | @VK_DYNAMIC_STATE_STENCIL_REFERENCE@ specifies that the @reference@
--- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
--- @back@ will be ignored and /must/ be set dynamically with
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilReference'
--- before any draws are performed with a pipeline state with
--- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
--- to @VK_TRUE@
-pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE :: VkDynamicState
-pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE = VkDynamicState 8
--- ** VkPolygonMode
-
--- | VkPolygonMode - Control polygon rasterization mode
---
--- = Description
--- #_description#
---
--- -   @VK_POLYGON_MODE_POINT@ specifies that polygon vertices are drawn as
---     points.
---
--- -   @VK_POLYGON_MODE_LINE@ specifies that polygon edges are drawn as
---     line segments.
---
--- -   @VK_POLYGON_MODE_FILL@ specifies that polygons are rendered using
---     the polygon rasterization rules in this section.
---
--- These modes affect only the final rasterization of polygons: in
--- particular, a polygon’s vertices are shaded and the polygon is clipped
--- and possibly culled before these modes are applied.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineRasterizationStateCreateInfo'
-newtype VkPolygonMode = VkPolygonMode Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkPolygonMode where
-  showsPrec _ VK_POLYGON_MODE_FILL = showString "VK_POLYGON_MODE_FILL"
-  showsPrec _ VK_POLYGON_MODE_LINE = showString "VK_POLYGON_MODE_LINE"
-  showsPrec _ VK_POLYGON_MODE_POINT = showString "VK_POLYGON_MODE_POINT"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkPolygonMode 1000153000) = showString "VK_POLYGON_MODE_FILL_RECTANGLE_NV"
-  showsPrec p (VkPolygonMode x) = showParen (p >= 11) (showString "VkPolygonMode " . showsPrec 11 x)
-
-instance Read VkPolygonMode where
-  readPrec = parens ( choose [ ("VK_POLYGON_MODE_FILL",  pure VK_POLYGON_MODE_FILL)
-                             , ("VK_POLYGON_MODE_LINE",  pure VK_POLYGON_MODE_LINE)
-                             , ("VK_POLYGON_MODE_POINT", pure VK_POLYGON_MODE_POINT)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_POLYGON_MODE_FILL_RECTANGLE_NV", pure (VkPolygonMode 1000153000))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPolygonMode")
-                        v <- step readPrec
-                        pure (VkPolygonMode v)
-                        )
-                    )
-
--- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_FILL"
-pattern VK_POLYGON_MODE_FILL :: VkPolygonMode
-pattern VK_POLYGON_MODE_FILL = VkPolygonMode 0
-
--- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_LINE"
-pattern VK_POLYGON_MODE_LINE :: VkPolygonMode
-pattern VK_POLYGON_MODE_LINE = VkPolygonMode 1
-
--- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_POINT"
-pattern VK_POLYGON_MODE_POINT :: VkPolygonMode
-pattern VK_POLYGON_MODE_POINT = VkPolygonMode 2
--- ** VkFrontFace
-
--- | VkFrontFace - Interpret polygon front-facing orientation
---
--- = Description
--- #_description#
---
--- -   @VK_FRONT_FACE_COUNTER_CLOCKWISE@ specifies that a triangle with
---     positive area is considered front-facing.
---
--- -   @VK_FRONT_FACE_CLOCKWISE@ specifies that a triangle with negative
---     area is considered front-facing.
---
--- Any triangle which is not front-facing is back-facing, including
--- zero-area triangles.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineRasterizationStateCreateInfo'
-newtype VkFrontFace = VkFrontFace Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkFrontFace where
-  showsPrec _ VK_FRONT_FACE_COUNTER_CLOCKWISE = showString "VK_FRONT_FACE_COUNTER_CLOCKWISE"
-  showsPrec _ VK_FRONT_FACE_CLOCKWISE = showString "VK_FRONT_FACE_CLOCKWISE"
-  showsPrec p (VkFrontFace x) = showParen (p >= 11) (showString "VkFrontFace " . showsPrec 11 x)
-
-instance Read VkFrontFace where
-  readPrec = parens ( choose [ ("VK_FRONT_FACE_COUNTER_CLOCKWISE", pure VK_FRONT_FACE_COUNTER_CLOCKWISE)
-                             , ("VK_FRONT_FACE_CLOCKWISE",         pure VK_FRONT_FACE_CLOCKWISE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkFrontFace")
-                        v <- step readPrec
-                        pure (VkFrontFace v)
-                        )
-                    )
-
--- No documentation found for Nested "VkFrontFace" "VK_FRONT_FACE_COUNTER_CLOCKWISE"
-pattern VK_FRONT_FACE_COUNTER_CLOCKWISE :: VkFrontFace
-pattern VK_FRONT_FACE_COUNTER_CLOCKWISE = VkFrontFace 0
-
--- No documentation found for Nested "VkFrontFace" "VK_FRONT_FACE_CLOCKWISE"
-pattern VK_FRONT_FACE_CLOCKWISE :: VkFrontFace
-pattern VK_FRONT_FACE_CLOCKWISE = VkFrontFace 1
--- ** VkLogicOp
-
--- | VkLogicOp - Framebuffer logical operations
---
--- = Description
--- #_description#
---
--- The logical operations supported by Vulkan are summarized in the
--- following table in which
---
--- -   ¬ is bitwise invert,
---
--- -   ∧ is bitwise and,
---
--- -   ∨ is bitwise or,
---
--- -   ⊕ is bitwise exclusive or,
---
--- -   s is the fragment’s Rs0, Gs0, Bs0 or As0 component value for the
---     fragment output corresponding to the color attachment being updated,
---     and
---
--- -   d is the color attachment’s R, G, B or A component value:
---
--- > +-----------------------------------+-----------------------------------+
--- > | Mode                              | Operation                         |
--- > +===================================+===================================+
--- > | @VK_LOGIC_OP_CLEAR@               | 0                                 |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_AND@                 | s ∧ d                             |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_AND_REVERSE@         | s ∧ ¬ d                           |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_COPY@                | s                                 |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_AND_INVERTED@        | ¬ s ∧ d                           |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_NO_OP@               | d                                 |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_XOR@                 | s ⊕ d                             |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_OR@                  | s ∨ d                             |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_NOR@                 | ¬ (s ∨ d)                         |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_EQUIVALENT@          | ¬ (s ⊕ d)                         |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_INVERT@              | ¬ d                               |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_OR_REVERSE@          | s ∨ ¬ d                           |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_COPY_INVERTED@       | ¬ s                               |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_OR_INVERTED@         | ¬ s ∨ d                           |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_NAND@                | ¬ (s ∧ d)                         |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_LOGIC_OP_SET@                 | all 1s                            |
--- > +-----------------------------------+-----------------------------------+
--- >
--- > Logical Operations
---
--- The result of the logical operation is then written to the color
--- attachment as controlled by the component write mask, described in
--- <{html_spec_relative}#framebuffer-blendoperations Blend Operations>.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineColorBlendStateCreateInfo'
-newtype VkLogicOp = VkLogicOp Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkLogicOp where
-  showsPrec _ VK_LOGIC_OP_CLEAR = showString "VK_LOGIC_OP_CLEAR"
-  showsPrec _ VK_LOGIC_OP_AND = showString "VK_LOGIC_OP_AND"
-  showsPrec _ VK_LOGIC_OP_AND_REVERSE = showString "VK_LOGIC_OP_AND_REVERSE"
-  showsPrec _ VK_LOGIC_OP_COPY = showString "VK_LOGIC_OP_COPY"
-  showsPrec _ VK_LOGIC_OP_AND_INVERTED = showString "VK_LOGIC_OP_AND_INVERTED"
-  showsPrec _ VK_LOGIC_OP_NO_OP = showString "VK_LOGIC_OP_NO_OP"
-  showsPrec _ VK_LOGIC_OP_XOR = showString "VK_LOGIC_OP_XOR"
-  showsPrec _ VK_LOGIC_OP_OR = showString "VK_LOGIC_OP_OR"
-  showsPrec _ VK_LOGIC_OP_NOR = showString "VK_LOGIC_OP_NOR"
-  showsPrec _ VK_LOGIC_OP_EQUIVALENT = showString "VK_LOGIC_OP_EQUIVALENT"
-  showsPrec _ VK_LOGIC_OP_INVERT = showString "VK_LOGIC_OP_INVERT"
-  showsPrec _ VK_LOGIC_OP_OR_REVERSE = showString "VK_LOGIC_OP_OR_REVERSE"
-  showsPrec _ VK_LOGIC_OP_COPY_INVERTED = showString "VK_LOGIC_OP_COPY_INVERTED"
-  showsPrec _ VK_LOGIC_OP_OR_INVERTED = showString "VK_LOGIC_OP_OR_INVERTED"
-  showsPrec _ VK_LOGIC_OP_NAND = showString "VK_LOGIC_OP_NAND"
-  showsPrec _ VK_LOGIC_OP_SET = showString "VK_LOGIC_OP_SET"
-  showsPrec p (VkLogicOp x) = showParen (p >= 11) (showString "VkLogicOp " . showsPrec 11 x)
-
-instance Read VkLogicOp where
-  readPrec = parens ( choose [ ("VK_LOGIC_OP_CLEAR",         pure VK_LOGIC_OP_CLEAR)
-                             , ("VK_LOGIC_OP_AND",           pure VK_LOGIC_OP_AND)
-                             , ("VK_LOGIC_OP_AND_REVERSE",   pure VK_LOGIC_OP_AND_REVERSE)
-                             , ("VK_LOGIC_OP_COPY",          pure VK_LOGIC_OP_COPY)
-                             , ("VK_LOGIC_OP_AND_INVERTED",  pure VK_LOGIC_OP_AND_INVERTED)
-                             , ("VK_LOGIC_OP_NO_OP",         pure VK_LOGIC_OP_NO_OP)
-                             , ("VK_LOGIC_OP_XOR",           pure VK_LOGIC_OP_XOR)
-                             , ("VK_LOGIC_OP_OR",            pure VK_LOGIC_OP_OR)
-                             , ("VK_LOGIC_OP_NOR",           pure VK_LOGIC_OP_NOR)
-                             , ("VK_LOGIC_OP_EQUIVALENT",    pure VK_LOGIC_OP_EQUIVALENT)
-                             , ("VK_LOGIC_OP_INVERT",        pure VK_LOGIC_OP_INVERT)
-                             , ("VK_LOGIC_OP_OR_REVERSE",    pure VK_LOGIC_OP_OR_REVERSE)
-                             , ("VK_LOGIC_OP_COPY_INVERTED", pure VK_LOGIC_OP_COPY_INVERTED)
-                             , ("VK_LOGIC_OP_OR_INVERTED",   pure VK_LOGIC_OP_OR_INVERTED)
-                             , ("VK_LOGIC_OP_NAND",          pure VK_LOGIC_OP_NAND)
-                             , ("VK_LOGIC_OP_SET",           pure VK_LOGIC_OP_SET)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkLogicOp")
-                        v <- step readPrec
-                        pure (VkLogicOp v)
-                        )
-                    )
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_CLEAR"
-pattern VK_LOGIC_OP_CLEAR :: VkLogicOp
-pattern VK_LOGIC_OP_CLEAR = VkLogicOp 0
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND"
-pattern VK_LOGIC_OP_AND :: VkLogicOp
-pattern VK_LOGIC_OP_AND = VkLogicOp 1
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_REVERSE"
-pattern VK_LOGIC_OP_AND_REVERSE :: VkLogicOp
-pattern VK_LOGIC_OP_AND_REVERSE = VkLogicOp 2
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY"
-pattern VK_LOGIC_OP_COPY :: VkLogicOp
-pattern VK_LOGIC_OP_COPY = VkLogicOp 3
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_INVERTED"
-pattern VK_LOGIC_OP_AND_INVERTED :: VkLogicOp
-pattern VK_LOGIC_OP_AND_INVERTED = VkLogicOp 4
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NO_OP"
-pattern VK_LOGIC_OP_NO_OP :: VkLogicOp
-pattern VK_LOGIC_OP_NO_OP = VkLogicOp 5
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_XOR"
-pattern VK_LOGIC_OP_XOR :: VkLogicOp
-pattern VK_LOGIC_OP_XOR = VkLogicOp 6
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR"
-pattern VK_LOGIC_OP_OR :: VkLogicOp
-pattern VK_LOGIC_OP_OR = VkLogicOp 7
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NOR"
-pattern VK_LOGIC_OP_NOR :: VkLogicOp
-pattern VK_LOGIC_OP_NOR = VkLogicOp 8
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_EQUIVALENT"
-pattern VK_LOGIC_OP_EQUIVALENT :: VkLogicOp
-pattern VK_LOGIC_OP_EQUIVALENT = VkLogicOp 9
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_INVERT"
-pattern VK_LOGIC_OP_INVERT :: VkLogicOp
-pattern VK_LOGIC_OP_INVERT = VkLogicOp 10
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_REVERSE"
-pattern VK_LOGIC_OP_OR_REVERSE :: VkLogicOp
-pattern VK_LOGIC_OP_OR_REVERSE = VkLogicOp 11
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY_INVERTED"
-pattern VK_LOGIC_OP_COPY_INVERTED :: VkLogicOp
-pattern VK_LOGIC_OP_COPY_INVERTED = VkLogicOp 12
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_INVERTED"
-pattern VK_LOGIC_OP_OR_INVERTED :: VkLogicOp
-pattern VK_LOGIC_OP_OR_INVERTED = VkLogicOp 13
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NAND"
-pattern VK_LOGIC_OP_NAND :: VkLogicOp
-pattern VK_LOGIC_OP_NAND = VkLogicOp 14
-
--- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_SET"
-pattern VK_LOGIC_OP_SET :: VkLogicOp
-pattern VK_LOGIC_OP_SET = VkLogicOp 15
--- ** VkPrimitiveTopology
-
--- | VkPrimitiveTopology - Supported primitive topologies
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineInputAssemblyStateCreateInfo'
-newtype VkPrimitiveTopology = VkPrimitiveTopology Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkPrimitiveTopology where
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_POINT_LIST = showString "VK_PRIMITIVE_TOPOLOGY_POINT_LIST"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_LIST = showString "VK_PRIMITIVE_TOPOLOGY_LINE_LIST"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = showString "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
-  showsPrec _ VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = showString "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"
-  showsPrec p (VkPrimitiveTopology x) = showParen (p >= 11) (showString "VkPrimitiveTopology " . showsPrec 11 x)
-
-instance Read VkPrimitiveTopology where
-  readPrec = parens ( choose [ ("VK_PRIMITIVE_TOPOLOGY_POINT_LIST",                    pure VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
-                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_LIST",                     pure VK_PRIMITIVE_TOPOLOGY_LINE_LIST)
-                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_STRIP",                    pure VK_PRIMITIVE_TOPOLOGY_LINE_STRIP)
-                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST",                 pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
-                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP",                pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
-                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN",                  pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN)
-                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY",      pure VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY)
-                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY",     pure VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY)
-                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY",  pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY)
-                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY", pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY)
-                             , ("VK_PRIMITIVE_TOPOLOGY_PATCH_LIST",                    pure VK_PRIMITIVE_TOPOLOGY_PATCH_LIST)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPrimitiveTopology")
-                        v <- step readPrec
-                        pure (VkPrimitiveTopology v)
-                        )
-                    )
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_POINT_LIST"
-pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST = VkPrimitiveTopology 0
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_LIST"
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST = VkPrimitiveTopology 1
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = VkPrimitiveTopology 2
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = VkPrimitiveTopology 3
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = VkPrimitiveTopology 4
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = VkPrimitiveTopology 5
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 6
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 7
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 8
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 9
-
--- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"
-pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST :: VkPrimitiveTopology
-pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = VkPrimitiveTopology 10
--- ** VkStencilOp
-
--- | VkStencilOp - Stencil comparison function
---
--- = Description
--- #_description#
---
--- -   @VK_STENCIL_OP_KEEP@ keeps the current value.
---
--- -   @VK_STENCIL_OP_ZERO@ sets the value to 0.
---
--- -   @VK_STENCIL_OP_REPLACE@ sets the value to @reference@.
---
--- -   @VK_STENCIL_OP_INCREMENT_AND_CLAMP@ increments the current value and
---     clamps to the maximum representable unsigned value.
---
--- -   @VK_STENCIL_OP_DECREMENT_AND_CLAMP@ decrements the current value and
---     clamps to 0.
---
--- -   @VK_STENCIL_OP_INVERT@ bitwise-inverts the current value.
---
--- -   @VK_STENCIL_OP_INCREMENT_AND_WRAP@ increments the current value and
---     wraps to 0 when the maximum value would have been exceeded.
---
--- -   @VK_STENCIL_OP_DECREMENT_AND_WRAP@ decrements the current value and
---     wraps to the maximum possible value when the value would go below 0.
---
--- For purposes of increment and decrement, the stencil bits are considered
--- as an unsigned integer.
---
--- If the stencil test fails, the sample’s coverage bit is cleared in the
--- fragment. If there is no stencil framebuffer attachment, stencil
--- modification /cannot/ occur, and it is as if the stencil tests always
--- pass.
---
--- If the stencil test passes, the @writeMask@ member of the
--- 'VkStencilOpState' structures controls how the updated stencil value is
--- written to the stencil framebuffer attachment.
---
--- The least significant s bits of @writeMask@, where s is the number of
--- bits in the stencil framebuffer attachment, specify an integer mask.
--- Where a 1 appears in this mask, the corresponding bit in the stencil
--- value in the depth\/stencil attachment is written; where a 0 appears,
--- the bit is not written. The @writeMask@ value uses either the
--- front-facing or back-facing state based on the facingness of the
--- fragment. Fragments generated by front-facing primitives use the front
--- mask and fragments generated by back-facing primitives use the back
--- mask.
---
--- = See Also
--- #_see_also#
---
--- 'VkStencilOpState'
-newtype VkStencilOp = VkStencilOp Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkStencilOp where
-  showsPrec _ VK_STENCIL_OP_KEEP = showString "VK_STENCIL_OP_KEEP"
-  showsPrec _ VK_STENCIL_OP_ZERO = showString "VK_STENCIL_OP_ZERO"
-  showsPrec _ VK_STENCIL_OP_REPLACE = showString "VK_STENCIL_OP_REPLACE"
-  showsPrec _ VK_STENCIL_OP_INCREMENT_AND_CLAMP = showString "VK_STENCIL_OP_INCREMENT_AND_CLAMP"
-  showsPrec _ VK_STENCIL_OP_DECREMENT_AND_CLAMP = showString "VK_STENCIL_OP_DECREMENT_AND_CLAMP"
-  showsPrec _ VK_STENCIL_OP_INVERT = showString "VK_STENCIL_OP_INVERT"
-  showsPrec _ VK_STENCIL_OP_INCREMENT_AND_WRAP = showString "VK_STENCIL_OP_INCREMENT_AND_WRAP"
-  showsPrec _ VK_STENCIL_OP_DECREMENT_AND_WRAP = showString "VK_STENCIL_OP_DECREMENT_AND_WRAP"
-  showsPrec p (VkStencilOp x) = showParen (p >= 11) (showString "VkStencilOp " . showsPrec 11 x)
-
-instance Read VkStencilOp where
-  readPrec = parens ( choose [ ("VK_STENCIL_OP_KEEP",                pure VK_STENCIL_OP_KEEP)
-                             , ("VK_STENCIL_OP_ZERO",                pure VK_STENCIL_OP_ZERO)
-                             , ("VK_STENCIL_OP_REPLACE",             pure VK_STENCIL_OP_REPLACE)
-                             , ("VK_STENCIL_OP_INCREMENT_AND_CLAMP", pure VK_STENCIL_OP_INCREMENT_AND_CLAMP)
-                             , ("VK_STENCIL_OP_DECREMENT_AND_CLAMP", pure VK_STENCIL_OP_DECREMENT_AND_CLAMP)
-                             , ("VK_STENCIL_OP_INVERT",              pure VK_STENCIL_OP_INVERT)
-                             , ("VK_STENCIL_OP_INCREMENT_AND_WRAP",  pure VK_STENCIL_OP_INCREMENT_AND_WRAP)
-                             , ("VK_STENCIL_OP_DECREMENT_AND_WRAP",  pure VK_STENCIL_OP_DECREMENT_AND_WRAP)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkStencilOp")
-                        v <- step readPrec
-                        pure (VkStencilOp v)
-                        )
-                    )
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_KEEP"
-pattern VK_STENCIL_OP_KEEP :: VkStencilOp
-pattern VK_STENCIL_OP_KEEP = VkStencilOp 0
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_ZERO"
-pattern VK_STENCIL_OP_ZERO :: VkStencilOp
-pattern VK_STENCIL_OP_ZERO = VkStencilOp 1
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_REPLACE"
-pattern VK_STENCIL_OP_REPLACE :: VkStencilOp
-pattern VK_STENCIL_OP_REPLACE = VkStencilOp 2
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INCREMENT_AND_CLAMP"
-pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP :: VkStencilOp
-pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP = VkStencilOp 3
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_DECREMENT_AND_CLAMP"
-pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP :: VkStencilOp
-pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP = VkStencilOp 4
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INVERT"
-pattern VK_STENCIL_OP_INVERT :: VkStencilOp
-pattern VK_STENCIL_OP_INVERT = VkStencilOp 5
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INCREMENT_AND_WRAP"
-pattern VK_STENCIL_OP_INCREMENT_AND_WRAP :: VkStencilOp
-pattern VK_STENCIL_OP_INCREMENT_AND_WRAP = VkStencilOp 6
-
--- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_DECREMENT_AND_WRAP"
-pattern VK_STENCIL_OP_DECREMENT_AND_WRAP :: VkStencilOp
-pattern VK_STENCIL_OP_DECREMENT_AND_WRAP = VkStencilOp 7
--- ** VkVertexInputRate
-
--- | VkVertexInputRate - Specify rate at which vertex attributes are pulled
--- from buffers
---
--- = See Also
--- #_see_also#
---
--- 'VkVertexInputBindingDescription'
-newtype VkVertexInputRate = VkVertexInputRate Int32
-  deriving (Eq, Ord, Storable)
-
-instance Show VkVertexInputRate where
-  showsPrec _ VK_VERTEX_INPUT_RATE_VERTEX = showString "VK_VERTEX_INPUT_RATE_VERTEX"
-  showsPrec _ VK_VERTEX_INPUT_RATE_INSTANCE = showString "VK_VERTEX_INPUT_RATE_INSTANCE"
-  showsPrec p (VkVertexInputRate x) = showParen (p >= 11) (showString "VkVertexInputRate " . showsPrec 11 x)
-
-instance Read VkVertexInputRate where
-  readPrec = parens ( choose [ ("VK_VERTEX_INPUT_RATE_VERTEX",   pure VK_VERTEX_INPUT_RATE_VERTEX)
-                             , ("VK_VERTEX_INPUT_RATE_INSTANCE", pure VK_VERTEX_INPUT_RATE_INSTANCE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkVertexInputRate")
-                        v <- step readPrec
-                        pure (VkVertexInputRate v)
-                        )
-                    )
-
--- | @VK_VERTEX_INPUT_RATE_VERTEX@ specifies that vertex attribute addressing
--- is a function of the vertex index.
-pattern VK_VERTEX_INPUT_RATE_VERTEX :: VkVertexInputRate
-pattern VK_VERTEX_INPUT_RATE_VERTEX = VkVertexInputRate 0
-
--- | @VK_VERTEX_INPUT_RATE_INSTANCE@ specifies that vertex attribute
--- addressing is a function of the instance index.
-pattern VK_VERTEX_INPUT_RATE_INSTANCE :: VkVertexInputRate
-pattern VK_VERTEX_INPUT_RATE_INSTANCE = VkVertexInputRate 1
--- ** VkPipelineDepthStencilStateCreateFlags
-
--- | VkPipelineDepthStencilStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineDepthStencilStateCreateFlags@ is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineDepthStencilStateCreateInfo'
-newtype VkPipelineDepthStencilStateCreateFlags = VkPipelineDepthStencilStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineDepthStencilStateCreateFlags where
-  
-  showsPrec p (VkPipelineDepthStencilStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineDepthStencilStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineDepthStencilStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineDepthStencilStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineDepthStencilStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineDynamicStateCreateFlags
-
--- | VkPipelineDynamicStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineDynamicStateCreateFlags@ is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineDynamicStateCreateInfo'
-newtype VkPipelineDynamicStateCreateFlags = VkPipelineDynamicStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineDynamicStateCreateFlags where
-  
-  showsPrec p (VkPipelineDynamicStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineDynamicStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineDynamicStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineDynamicStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineDynamicStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineColorBlendStateCreateFlags
-
--- | VkPipelineColorBlendStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineColorBlendStateCreateFlags@ is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineColorBlendStateCreateInfo'
-newtype VkPipelineColorBlendStateCreateFlags = VkPipelineColorBlendStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineColorBlendStateCreateFlags where
-  
-  showsPrec p (VkPipelineColorBlendStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineColorBlendStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineColorBlendStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineColorBlendStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineColorBlendStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineMultisampleStateCreateFlags
-
--- | VkPipelineMultisampleStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineMultisampleStateCreateFlags@ is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineMultisampleStateCreateInfo'
-newtype VkPipelineMultisampleStateCreateFlags = VkPipelineMultisampleStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineMultisampleStateCreateFlags where
-  
-  showsPrec p (VkPipelineMultisampleStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineMultisampleStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineMultisampleStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineMultisampleStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineMultisampleStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineRasterizationStateCreateFlags
-
--- | VkPipelineRasterizationStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineRasterizationStateCreateFlags@ is a bitmask type for setting
--- a mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineRasterizationStateCreateInfo'
-newtype VkPipelineRasterizationStateCreateFlags = VkPipelineRasterizationStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineRasterizationStateCreateFlags where
-  
-  showsPrec p (VkPipelineRasterizationStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineRasterizationStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineRasterizationStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineRasterizationStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineRasterizationStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineViewportStateCreateFlags
-
--- | VkPipelineViewportStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineViewportStateCreateFlags@ is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineViewportStateCreateInfo'
-newtype VkPipelineViewportStateCreateFlags = VkPipelineViewportStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineViewportStateCreateFlags where
-  
-  showsPrec p (VkPipelineViewportStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineViewportStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineViewportStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineViewportStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineViewportStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineTessellationStateCreateFlags
-
--- | VkPipelineTessellationStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineTessellationStateCreateFlags@ is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineTessellationStateCreateInfo'
-newtype VkPipelineTessellationStateCreateFlags = VkPipelineTessellationStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineTessellationStateCreateFlags where
-  
-  showsPrec p (VkPipelineTessellationStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineTessellationStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineTessellationStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineTessellationStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineTessellationStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineInputAssemblyStateCreateFlags
-
--- | VkPipelineInputAssemblyStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineInputAssemblyStateCreateFlags@ is a bitmask type for setting
--- a mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineInputAssemblyStateCreateInfo'
-newtype VkPipelineInputAssemblyStateCreateFlags = VkPipelineInputAssemblyStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineInputAssemblyStateCreateFlags where
-  
-  showsPrec p (VkPipelineInputAssemblyStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineInputAssemblyStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineInputAssemblyStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineInputAssemblyStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineInputAssemblyStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineVertexInputStateCreateFlags
-
--- | VkPipelineVertexInputStateCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineVertexInputStateCreateFlags@ is a bitmask type for setting a
--- mask, but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineVertexInputStateCreateInfo'
-newtype VkPipelineVertexInputStateCreateFlags = VkPipelineVertexInputStateCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineVertexInputStateCreateFlags where
-  
-  showsPrec p (VkPipelineVertexInputStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineVertexInputStateCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineVertexInputStateCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineVertexInputStateCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineVertexInputStateCreateFlags v)
-                        )
-                    )
-
-
--- ** VkPipelineShaderStageCreateFlags
-
--- | VkPipelineShaderStageCreateFlags - Reserved for future use
---
--- = Description
--- #_description#
---
--- @VkPipelineShaderStageCreateFlags@ is a bitmask type for setting a mask,
--- but is currently reserved for future use.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineShaderStageCreateInfo'
-newtype VkPipelineShaderStageCreateFlags = VkPipelineShaderStageCreateFlags VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineShaderStageCreateFlags where
-  
-  showsPrec p (VkPipelineShaderStageCreateFlags x) = showParen (p >= 11) (showString "VkPipelineShaderStageCreateFlags " . showsPrec 11 x)
-
-instance Read VkPipelineShaderStageCreateFlags where
-  readPrec = parens ( choose [ 
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineShaderStageCreateFlags")
-                        v <- step readPrec
-                        pure (VkPipelineShaderStageCreateFlags v)
-                        )
-                    )
-
-
--- ** VkShaderStageFlagBits
-
--- | VkShaderStageFlagBits - Bitmask specifying a pipeline stage
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineShaderStageCreateInfo',
--- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD'
-newtype VkShaderStageFlagBits = VkShaderStageFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkShaderStageFlagBits where
-  showsPrec _ VK_SHADER_STAGE_VERTEX_BIT = showString "VK_SHADER_STAGE_VERTEX_BIT"
-  showsPrec _ VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = showString "VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"
-  showsPrec _ VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = showString "VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"
-  showsPrec _ VK_SHADER_STAGE_GEOMETRY_BIT = showString "VK_SHADER_STAGE_GEOMETRY_BIT"
-  showsPrec _ VK_SHADER_STAGE_FRAGMENT_BIT = showString "VK_SHADER_STAGE_FRAGMENT_BIT"
-  showsPrec _ VK_SHADER_STAGE_COMPUTE_BIT = showString "VK_SHADER_STAGE_COMPUTE_BIT"
-  showsPrec _ VK_SHADER_STAGE_ALL_GRAPHICS = showString "VK_SHADER_STAGE_ALL_GRAPHICS"
-  showsPrec _ VK_SHADER_STAGE_ALL = showString "VK_SHADER_STAGE_ALL"
-  showsPrec p (VkShaderStageFlagBits x) = showParen (p >= 11) (showString "VkShaderStageFlagBits " . showsPrec 11 x)
-
-instance Read VkShaderStageFlagBits where
-  readPrec = parens ( choose [ ("VK_SHADER_STAGE_VERTEX_BIT",                  pure VK_SHADER_STAGE_VERTEX_BIT)
-                             , ("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT",    pure VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
-                             , ("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", pure VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
-                             , ("VK_SHADER_STAGE_GEOMETRY_BIT",                pure VK_SHADER_STAGE_GEOMETRY_BIT)
-                             , ("VK_SHADER_STAGE_FRAGMENT_BIT",                pure VK_SHADER_STAGE_FRAGMENT_BIT)
-                             , ("VK_SHADER_STAGE_COMPUTE_BIT",                 pure VK_SHADER_STAGE_COMPUTE_BIT)
-                             , ("VK_SHADER_STAGE_ALL_GRAPHICS",                pure VK_SHADER_STAGE_ALL_GRAPHICS)
-                             , ("VK_SHADER_STAGE_ALL",                         pure VK_SHADER_STAGE_ALL)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkShaderStageFlagBits")
-                        v <- step readPrec
-                        pure (VkShaderStageFlagBits v)
-                        )
-                    )
-
--- | @VK_SHADER_STAGE_VERTEX_BIT@ specifies the vertex stage.
-pattern VK_SHADER_STAGE_VERTEX_BIT :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_VERTEX_BIT = VkShaderStageFlagBits 0x00000001
-
--- | @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ specifies the tessellation
--- control stage.
-pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = VkShaderStageFlagBits 0x00000002
-
--- | @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@ specifies the tessellation
--- evaluation stage.
-pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = VkShaderStageFlagBits 0x00000004
-
--- | @VK_SHADER_STAGE_GEOMETRY_BIT@ specifies the geometry stage.
-pattern VK_SHADER_STAGE_GEOMETRY_BIT :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_GEOMETRY_BIT = VkShaderStageFlagBits 0x00000008
-
--- | @VK_SHADER_STAGE_FRAGMENT_BIT@ specifies the fragment stage.
-pattern VK_SHADER_STAGE_FRAGMENT_BIT :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_FRAGMENT_BIT = VkShaderStageFlagBits 0x00000010
-
--- | @VK_SHADER_STAGE_COMPUTE_BIT@ specifies the compute stage.
-pattern VK_SHADER_STAGE_COMPUTE_BIT :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_COMPUTE_BIT = VkShaderStageFlagBits 0x00000020
-
--- | @VK_SHADER_STAGE_ALL_GRAPHICS@ is a combination of bits used as
--- shorthand to specify all graphics stages defined above (excluding the
--- compute stage).
-pattern VK_SHADER_STAGE_ALL_GRAPHICS :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_ALL_GRAPHICS = VkShaderStageFlagBits 0x0000001f
-
--- | @VK_SHADER_STAGE_ALL@ is a combination of bits used as shorthand to
--- specify all shader stages supported by the device, including all
--- additional stages which are introduced by extensions.
-pattern VK_SHADER_STAGE_ALL :: VkShaderStageFlagBits
-pattern VK_SHADER_STAGE_ALL = VkShaderStageFlagBits 0x7fffffff
--- ** VkPipelineCreateFlagBits
-
--- | VkPipelineCreateFlagBits - Bitmask controlling how a pipeline is created
---
--- = Description
--- #_description#
---
--- -   @VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT@ specifies that the
---     created pipeline will not be optimized. Using this flag /may/ reduce
---     the time taken to create the pipeline.
---
--- -   @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ specifies that the
---     pipeline to be created is allowed to be the parent of a pipeline
---     that will be created in a subsequent call to
---     'vkCreateGraphicsPipelines' or 'vkCreateComputePipelines'.
---
--- -   @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ specifies that the pipeline to
---     be created will be a child of a previously created parent pipeline.
---
--- It is valid to set both @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ and
--- @VK_PIPELINE_CREATE_DERIVATIVE_BIT@. This allows a pipeline to be both a
--- parent and possibly a child in a pipeline hierarchy. See
--- <{html_spec_relative}#pipelines-pipeline-derivatives Pipeline Derivatives>
--- for more information.
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineCreateFlags'
-newtype VkPipelineCreateFlagBits = VkPipelineCreateFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkPipelineCreateFlagBits where
-  showsPrec _ VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = showString "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
-  showsPrec _ VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = showString "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
-  showsPrec _ VK_PIPELINE_CREATE_DERIVATIVE_BIT = showString "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
-  -- The following values are from extensions, the patterns themselves are exported from the extension modules
-  showsPrec _ (VkPipelineCreateFlagBits 0x00000008) = showString "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
-  showsPrec _ (VkPipelineCreateFlagBits 0x00000010) = showString "VK_PIPELINE_CREATE_DISPATCH_BASE"
-  showsPrec p (VkPipelineCreateFlagBits x) = showParen (p >= 11) (showString "VkPipelineCreateFlagBits " . showsPrec 11 x)
-
-instance Read VkPipelineCreateFlagBits where
-  readPrec = parens ( choose [ ("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT", pure VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
-                             , ("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT",    pure VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
-                             , ("VK_PIPELINE_CREATE_DERIVATIVE_BIT",           pure VK_PIPELINE_CREATE_DERIVATIVE_BIT)
-                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
-                               ("VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT", pure (VkPipelineCreateFlagBits 0x00000008))
-                             , ("VK_PIPELINE_CREATE_DISPATCH_BASE",                    pure (VkPipelineCreateFlagBits 0x00000010))
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkPipelineCreateFlagBits v)
-                        )
-                    )
-
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
-pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT :: VkPipelineCreateFlagBits
-pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = VkPipelineCreateFlagBits 0x00000001
-
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
-pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT :: VkPipelineCreateFlagBits
-pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = VkPipelineCreateFlagBits 0x00000002
-
--- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
-pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT :: VkPipelineCreateFlagBits
-pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT = VkPipelineCreateFlagBits 0x00000004
--- ** VkColorComponentFlagBits
-
--- | VkColorComponentFlagBits - Bitmask controlling which components are
--- written to the framebuffer
---
--- = Description
--- #_description#
---
--- -   @VK_COLOR_COMPONENT_R_BIT@ specifies that the R value is written to
---     the color attachment for the appropriate sample. Otherwise, the
---     value in memory is unmodified.
---
--- -   @VK_COLOR_COMPONENT_G_BIT@ specifies that the G value is written to
---     the color attachment for the appropriate sample. Otherwise, the
---     value in memory is unmodified.
---
--- -   @VK_COLOR_COMPONENT_B_BIT@ specifies that the B value is written to
---     the color attachment for the appropriate sample. Otherwise, the
---     value in memory is unmodified.
---
--- -   @VK_COLOR_COMPONENT_A_BIT@ specifies that the A value is written to
---     the color attachment for the appropriate sample. Otherwise, the
---     value in memory is unmodified.
---
--- The color write mask operation is applied regardless of whether blending
--- is enabled.
---
--- = See Also
--- #_see_also#
---
--- 'VkColorComponentFlags'
-newtype VkColorComponentFlagBits = VkColorComponentFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkColorComponentFlagBits where
-  showsPrec _ VK_COLOR_COMPONENT_R_BIT = showString "VK_COLOR_COMPONENT_R_BIT"
-  showsPrec _ VK_COLOR_COMPONENT_G_BIT = showString "VK_COLOR_COMPONENT_G_BIT"
-  showsPrec _ VK_COLOR_COMPONENT_B_BIT = showString "VK_COLOR_COMPONENT_B_BIT"
-  showsPrec _ VK_COLOR_COMPONENT_A_BIT = showString "VK_COLOR_COMPONENT_A_BIT"
-  showsPrec p (VkColorComponentFlagBits x) = showParen (p >= 11) (showString "VkColorComponentFlagBits " . showsPrec 11 x)
-
-instance Read VkColorComponentFlagBits where
-  readPrec = parens ( choose [ ("VK_COLOR_COMPONENT_R_BIT", pure VK_COLOR_COMPONENT_R_BIT)
-                             , ("VK_COLOR_COMPONENT_G_BIT", pure VK_COLOR_COMPONENT_G_BIT)
-                             , ("VK_COLOR_COMPONENT_B_BIT", pure VK_COLOR_COMPONENT_B_BIT)
-                             , ("VK_COLOR_COMPONENT_A_BIT", pure VK_COLOR_COMPONENT_A_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkColorComponentFlagBits")
-                        v <- step readPrec
-                        pure (VkColorComponentFlagBits v)
-                        )
-                    )
-
--- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_R_BIT"
-pattern VK_COLOR_COMPONENT_R_BIT :: VkColorComponentFlagBits
-pattern VK_COLOR_COMPONENT_R_BIT = VkColorComponentFlagBits 0x00000001
-
--- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_G_BIT"
-pattern VK_COLOR_COMPONENT_G_BIT :: VkColorComponentFlagBits
-pattern VK_COLOR_COMPONENT_G_BIT = VkColorComponentFlagBits 0x00000002
-
--- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_B_BIT"
-pattern VK_COLOR_COMPONENT_B_BIT :: VkColorComponentFlagBits
-pattern VK_COLOR_COMPONENT_B_BIT = VkColorComponentFlagBits 0x00000004
-
--- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_A_BIT"
-pattern VK_COLOR_COMPONENT_A_BIT :: VkColorComponentFlagBits
-pattern VK_COLOR_COMPONENT_A_BIT = VkColorComponentFlagBits 0x00000008
--- ** VkCullModeFlagBits
-
--- | VkCullModeFlagBits - Bitmask controlling triangle culling
---
--- = Description
--- #_description#
---
--- -   @VK_CULL_MODE_NONE@ specifies that no triangles are discarded
---
--- -   @VK_CULL_MODE_FRONT_BIT@ specifies that front-facing triangles are
---     discarded
---
--- -   @VK_CULL_MODE_BACK_BIT@ specifies that back-facing triangles are
---     discarded
---
--- -   @VK_CULL_MODE_FRONT_AND_BACK@ specifies that all triangles are
---     discarded.
---
--- Following culling, fragments are produced for any triangles which have
--- not been discarded.
---
--- = See Also
--- #_see_also#
---
--- 'VkCullModeFlags'
-newtype VkCullModeFlagBits = VkCullModeFlagBits VkFlags
-  deriving (Eq, Ord, Storable, Bits, FiniteBits)
-
-instance Show VkCullModeFlagBits where
-  showsPrec _ VK_CULL_MODE_FRONT_BIT = showString "VK_CULL_MODE_FRONT_BIT"
-  showsPrec _ VK_CULL_MODE_BACK_BIT = showString "VK_CULL_MODE_BACK_BIT"
-  showsPrec _ VK_CULL_MODE_NONE = showString "VK_CULL_MODE_NONE"
-  showsPrec _ VK_CULL_MODE_FRONT_AND_BACK = showString "VK_CULL_MODE_FRONT_AND_BACK"
-  showsPrec p (VkCullModeFlagBits x) = showParen (p >= 11) (showString "VkCullModeFlagBits " . showsPrec 11 x)
-
-instance Read VkCullModeFlagBits where
-  readPrec = parens ( choose [ ("VK_CULL_MODE_FRONT_BIT",      pure VK_CULL_MODE_FRONT_BIT)
-                             , ("VK_CULL_MODE_BACK_BIT",       pure VK_CULL_MODE_BACK_BIT)
-                             , ("VK_CULL_MODE_NONE",           pure VK_CULL_MODE_NONE)
-                             , ("VK_CULL_MODE_FRONT_AND_BACK", pure VK_CULL_MODE_FRONT_AND_BACK)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCullModeFlagBits")
-                        v <- step readPrec
-                        pure (VkCullModeFlagBits v)
-                        )
-                    )
-
--- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_FRONT_BIT"
-pattern VK_CULL_MODE_FRONT_BIT :: VkCullModeFlagBits
-pattern VK_CULL_MODE_FRONT_BIT = VkCullModeFlagBits 0x00000001
-
--- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_BACK_BIT"
-pattern VK_CULL_MODE_BACK_BIT :: VkCullModeFlagBits
-pattern VK_CULL_MODE_BACK_BIT = VkCullModeFlagBits 0x00000002
-
--- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_NONE"
-pattern VK_CULL_MODE_NONE :: VkCullModeFlagBits
-pattern VK_CULL_MODE_NONE = VkCullModeFlagBits 0x00000000
-
--- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_FRONT_AND_BACK"
-pattern VK_CULL_MODE_FRONT_AND_BACK :: VkCullModeFlagBits
-pattern VK_CULL_MODE_FRONT_AND_BACK = VkCullModeFlagBits 0x00000003
--- | Dummy data to tag the 'Ptr' with
-data VkPipeline_T
--- | VkPipeline - Opaque handle to a pipeline object
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTablePipelineEntryNVX',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindPipeline',
--- 'vkCreateComputePipelines', 'vkCreateGraphicsPipelines',
--- 'vkDestroyPipeline',
--- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD'
-type VkPipeline = Ptr VkPipeline_T
--- | Dummy data to tag the 'Ptr' with
-data VkPipelineLayout_T
--- | VkPipelineLayout - Opaque handle to a pipeline layout object
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'VkComputePipelineCreateInfo',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateCreateInfo',
--- 'VkGraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableDescriptorSetEntryNVX',
--- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTablePushConstantEntryNVX',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindDescriptorSets',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPushConstants',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetWithTemplateKHR',
--- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout',
--- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout'
-type VkPipelineLayout = Ptr VkPipelineLayout_T
--- | Dummy data to tag the 'Ptr' with
-data VkRenderPass_T
--- | VkRenderPass - Opaque handle to a render pass object
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferInheritanceInfo',
--- 'Graphics.Vulkan.Core10.Pass.VkFramebufferCreateInfo',
--- 'VkGraphicsPipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
--- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass',
--- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass',
--- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity'
-type VkRenderPass = Ptr VkRenderPass_T
--- | vkCreateGraphicsPipelines - Create graphics pipelines
---
--- = Parameters
--- #_parameters#
---
--- -   @device@ is the logical device that creates the graphics pipelines.
---
--- -   @pipelineCache@ is either
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', indicating that
---     pipeline caching is disabled; or the handle of a valid
---     <{html_spec_relative}#pipelines-cache pipeline cache> object, in
---     which case use of that cache is enabled for the duration of the
---     command.
---
--- -   @createInfoCount@ is the length of the @pCreateInfos@ and
---     @pPipelines@ arrays.
---
--- -   @pCreateInfos@ is an array of @VkGraphicsPipelineCreateInfo@
---     structures.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- -   @pPipelines@ is a pointer to an array in which the resulting
---     graphics pipeline objects are returned.
---
--- = Description
--- #_description#
---
--- The 'VkGraphicsPipelineCreateInfo' 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
---     @VK_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
---     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, the base pipeline /must/
---     have been created with the
---     @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ flag set
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid @VkDevice@ handle
---
--- -   If @pipelineCache@ is not
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipelineCache@
---     /must/ be a valid @VkPipelineCache@ handle
---
--- -   @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid @VkGraphicsPipelineCreateInfo@ structures
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid @VkAllocationCallbacks@ structure
---
--- -   @pPipelines@ /must/ be a valid pointer to an array of
---     @createInfoCount@ @VkPipeline@ 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
---
--- [<#fundamentals-successcodes Success>]
---     -   @VK_SUCCESS@
---
--- [<#fundamentals-errorcodes Failure>]
---     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
---
---     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
---
---     -   @VK_ERROR_INVALID_SHADER_NV@
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
--- 'VkGraphicsPipelineCreateInfo', 'VkPipeline',
--- 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'
-foreign import ccall "vkCreateGraphicsPipelines" vkCreateGraphicsPipelines :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr VkGraphicsPipelineCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelines" ::: Ptr VkPipeline) -> IO VkResult
--- | vkCreateComputePipelines - Creates a new compute pipeline object
---
--- = Parameters
--- #_parameters#
---
--- -   @device@ is the logical device that creates the compute pipelines.
---
--- -   @pipelineCache@ is either
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', indicating that
---     pipeline caching is disabled; or the handle of a valid
---     <{html_spec_relative}#pipelines-cache pipeline cache> object, in
---     which case use of that cache is enabled for the duration of the
---     command.
---
--- -   @createInfoCount@ is the length of the @pCreateInfos@ and
---     @pPipelines@ arrays.
---
--- -   @pCreateInfos@ is an array of @VkComputePipelineCreateInfo@
---     structures.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- -   @pPipelines@ is a pointer to an array in which the resulting compute
---     pipeline objects are returned.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If the @flags@ member of any element of @pCreateInfos@ contains the
---     @VK_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
---     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, the base pipeline /must/
---     have been created with the
---     @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ flag set
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid @VkDevice@ handle
---
--- -   If @pipelineCache@ is not
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipelineCache@
---     /must/ be a valid @VkPipelineCache@ handle
---
--- -   @pCreateInfos@ /must/ be a valid pointer to an array of
---     @createInfoCount@ valid @VkComputePipelineCreateInfo@ structures
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid @VkAllocationCallbacks@ structure
---
--- -   @pPipelines@ /must/ be a valid pointer to an array of
---     @createInfoCount@ @VkPipeline@ 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
---
--- [<#fundamentals-successcodes Success>]
---     -   @VK_SUCCESS@
---
--- [<#fundamentals-errorcodes Failure>]
---     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
---
---     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
---
---     -   @VK_ERROR_INVALID_SHADER_NV@
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
--- 'VkComputePipelineCreateInfo',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkPipeline',
--- 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'
-foreign import ccall "vkCreateComputePipelines" vkCreateComputePipelines :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr VkComputePipelineCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelines" ::: Ptr VkPipeline) -> IO VkResult
--- | vkDestroyPipeline - Destroy a pipeline object
---
--- = Parameters
--- #_parameters#
---
--- -   @device@ is the logical device that destroys the pipeline.
---
--- -   @pipeline@ is the handle of the pipeline to destroy.
---
--- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   All submitted commands that refer to @pipeline@ /must/ have
---     completed execution
---
--- -   If @VkAllocationCallbacks@ were provided when @pipeline@ was
---     created, a compatible set of callbacks /must/ be provided here
---
--- -   If no @VkAllocationCallbacks@ were provided when @pipeline@ was
---     created, @pAllocator@ /must/ be @NULL@
---
--- == Valid Usage (Implicit)
---
--- -   @device@ /must/ be a valid @VkDevice@ handle
---
--- -   If @pipeline@ is not
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipeline@ /must/
---     be a valid @VkPipeline@ handle
---
--- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
---     pointer to a valid @VkAllocationCallbacks@ 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
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkPipeline'
-foreign import ccall "vkDestroyPipeline" vkDestroyPipeline :: ("device" ::: VkDevice) -> ("pipeline" ::: VkPipeline) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
--- | VkOffset2D - Structure specifying a two-dimensional offset
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPlaneCapabilitiesKHR',
--- 'VkRect2D',
--- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkRectLayerKHR'
-data VkOffset2D = VkOffset2D
-  { -- No documentation found for Nested "VkOffset2D" "vkX"
-  vkX :: Int32
-  , -- No documentation found for Nested "VkOffset2D" "vkY"
-  vkY :: Int32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkOffset2D where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek ptr = VkOffset2D <$> peek (ptr `plusPtr` 0)
-                        <*> peek (ptr `plusPtr` 4)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset2D))
-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset2D))
--- | VkExtent2D - Structure specifying a two-dimensional extent
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayModeParametersKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPlaneCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPropertiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplaySurfaceCreateInfoKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkMultisamplePropertiesEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT',
--- 'VkRect2D',
--- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkRectLayerKHR',
--- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT',
--- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
--- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
--- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity'
-data VkExtent2D = VkExtent2D
-  { -- No documentation found for Nested "VkExtent2D" "vkWidth"
-  vkWidth :: Word32
-  , -- No documentation found for Nested "VkExtent2D" "vkHeight"
-  vkHeight :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkExtent2D where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek ptr = VkExtent2D <$> peek (ptr `plusPtr` 0)
-                        <*> peek (ptr `plusPtr` 4)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent2D))
-                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent2D))
--- | VkViewport - Structure specifying a viewport
---
--- = Description
--- #_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
--- <<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIYAAABMCAYAAACoCs9DAAAABmJLR0QA/wD/AP+gvaeTAAAGHElEQVR4nO2de4gVZRTAf2psm6t/uNYmakmapkaZadjDMKM3mfRHRCFRFFSCoRT0ohKCwqT+6AkZ/WOWllZIj+1B2dvYtrTCR2bKKkkvI9vaDNfbH2du3zfjvO7emfnu3Xt+MDA7c+abMzvnnjlzvjPfB43FK0ApZHnCpVK1yGGuFSiYIcBWb30c5vo73aij1BqHA/9iPMYUt+ootcJpGKPoofE8ZyIDXSvgiGnW+kbggCtFahU1DI0vQlHDgC+caaHUFMHA82S36ii1wnSMUfxNeOD5M+H5jvKyoBBNHdKI0fh0az0s8GwD9nlLGzAU6AV2WjLrc9RPccQyzC//8Ri5ecir7G/ABQXopTjmS4xhXBeyfxDwiLf/a2BscaoprmjCH3ieFNg/HHjX2/cS0FKodooz4gLPKcAOJJ64q3jVFJfciDGMz6ztVwJ/Ab8DlzjQS3HM0xjDeAxJ8C2xtq12p5rikk6MESwC2vHnJ3qBE51ppzihCdiPMYJu4CBSpHPQ2r7KlYKKG+zAswT8Aczx9q1CvUbDYgeeu4CJ1r7JiEGo12hAgoFnkJX4vcbk4lRTXGIHnmEZz0n4vcbK4lRTXBEMPKO62p9HvUZDMY10NZ4TUa/RUNiBZ1KX+QrUa/Rr5gNbvOVXzM3eZ22/1pM9AtjkbfsR/2vtT972TZ6cUue8THwVVgk415M9M4XsdwXqriiKoiiKoiiKoiiKoihKHiwmOROoS/9YFhNCow6DoCSghqGEooahhKKGoSiKoiiKoiiKoiiHcBnhadqHvf2twL3AN8gIOHuBN4GZgXYGeG21I1XePUjx7gPA4FyvQMmFxYQbxtXA6Rxayl9eDgAXeW0MBV6LkCsBbxVyJUqmjEd+/TOB3ZibOQ8Zv2I5cAVS5r8A/8CsG4FmoAPxDguB84DLgbX4jWNGURdUQ8wCvsf8D5rzOtEpwH2IK+9CXPs/wB7gA+BB5MPgvtCC+TTwILAd4xFs5uK/4SuAV5FhoG0GIh8IleX6/Ui+Fi3Ao/gHg8ncMJqA6/H/k0vIjVsHfMShwyu/gAyLWAlnB9q4JUKuNSC3jeghF5+x5O6oUJ96ZRZyb8IeqZkahv3NZwkZvGx8QGYAMtLdLktuC3B0BedZiN/ooj46Hh7Q56qYNm3DmF+BLvVICzLmR9lLrAOeJEfDuMlqeEWC7LH4vxFtr+A8y63j7omRm2rJ7UU8WhTvWLLnV6BLPfIccp3dyGNzAHAbBRjGfuCoFPKLAsqclfI8m61jTo2Ru8aSezGhzT2WbFtKPeqV1cD7wHHWtqoMI223+4fALynk1gT+nhMq5WcIMMFb7wY2xMjaE9B8HCM3Chjhre9G4qD+zBLkzW1HVg0mTUuxAUk2fZqyvS7Eu5TfEsalOGYqxkC/Qp6TUdhTSsTNTNRoMxh1ZN1gkmGsp/K5OWzDSOO+7JsdNz/ZIOSVGeTVNq1n0TnP+kDWFVzNSCayzLYUx6T9dU/CpLc3I3mUKNJ6FiWCrA1jChIRl1mb4pi0HqMSL6Aeo0qyNoy51voG5H06jqGYvMifxI9ak9aARmFyKF2kC5qVAFkaxmDgBuvvW1McU0ngmfaR02iBZy5kaRh3YnIdTwHvpTimksCzPP96L9KBVm2bSgxZzaI4A9Mf0YEkuqK4EDEigOOt7XOQ5FY3cKm3bRnyqGnCBJ69wBve+lLgdWA20sEH/jHC5yET3fUAF6e+mmjGADdn0E6QXuDuHNp1ykhMl/kOkvtIlhL/LeUnntwg5M0jTvYMT/b+BLnPq7vE/5mZcJ6+LnnMLZ9rSjyJVsStlxDjSJPQqmcaxjCqeZQMA95GxuXuQopktlfRXj3wLdk8koLEBd11RStm/tKd+DtvlNqg8EfJkZjHxw9IQKbUHoUaRhtSsV1C6gmPyfNkSlUUZhgjMCV+W5EMYxzlop3ReSmkxFJI8DkSKQSZgBjFbKQQRumnpMl8jkaqwCcgvZrnoEbR70nyGGOQ1PZY7+9W4iunbIb1VSnFPUmGcTvGKECympVUfyvF0Yn/U4rWwP7ym2SZZ4GHohpLMgwdiql+OIHob2zA1NWWiS2Q/g/CKZj9Ff7zqAAAAABJRU5ErkJggg== stem 64a1b37b405b2e2dc919e83a12e9feba>>,
--- 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@.
---
--- The width and height of the
--- <{html_spec_relative}#features-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
--- <{html_spec_relative}#features-limits-viewportSubPixelBits implementation-dependent precision>.
---
--- == Valid Usage
---
--- -   @width@ /must/ be greater than @0.0@
---
--- -   @width@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxViewportDimensions@[0]
---
--- -   @height@ /must/ be greater than @0.0@
---
--- -   The absolute value of @height@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@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@ + @height@) /must/ be less than or equal to
---     @viewportBoundsRange@[1]
---
--- -   @minDepth@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- -   @maxDepth@ /must/ be between @0.0@ and @1.0@, inclusive
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineViewportStateCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetViewport'
-data VkViewport = VkViewport
-  { -- No documentation found for Nested "VkViewport" "vkX"
-  vkX :: CFloat
-  , -- No documentation found for Nested "VkViewport" "vkY"
-  vkY :: CFloat
-  , -- No documentation found for Nested "VkViewport" "vkWidth"
-  vkWidth :: CFloat
-  , -- No documentation found for Nested "VkViewport" "vkHeight"
-  vkHeight :: CFloat
-  , -- No documentation found for Nested "VkViewport" "vkMinDepth"
-  vkMinDepth :: CFloat
-  , -- No documentation found for Nested "VkViewport" "vkMaxDepth"
-  vkMaxDepth :: CFloat
-  }
-  deriving (Eq, Show)
-
-instance Storable VkViewport where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek ptr = VkViewport <$> peek (ptr `plusPtr` 0)
-                        <*> peek (ptr `plusPtr` 4)
-                        <*> peek (ptr `plusPtr` 8)
-                        <*> peek (ptr `plusPtr` 12)
-                        <*> peek (ptr `plusPtr` 16)
-                        <*> peek (ptr `plusPtr` 20)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkViewport))
-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkViewport))
-                *> poke (ptr `plusPtr` 8) (vkWidth (poked :: VkViewport))
-                *> poke (ptr `plusPtr` 12) (vkHeight (poked :: VkViewport))
-                *> poke (ptr `plusPtr` 16) (vkMinDepth (poked :: VkViewport))
-                *> poke (ptr `plusPtr` 20) (vkMaxDepth (poked :: VkViewport))
--- | VkRect2D - Structure specifying a two-dimensional subregion
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkClearRect',
--- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupRenderPassBeginInfo',
--- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.VkDisplayPresentInfoKHR',
--- 'VkExtent2D', 'VkOffset2D',
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPipelineDiscardRectangleStateCreateInfoEXT',
--- 'VkPipelineViewportStateCreateInfo',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
--- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.vkCmdSetDiscardRectangleEXT',
--- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetScissor',
--- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetPhysicalDevicePresentRectanglesKHR'
-data VkRect2D = VkRect2D
-  { -- No documentation found for Nested "VkRect2D" "vkOffset"
-  vkOffset :: VkOffset2D
-  , -- No documentation found for Nested "VkRect2D" "vkExtent"
-  vkExtent :: VkExtent2D
-  }
-  deriving (Eq, Show)
-
-instance Storable VkRect2D where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek ptr = VkRect2D <$> peek (ptr `plusPtr` 0)
-                      <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect2D))
-                *> poke (ptr `plusPtr` 8) (vkExtent (poked :: VkRect2D))
--- | VkSpecializationMapEntry - Structure specifying a specialization map
--- entry
---
--- = Description
--- #_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 @VkBool32@
---
--- = See Also
--- #_see_also#
---
--- 'VkSpecializationInfo'
-data VkSpecializationMapEntry = VkSpecializationMapEntry
-  { -- No documentation found for Nested "VkSpecializationMapEntry" "vkConstantID"
-  vkConstantID :: Word32
-  , -- No documentation found for Nested "VkSpecializationMapEntry" "vkOffset"
-  vkOffset :: Word32
-  , -- No documentation found for Nested "VkSpecializationMapEntry" "vkSize"
-  vkSize :: CSize
-  }
-  deriving (Eq, Show)
-
-instance Storable VkSpecializationMapEntry where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek ptr = VkSpecializationMapEntry <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 4)
-                                      <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkConstantID (poked :: VkSpecializationMapEntry))
-                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkSpecializationMapEntry))
-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSpecializationMapEntry))
--- | VkSpecializationInfo - Structure specifying specialization info
---
--- = Description
--- #_description#
---
--- @pMapEntries@ points to a structure of type 'VkSpecializationMapEntry'.
---
--- == 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@
---
--- -   If @mapEntryCount@ is not @0@, @pMapEntries@ /must/ be a valid
---     pointer to an array of @mapEntryCount@ valid
---     @VkSpecializationMapEntry@ structures
---
--- == Valid Usage (Implicit)
---
--- -   If @dataSize@ is not @0@, @pData@ /must/ be a valid pointer to an
---     array of @dataSize@ bytes
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineShaderStageCreateInfo', 'VkSpecializationMapEntry'
-data VkSpecializationInfo = VkSpecializationInfo
-  { -- No documentation found for Nested "VkSpecializationInfo" "vkMapEntryCount"
-  vkMapEntryCount :: Word32
-  , -- No documentation found for Nested "VkSpecializationInfo" "vkPMapEntries"
-  vkPMapEntries :: Ptr VkSpecializationMapEntry
-  , -- No documentation found for Nested "VkSpecializationInfo" "vkDataSize"
-  vkDataSize :: CSize
-  , -- No documentation found for Nested "VkSpecializationInfo" "vkPData"
-  vkPData :: Ptr ()
-  }
-  deriving (Eq, Show)
-
-instance Storable VkSpecializationInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkSpecializationInfo <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 8)
-                                  <*> peek (ptr `plusPtr` 16)
-                                  <*> peek (ptr `plusPtr` 24)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMapEntryCount (poked :: VkSpecializationInfo))
-                *> poke (ptr `plusPtr` 8) (vkPMapEntries (poked :: VkSpecializationInfo))
-                *> poke (ptr `plusPtr` 16) (vkDataSize (poked :: VkSpecializationInfo))
-                *> poke (ptr `plusPtr` 24) (vkPData (poked :: VkSpecializationInfo))
--- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a
--- newly created pipeline shader stage
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @stage@ /must/ not be
---     @VK_SHADER_STAGE_GEOMETRY_BIT@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @stage@ /must/ not be
---     @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ or
---     @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@
---
--- -   @stage@ /must/ not be @VK_SHADER_STAGE_ALL_GRAPHICS@, or
---     @VK_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
---     @VkPhysicalDeviceLimits@::@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
---     @VkPhysicalDeviceLimits@::@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
---     @VkPhysicalDeviceLimits@::@maxCombinedClipAndCullDistances@
---
--- -   If the identified entry point includes any variable in its interface
---     that is declared with the @SampleMask@ @BuiltIn@ decoration, that
---     variable /must/ not have an array size greater than
---     @VkPhysicalDeviceLimits@::@maxSampleMaskWords@
---
--- -   If @stage@ is @VK_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 @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ or
---     @VK_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
---     @VkPhysicalDeviceLimits@::@maxTessellationPatchSize@
---
--- -   If @stage@ is @VK_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 @VkPhysicalDeviceLimits@::@maxGeometryOutputVertices@
---
--- -   If @stage@ is @VK_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
---     @VkPhysicalDeviceLimits@::@maxGeometryShaderInvocations@
---
--- -   If @stage@ is @VK_SHADER_STAGE_GEOMETRY_BIT@, 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 @VK_SHADER_STAGE_GEOMETRY_BIT@, 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 @VK_SHADER_STAGE_FRAGMENT_BIT@, the identified entry
---     point /must/ not include any output variables in its interface
---     decorated with @CullDistance@
---
--- -   If @stage@ is @VK_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
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @stage@ /must/ be a valid 'VkShaderStageFlagBits' value
---
--- -   @module@ /must/ be a valid @VkShaderModule@ handle
---
--- -   @pName@ /must/ be a null-terminated UTF-8 string
---
--- -   If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
---     be a valid pointer to a valid @VkSpecializationInfo@ structure
---
--- = See Also
--- #_see_also#
---
--- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineShaderStageCreateFlags',
--- 'Graphics.Vulkan.Core10.Shader.VkShaderModule', 'VkShaderStageFlagBits',
--- 'VkSpecializationInfo', 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineShaderStageCreateInfo = VkPipelineShaderStageCreateInfo
-  { -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineShaderStageCreateFlags
-  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkStage"
-  vkStage :: VkShaderStageFlagBits
-  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkModule"
-  vkModule :: VkShaderModule
-  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkPName"
-  vkPName :: Ptr CChar
-  , -- No documentation found for Nested "VkPipelineShaderStageCreateInfo" "vkPSpecializationInfo"
-  vkPSpecializationInfo :: Ptr VkSpecializationInfo
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineShaderStageCreateInfo where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkPipelineShaderStageCreateInfo <$> peek (ptr `plusPtr` 0)
-                                             <*> peek (ptr `plusPtr` 8)
-                                             <*> peek (ptr `plusPtr` 16)
-                                             <*> peek (ptr `plusPtr` 20)
-                                             <*> peek (ptr `plusPtr` 24)
-                                             <*> peek (ptr `plusPtr` 32)
-                                             <*> peek (ptr `plusPtr` 40)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineShaderStageCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineShaderStageCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineShaderStageCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkStage (poked :: VkPipelineShaderStageCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkModule (poked :: VkPipelineShaderStageCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPName (poked :: VkPipelineShaderStageCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPSpecializationInfo (poked :: VkPipelineShaderStageCreateInfo))
--- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly
--- created compute pipeline
---
--- = Description
--- #_description#
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <{html_spec_relative}#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- @stage@ points to a structure of type @VkPipelineShaderStageCreateInfo@.
---
--- == Valid Usage
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be a
---     valid handle to a compute @VkPipeline@
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineHandle@ is
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
---     @basePipelineIndex@ /must/ be a valid index into the calling
---     command’s @pCreateInfos@ parameter
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/ be
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineHandle@ is not
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
---     @basePipelineIndex@ /must/ be -1
---
--- -   The @stage@ member of @stage@ /must/ be
---     @VK_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
---     <{html_spec_relative}#interfaces Shader Interfaces> chapter
---
--- -   @layout@ /must/ be
---     <{html_spec_relative}#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
---     @VkPhysicalDeviceLimits@::@maxPerStageResources@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be a valid combination of 'VkPipelineCreateFlagBits'
---     values
---
--- -   @stage@ /must/ be a valid @VkPipelineShaderStageCreateInfo@
---     structure
---
--- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
---
--- -   Both of @basePipelineHandle@, and @layout@ that are valid handles
---     /must/ have been created, allocated, or retrieved from the same
---     @VkDevice@
---
--- = See Also
--- #_see_also#
---
--- 'VkPipeline', 'VkPipelineCreateFlags', 'VkPipelineLayout',
--- 'VkPipelineShaderStageCreateInfo',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType',
--- 'vkCreateComputePipelines'
-data VkComputePipelineCreateInfo = VkComputePipelineCreateInfo
-  { -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineCreateFlags
-  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkStage"
-  vkStage :: VkPipelineShaderStageCreateInfo
-  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkLayout"
-  vkLayout :: VkPipelineLayout
-  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkBasePipelineHandle"
-  vkBasePipelineHandle :: VkPipeline
-  , -- No documentation found for Nested "VkComputePipelineCreateInfo" "vkBasePipelineIndex"
-  vkBasePipelineIndex :: Int32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkComputePipelineCreateInfo where
-  sizeOf ~_ = 96
-  alignment ~_ = 8
-  peek ptr = VkComputePipelineCreateInfo <$> peek (ptr `plusPtr` 0)
-                                         <*> peek (ptr `plusPtr` 8)
-                                         <*> peek (ptr `plusPtr` 16)
-                                         <*> peek (ptr `plusPtr` 24)
-                                         <*> peek (ptr `plusPtr` 72)
-                                         <*> peek (ptr `plusPtr` 80)
-                                         <*> peek (ptr `plusPtr` 88)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkComputePipelineCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkComputePipelineCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkComputePipelineCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkStage (poked :: VkComputePipelineCreateInfo))
-                *> poke (ptr `plusPtr` 72) (vkLayout (poked :: VkComputePipelineCreateInfo))
-                *> poke (ptr `plusPtr` 80) (vkBasePipelineHandle (poked :: VkComputePipelineCreateInfo))
-                *> poke (ptr `plusPtr` 88) (vkBasePipelineIndex (poked :: VkComputePipelineCreateInfo))
--- | VkVertexInputBindingDescription - Structure specifying vertex input
--- binding description
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @binding@ /must/ be less than
---     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
---
--- -   @stride@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxVertexInputBindingStride@
---
--- == Valid Usage (Implicit)
---
--- -   @inputRate@ /must/ be a valid 'VkVertexInputRate' value
---
--- = See Also
--- #_see_also#
---
--- 'VkPipelineVertexInputStateCreateInfo', 'VkVertexInputRate'
-data VkVertexInputBindingDescription = VkVertexInputBindingDescription
-  { -- No documentation found for Nested "VkVertexInputBindingDescription" "vkBinding"
-  vkBinding :: Word32
-  , -- No documentation found for Nested "VkVertexInputBindingDescription" "vkStride"
-  vkStride :: Word32
-  , -- No documentation found for Nested "VkVertexInputBindingDescription" "vkInputRate"
-  vkInputRate :: VkVertexInputRate
-  }
-  deriving (Eq, Show)
-
-instance Storable VkVertexInputBindingDescription where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkVertexInputBindingDescription <$> peek (ptr `plusPtr` 0)
-                                             <*> peek (ptr `plusPtr` 4)
-                                             <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkVertexInputBindingDescription))
-                *> poke (ptr `plusPtr` 4) (vkStride (poked :: VkVertexInputBindingDescription))
-                *> poke (ptr `plusPtr` 8) (vkInputRate (poked :: VkVertexInputBindingDescription))
--- | VkVertexInputAttributeDescription - Structure specifying vertex input
--- attribute description
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @location@ /must/ be less than
---     @VkPhysicalDeviceLimits@::@maxVertexInputAttributes@
---
--- -   @binding@ /must/ be less than
---     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
---
--- -   @offset@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxVertexInputAttributeOffset@
---
--- -   @format@ /must/ be allowed as a vertex buffer format, as specified
---     by the @VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT@ flag in
---     @VkFormatProperties@::@bufferFeatures@ returned by
---     @vkGetPhysicalDeviceFormatProperties@
---
--- == Valid Usage (Implicit)
---
--- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
---     value
---
--- = See Also
--- #_see_also#
---
--- 'Graphics.Vulkan.Core10.Core.VkFormat',
--- 'VkPipelineVertexInputStateCreateInfo'
-data VkVertexInputAttributeDescription = VkVertexInputAttributeDescription
-  { -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkLocation"
-  vkLocation :: Word32
-  , -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkBinding"
-  vkBinding :: Word32
-  , -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkFormat"
-  vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkVertexInputAttributeDescription" "vkOffset"
-  vkOffset :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkVertexInputAttributeDescription where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek ptr = VkVertexInputAttributeDescription <$> peek (ptr `plusPtr` 0)
-                                               <*> peek (ptr `plusPtr` 4)
-                                               <*> peek (ptr `plusPtr` 8)
-                                               <*> peek (ptr `plusPtr` 12)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkLocation (poked :: VkVertexInputAttributeDescription))
-                *> poke (ptr `plusPtr` 4) (vkBinding (poked :: VkVertexInputAttributeDescription))
-                *> poke (ptr `plusPtr` 8) (vkFormat (poked :: VkVertexInputAttributeDescription))
-                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkVertexInputAttributeDescription))
--- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline vertex input state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @vertexBindingDescriptionCount@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
---
--- -   @vertexAttributeDescriptionCount@ /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxVertexInputAttributes@
---
--- -   For every @binding@ specified by each element of
---     @pVertexAttributeDescriptions@, a @VkVertexInputBindingDescription@
---     /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
---     @VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPipelineVertexInputDivisorStateCreateInfoEXT'
---
--- -   @flags@ /must/ be @0@
---
--- -   If @vertexBindingDescriptionCount@ is not @0@,
---     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array
---     of @vertexBindingDescriptionCount@ valid
---     @VkVertexInputBindingDescription@ structures
---
--- -   If @vertexAttributeDescriptionCount@ is not @0@,
---     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array
---     of @vertexAttributeDescriptionCount@ valid
---     @VkVertexInputAttributeDescription@ structures
---
--- = See Also
--- #_see_also#
---
--- 'VkGraphicsPipelineCreateInfo', 'VkPipelineVertexInputStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType',
--- 'VkVertexInputAttributeDescription', 'VkVertexInputBindingDescription'
-data VkPipelineVertexInputStateCreateInfo = VkPipelineVertexInputStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineVertexInputStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkVertexBindingDescriptionCount"
-  vkVertexBindingDescriptionCount :: Word32
-  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkPVertexBindingDescriptions"
-  vkPVertexBindingDescriptions :: Ptr VkVertexInputBindingDescription
-  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkVertexAttributeDescriptionCount"
-  vkVertexAttributeDescriptionCount :: Word32
-  , -- No documentation found for Nested "VkPipelineVertexInputStateCreateInfo" "vkPVertexAttributeDescriptions"
-  vkPVertexAttributeDescriptions :: Ptr VkVertexInputAttributeDescription
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineVertexInputStateCreateInfo where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkPipelineVertexInputStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                                  <*> peek (ptr `plusPtr` 8)
-                                                  <*> peek (ptr `plusPtr` 16)
-                                                  <*> peek (ptr `plusPtr` 20)
-                                                  <*> peek (ptr `plusPtr` 24)
-                                                  <*> peek (ptr `plusPtr` 32)
-                                                  <*> peek (ptr `plusPtr` 40)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineVertexInputStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineVertexInputStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineVertexInputStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkVertexBindingDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPVertexBindingDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkVertexAttributeDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPVertexAttributeDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))
--- | VkPipelineInputAssemblyStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline input assembly state
---
--- = Description
--- #_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 @VK_PRIMITIVE_TOPOLOGY_POINT_LIST@,
---     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST@,
---     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST@,
---     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY@,
---     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY@ or
---     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@, @primitiveRestartEnable@ /must/
---     be @VK_FALSE@
---
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
---     feature is not enabled, @topology@ /must/ not be any of
---     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY@,
---     @VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY@,
---     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY@ or
---     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY@
---
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
---     feature is not enabled, @topology@ /must/ not be
---     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @topology@ /must/ be a valid 'VkPrimitiveTopology' value
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineInputAssemblyStateCreateFlags', 'VkPrimitiveTopology',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineInputAssemblyStateCreateInfo = VkPipelineInputAssemblyStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineInputAssemblyStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkTopology"
-  vkTopology :: VkPrimitiveTopology
-  , -- No documentation found for Nested "VkPipelineInputAssemblyStateCreateInfo" "vkPrimitiveRestartEnable"
-  vkPrimitiveRestartEnable :: VkBool32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineInputAssemblyStateCreateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkPipelineInputAssemblyStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                                    <*> peek (ptr `plusPtr` 8)
-                                                    <*> peek (ptr `plusPtr` 16)
-                                                    <*> peek (ptr `plusPtr` 20)
-                                                    <*> peek (ptr `plusPtr` 24)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineInputAssemblyStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineInputAssemblyStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineInputAssemblyStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkTopology (poked :: VkPipelineInputAssemblyStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPrimitiveRestartEnable (poked :: VkPipelineInputAssemblyStateCreateInfo))
--- | VkPipelineTessellationStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline tessellation state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   @patchControlPoints@ /must/ be greater than zero and less than or
---     equal to @VkPhysicalDeviceLimits@::@maxTessellationPatchSize@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPipelineTessellationDomainOriginStateCreateInfo'
---
--- -   @flags@ /must/ be @0@
---
--- = See Also
--- #_see_also#
---
--- 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineTessellationStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineTessellationStateCreateInfo = VkPipelineTessellationStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineTessellationStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineTessellationStateCreateInfo" "vkPatchControlPoints"
-  vkPatchControlPoints :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineTessellationStateCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkPipelineTessellationStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                                   <*> peek (ptr `plusPtr` 8)
-                                                   <*> peek (ptr `plusPtr` 16)
-                                                   <*> peek (ptr `plusPtr` 20)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineTessellationStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineTessellationStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineTessellationStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkPatchControlPoints (poked :: VkPipelineTessellationStateCreateInfo))
--- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a
--- newly created pipeline viewport state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-multiViewport multiple viewports>
---     feature is not enabled, @viewportCount@ /must/ be @1@
---
--- -   If the
---     <{html_spec_relative}#features-features-multiViewport multiple viewports>
---     feature is not enabled, @scissorCount@ /must/ be @1@
---
--- -   @viewportCount@ /must/ be between @1@ and
---     @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
---
--- -   @scissorCount@ /must/ be between @1@ and
---     @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
---
--- -   @scissorCount@ and @viewportCount@ /must/ be identical
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_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
---     'Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle.VkPipelineViewportSwizzleStateCreateInfoNV'
---     or
---     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'
---
--- -   Each @sType@ member in the @pNext@ chain /must/ be unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @viewportCount@ /must/ be greater than @0@
---
--- -   @scissorCount@ /must/ be greater than @0@
---
--- = See Also
--- #_see_also#
---
--- 'VkGraphicsPipelineCreateInfo', 'VkPipelineViewportStateCreateFlags',
--- 'VkRect2D', 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkViewport'
-data VkPipelineViewportStateCreateInfo = VkPipelineViewportStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineViewportStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkViewportCount"
-  vkViewportCount :: Word32
-  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkPViewports"
-  vkPViewports :: Ptr VkViewport
-  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkScissorCount"
-  vkScissorCount :: Word32
-  , -- No documentation found for Nested "VkPipelineViewportStateCreateInfo" "vkPScissors"
-  vkPScissors :: Ptr VkRect2D
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineViewportStateCreateInfo where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkPipelineViewportStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                               <*> peek (ptr `plusPtr` 8)
-                                               <*> peek (ptr `plusPtr` 16)
-                                               <*> peek (ptr `plusPtr` 20)
-                                               <*> peek (ptr `plusPtr` 24)
-                                               <*> peek (ptr `plusPtr` 32)
-                                               <*> peek (ptr `plusPtr` 40)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineViewportStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineViewportStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineViewportStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkViewportCount (poked :: VkPipelineViewportStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPViewports (poked :: VkPipelineViewportStateCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkScissorCount (poked :: VkPipelineViewportStateCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPScissors (poked :: VkPipelineViewportStateCreateInfo))
--- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline rasterization state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-depthClamp depth clamping>
---     feature is not enabled, @depthClampEnable@ /must/ be @VK_FALSE@
---
--- -   If the
---     <{html_spec_relative}#features-features-fillModeNonSolid non-solid fill modes>
---     feature is not enabled, @polygonMode@ /must/ be
---     @VK_POLYGON_MODE_FILL@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_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
---     'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.VkPipelineRasterizationConservativeStateCreateInfoEXT'
---     or
---     'Graphics.Vulkan.Extensions.VK_AMD_rasterization_order.VkPipelineRasterizationStateRasterizationOrderAMD'
---
--- -   Each @sType@ member in the @pNext@ chain /must/ be unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @polygonMode@ /must/ be a valid 'VkPolygonMode' value
---
--- -   @cullMode@ /must/ be a valid combination of 'VkCullModeFlagBits'
---     values
---
--- -   @frontFace@ /must/ be a valid 'VkFrontFace' value
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, 'VkCullModeFlags', 'VkFrontFace',
--- 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineRasterizationStateCreateFlags', 'VkPolygonMode',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineRasterizationStateCreateInfo = VkPipelineRasterizationStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineRasterizationStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthClampEnable"
-  vkDepthClampEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkRasterizerDiscardEnable"
-  vkRasterizerDiscardEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkPolygonMode"
-  vkPolygonMode :: VkPolygonMode
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkCullMode"
-  vkCullMode :: VkCullModeFlags
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkFrontFace"
-  vkFrontFace :: VkFrontFace
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasEnable"
-  vkDepthBiasEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasConstantFactor"
-  vkDepthBiasConstantFactor :: CFloat
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasClamp"
-  vkDepthBiasClamp :: CFloat
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkDepthBiasSlopeFactor"
-  vkDepthBiasSlopeFactor :: CFloat
-  , -- No documentation found for Nested "VkPipelineRasterizationStateCreateInfo" "vkLineWidth"
-  vkLineWidth :: CFloat
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineRasterizationStateCreateInfo where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkPipelineRasterizationStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                                    <*> peek (ptr `plusPtr` 8)
-                                                    <*> peek (ptr `plusPtr` 16)
-                                                    <*> peek (ptr `plusPtr` 20)
-                                                    <*> peek (ptr `plusPtr` 24)
-                                                    <*> peek (ptr `plusPtr` 28)
-                                                    <*> peek (ptr `plusPtr` 32)
-                                                    <*> peek (ptr `plusPtr` 36)
-                                                    <*> peek (ptr `plusPtr` 40)
-                                                    <*> peek (ptr `plusPtr` 44)
-                                                    <*> peek (ptr `plusPtr` 48)
-                                                    <*> peek (ptr `plusPtr` 52)
-                                                    <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkDepthClampEnable (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkRasterizerDiscardEnable (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 28) (vkPolygonMode (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkCullMode (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 36) (vkFrontFace (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkDepthBiasEnable (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 44) (vkDepthBiasConstantFactor (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 52) (vkDepthBiasSlopeFactor (poked :: VkPipelineRasterizationStateCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkLineWidth (poked :: VkPipelineRasterizationStateCreateInfo))
--- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline multisample state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-sampleRateShading sample rate shading>
---     feature is not enabled, @sampleShadingEnable@ /must/ be @VK_FALSE@
---
--- -   If the
---     <{html_spec_relative}#features-features-alphaToOne alpha to one>
---     feature is not enabled, @alphaToOneEnable@ /must/ be @VK_FALSE@
---
--- -   @minSampleShading@ /must/ be in the range [0,1]
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_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
---     'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.VkPipelineCoverageModulationStateCreateInfoNV',
---     'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.VkPipelineCoverageToColorStateCreateInfoNV',
---     or
---     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
---
--- -   Each @sType@ member in the @pNext@ chain /must/ be unique
---
--- -   @flags@ /must/ be @0@
---
--- -   @rasterizationSamples@ /must/ be a valid
---     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
---     value
---
--- -   If @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid
---     pointer to an array of
---     <<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhsAAABOCAYAAACJ+9TQAAAABmJLR0QA/wD/AP+gvaeTAAAXDElEQVR4nO2defQdRZXHP9lIgETCJsoioCDKOrIYFZVBGBHFDZ0zjuOGy8giMw5HFBUFdBxRYWYU0QHR8bgrLqgQFVEYgqKMkQASkW2CAmGHRJIQEvLmj/vad7t//bqrenu/l3w/5/TJe79U3apXfbvqdtWtWyCEEEKIYXwP6OVcZ4+yUuPG1FFXQIiKzAK+BCwHvgNMGW111lvUzuXMAF4CfBa4ErgLWAWsBu4DrsXa7gPAIcAmo6mmqMhs4A/9a637+8LRVEeI5nkacGr/+peR1mTy8XHSbxl7j7Y6I6ctXVE7F/Nm4HbSbbQMWALciRkc2TfiVcBFwFO6r66owUzgUQb3cZ/RVkeI5jiJgWJfMuK6TDZ+xqBtHkBvi23pito5n1nAtxi0zW3AccD2mXTTgX2Bc4F1pI2OJ3VVWdEIB5A2GKePtjpCNMe3GSj36SOuy2TjxVgHvxB4zojrMhloS1fUzvl8jUF7XwzMCchzgstzb3tVEy1xNIP79+sR10WIRvk/Bsr96hHXRUxupCvd8QoGbX0PsFlgvhmYD0cP+HE7VRMt8jnkHCrWQ7YkPeW682irIyYx0pVu+RWDtv63yLyX9vN9pOlKidb5LYP7/uYR12XsmKxrTlOB5wK7Ao/HHK5uxaZyY6YfpwJ7AHsCTwQ2Bh7C3gKvwDzsm2AWtp63O7AF5rF8N3ANcB22VhvLfu7zA1idm2YOcBC2drxZv5xbgMsxR6g2aOrejgtd6GAXutIkmwDPA3bCnpfEofIyYGVLZc4CXgDsgjn6/RHzbbk/Us42wDPd9wWR+ZcBK4D/jczn6apfy2M2tqNmF2zQvQa7b48NSXsosFv//28Cfkp79zhhK6xf2w6717dhS10P1ZA5E2vvhKZ2orTZB7cxLo0NG2M/OG/P8gHANOCfMeXIS/PtgDI2Al4FnI/duDw5PeAR4CzqObxtDXwK60CGlXMP5hy2f4C8FxfIybt+UrHeewHfJe1Z7a/lwMnYtG8obd/bMvkxvGyInJDrlwHyu9DBtnSlyXbOsjvwdex358lfAZwJbBohs6i+z8QG5vdghmxeeW+J/A2HZWT8dWT+qrStUyHt+AHgwZz/X4wZFAlTgPdi/Ug27VLgwMi6JQzT+ZVY/7IDFhNjTU6aVcApVA/3sH9GVt0X9Tb64ISmx6WxZG/g5v51B4Mf/ihmef24/30Ntp1sJekGOimgjFdm8swH3opZ2IdiTlo3uv9fgClqLPOw/fQ9bB32TODvMCv1cMxJ78+unDsCZB7NoH1Wubz3ur/7692RdZ4KnMbAK/5O4INYB3oIcGL/b0m53yP84Wz73g6TvwZ764jhtH7e28lvV389nKnnyQHyu9DBtnSlyXZOmIK122MMOrqPAkcABwPHANe7sn6DvRXXre+WWNsnA9Ifmah3jwF/FfFbXpvJ39VySNs6VdaOyfO7HGvH7IB+IzYwbgp8n3Sbr8qkvRszbmLxOu8NrisxPXoQm734Btb/foa0L1MP+I8K5SZlJzLqOIe22QdDO+PS2HMUgx+8CPgh9sOPYtDRTMUaJ0l3aIDcf2Wg6C8ckmYT0uuu/xhZ9x2x6dce8DtsajWP/RlYrj+ILMPPABwZmTePaaR3LMwn34N+O2wwSNIdW6Gstu5tnvyrK9Tvwn7eHUvSPZ/04PQlwoJadaGDnqZ1JaFuO4Pd5286OT/BjM8sm2JGRpLuKxXK8vW9Ftuauhh7I07eRGcAx7t0PaxDDuXwTN5HMWOp7QCJXepUth3Px5YNDmKg/5ths1S+LQ7H2vxW4OUM2nxj4IxM2ldVrFvC552sy7G3+HOBx2XSTQe+mim7ysxKE86hbffBXYxLY8mnGTTmKuAGYNucdJu6dHmdVJYf9dP+Q0m6Fzm5F4dV+S945T2sJO1F/XSnRMjfivTDUTYohnCuk3cVxW+p73Npb6lQVlv3Nk/+eRXqtxSz+ovYn/Q05AWET512oYMJbehKQt12BjiHtN7NKkj7Qpd2HeaXEENW765i4uCTcLlLe1FEGXOx5Zde5roeMzq2jKxzKF3qVLYdF5C/LDOX9AzHYmyG4/E5aacyeOPuAe+vWLeERaTb/z8L0s4hPRPyzQrlNeEc2nYf3Pa4NLZcyaBhVgNPH5JuKtbRfz5Q7kXYm3TZm8bOxN9MsDdzv+ZcNlWZWOBHRJTh14XLBsUQ/BTsWso78QNJP8g7RZbX1r3Nk39MZN5tGbxhD2N3BlsUe5gjYcwSQts66GlaVzx12hnSW0TXMlwPEjYiHXEzdkDy9V1BseHl34xjt6H6eBnZaw02yOcF+KpDlzrl2/Fh7E17GD566jrSzrNZvIFXZ5CbRdrI+R3lvg0+AFvsc7IR9SOHtt0HdzEujSXTSE9PnzWCOuzryr8tIt9zSStBWcjhbbFQ0jGD1Xud/KpOoAmzSK/BfikgT+JpnlwxCtn2vc3KL+rc8tgY8yrPm2kB66x9e/2KcP+BWKrqoKdJXfHUbeeZpNvxy4H5/ujyfD+ivGx9P1GS/osu7dciykk4jon+H3nXFdibcBVHvyrU1alsO36sJL2f7r+gJK1f4vmnCnVLmEe6jUPiymTD7j8hory6zqFd9MFdjEtjyV6kG6bsjacN3ki6QwjlYNJ1X0jz50X4db3YffxZ3ky6vvMC8jyd+Ic5oe176+WvoXhaPpYnYs5nifxrgc0blJ+lqg56mtQVT912zurdcwPzeWPj5xHlZfVut+LkXOzSnhpRjueJmFFzd6bsvOtWutm5Ulensu341IK0m5IOwf7SEtl+GeVFFeqWcKyTcy9hhtxHSP+uHSPKe7vLV8U5tIs+uItxqRajirPh4wLcDPy+YflbYY5yz8IelrmYBeed+/wg8ocI2b/FphaTt919sfXDSzCL9QfU3+fu26fufm7vJHYbYQ9Ldtq0F1Fe2/fWy78emzpsgi2wASh5I7gZ8yF4sKK8NnXQ06SuDJNbpZ293t0B/CIwX2g0ziy+vjdR3p67u8/XVixzKbZ74L1YZ/9KzDEyb9ZsZyzGxBFUn4HqQqey7XhjQdo9XNmPUnwmz1akHRartjmk6/gjzBguY27me0ievPJ+E5EvoYs+uItxaSw5i4EFFrteX8TmmHPTsL3Lw67YHRevLSjjEWz/dFXLfYuMvJ0qyklkJdsNe9iWpxsCLj/l18M6t1Daurdtyp+NdQCJ3Nup3u5d6SA0qytZ6rRzVu9Cd5ZsTfr3/HdEmTH1zUZc3SminDKmAM/GdCAvzsQSwnY0ebrUKd+OZU7Bx7i0ZbMo3rforgr18njn0NA4KT9xeR4h7h4sdHljnUO77IPbHJfGll8yaISjG5L5FMwS9w/1sVikyuwUcHZdMmRaK8szsC2UXpGy1wLiT3b8G5e/rsOfd9Crc8Wsb7Zxb4fJr9KZZpmFTdcnMu+l+tJP1zrYpK5kqdPOWb0LdS49KJPvfRFl+vqWled3vcRGEI1hLvAFJj5Pe0XI6FqnYp7f81zaot0gkN5dEbP7J0vWOTTUWfNPLk/MrErWaTnWObTrPritcWksmUZ661jdqIRg27IWO5lXUnwKY5Pr/k/CgrLcSv6NvZU4B0N/VHhdh78TM3WJdfKLpY17WyS/SmfqmY5NLybylpGeMo1hFDrYpK546rbzu0nr3fMC852cyffswHzZ+pbpuXeqrbo9NIafkf5dBwfm61qnYp/fq13a15ek/Y5L+6HIenm8c+hqwlwBdiLd/jFO63WdQ7vugxOaHpfGkj1JPxBNeMO+JyOz7CAqH7TmmgbKB5uWO4S041lyvT1CzvkuX12HPz8l2mPiumXTtHFvi+TXMRKnkt6XvhIL4lWVUehgk7riqdvOPk5DD3OkDOFSl+d+wiNgxtbXO9V+NLCMaVjnXEXnsgNO6MxG1zoV8/zOJD1lX7aVc4lL+/IKdUvwzqHXB+Z5C+n2L3Nk9dR1Du26D87S1LhUG79n+/vY/t+Q66s1ysw6nq2uISvhre7zfMoPoqrr8JNHD3uDeSETp393iZDTlsPfWuodRBRCG/d2mPzF1HMOPRtb4wTrWF+NxQGoyih0sAvn0LrtDGF69wTSxt555B/ulUesM2uVdnsbtt5+bmB6j98tsYJwx82udSrm+d2Hwe9aifkZDGNL0rs/6uiqr+OdgXle4z4vJS6uSpNjRRd9cJamxqWEpxBuJ6zFtZ83NqZFXlVpuoPcjnSjhQwYfhteTB1OAN4RkO4M0g9q6Hr65qTfXuq2j1fsmBP+TsDOF/hUZHltDX5Nyz+dwXr0OmwKeP6QtDtj665PLpDXpQ4mNK0rnrrtvCzzPcQZ720M+qNHsNmRUGLquwVph9DQ35eUUcWj3y8HXULYaZ6j0KmYdvRpF1FsGPq092AO2FXxskKM0d2x034TPkv1nShV2rSLPrjtcckzhTg74S/PftH601qGe3XXOR656QFpx8z3smPK9ybt5BNah22xMxRuorwjzBpklwaW4Y8wTo7d9hyCTcHeQ1ggoqvc542w6eylJXl2wwbjGZgSxzAOxsZ7+lfCMRSHL34H1g4vw9Y58+hKBz1N64qnbjtflfm+PcVbKLcA3um+n4Y59IVSdZB8kPLZgmy+2KigO5MOHf3JwHyj0Kmq7dhk2iJmkV6u2SEgz0cYGLF/Iu4cnI2of6x8231wF+OSZxl2BEEe+xC4czE5nCq5Hq5QkTKmkj5Fs66DH9iJjb7eRacwzsC2aFVZj35pP89yyp2EXufKiDHMXl+S73f9/wudcZhN+kyAsoOZNumXm6xPxjhDtXFvi+THbMdN8Cc39rC19DIu66cdFnEUutNBT9O6ktBEOz8Oe6NLZBxfkHYK6VDSP6NdvfNOtT8NLMP7JzzM8AOusmyMxRdJyvtuYD7oXqdi29E7h76xJK33kflwZL082cihPYqDjvnnfS3l54Vk2c/lr3qsfNt9cBfjUijvYuL9yT3CvgtjYw/SD0SVY4azzCB9Mx/AtoVl2YLB4TNVnKiSY8l7pN/CsjyDwbkaK/rfQ3mDK2NB5v+OYPDQlEVH9HjntLsYvuVpu36ZPSzwTMhbg6eNe9uk/L8nvR0s5GjwKZglX/Ym0pUOetrQFWjuPvodH3eS7yQ6k4mHUxXttmiivt6p9vTAMvyOhB62PbTovBCA55COB7GI4YfC5dG1TsW0Y9Y5dM+CtJA+5v0VFeqW4J1Dr8ZmKn7BxCi/0zCj0j/vVcKj13UOTWizD+5iXApl5MbGPAaBSvxe57Wkg5gUvf2U4ZUwsfLOwhys3o6t0z2ETYNdQPo3JuW/qaSMH2bKOB+zFJ+PxTs4CntDSx7Ce4kPT7yPk78aU55DsK2ESYCgUyNlTiF9FPQD2HHVL8bWeP8W+C/M+S3p8EP3YLd9b18XIP/CADkHkN6bv46wwDo39tOHlNGFDnqa1JWm2tkzlfTAfgfW6R6CvWGeRDo0/BcIN2xC9O6DLv0Z7u+rXPq73N+LzpI4kolxC1ZjTvUnY/4mb8IGtE8zmFVKrq9TbZth2zoV044z+r/rBuyAN1+vG/t/90HAfuRk+LRL+n9bRPmhcln84Xln939bD9u59EVsR9Z5pA+He5S4QFyfcfX2hzEuJ1+3QmizD+5iXApl5MZG0QmJ/jqyZjnHYWuwebLvw9bpZ5EOWuOvF0wUmWIHTJmzD1peWf+OheetwieHyH2YtK9BDFOxjtA/PNlrMdaBxUwVtn1v8wIiZa8Qf4T3B9Zz2HVaYH3b1sEsTelKU+2cZRqmI/cPkfkYtpQRu+U4RO/8dPXikrQrKXd63x4z5C4lfbrmsGsZdvhc3eXENnUqph33DUj78X7a2RQHleox0a8nBD9TlBgQx2NtnZW/DjN4yrbkZvFn84ToViht9cFdjUshFBob3kv8QuAl7vsKxi/ox2wsCuFTsbek+7EtXFcSvo0uhF0w57sdsGnfNdjNvA6b3ltbU/7TsA54K8wivQVby64b2346Zknvhm1HW41NcS+k2IFPhNOVDia0pStNMh2r466Y3i3H3j4vx97yxo1ZWLvvim3ZnY31pX/GHHIXY2/AMbseiuhapyYjs7D2TQbifRhEAp0NHIrNBiQnrF7W/3ey0WYf3Pa4VMa7mHja8gHkbBnuwmdDCCGEiMU7h65kdIeIiuEUzmzErpkJIYQQXeO3z15D+2/pomFkbAghhJjstBH1WXSIjA0hhBCTnbYDBoqWkbEhhBBisrENtk02ufzhdae7v8fGkREjQk42QgghJhv7MTFke0ISwXU1w48QEJMMGRtCCCEmG/MJO8BPjAlaRhFCCCFEq8jYEEIIIUSryNgQQgghRKvI2BBCCCFEq8jYEEIIIUSrtLkb5VTglBblCyGEEKI5TsPG7sbRzIYQQgghWkXGhhBCCCFaRcaGEEIIIVpFxoYQQgghWqVtB9FTW5QvhBBCiDFAMxtCCCGEaBUZG0IIIYRoFRkbQgghhGgVGRtCCCGEaBUZG0IIIYRolTZ3owghJi/bAwcBBwJ7AbsAc4EpwDLgRuAK4AvATZGy9wReCszry94amAU8BCwBftGXe13N3yCEGEMuBHrueni01RFCtMAbgYWkn/UHgSuBS4BFwBr3f2uA9wfI3Qx4J/AHl/cxYDHwc+CXwJ8z5Z4LzGzmZwkhRsy7SD/fPWD/vIQyNoRY/7mBwTO+CDiMicup2wDfIt0fHFUi94cu7UrgA8BWmTQbAScB61zaL1f8HUKIyYWMDSEEAHMYDPSXABsXpJ0B3MygP7i+RPbSfrrlwDNL0n6CdF/zrLKKCyEmPYXGhhxEhdhw2BfzyVgOvBZYVZB2DXCx+74bw/uL7YAn9D8fB1xVUo9zMt9fXpJeCDHmyEFUiA2HpwH3A58H7glIv859Xpn57tmv/+/1wFcC5C7JfN8uII8QYoyRsSHEhsM5TJxVKGIP93lhQbrlwJnApdjUaRlzMt8fjKiTEGIMkbEhhMhjW2xbbMIXC9Je1r9C2SPzvcwfRAgx5shnQwiRx+mYkyjYttWQ5ZFQDnefVwMXNChbCDEJkbEhhPDMAM4AXt//vgh4BRYzoyn5b3DfzybMf0QIsZ6gra9CbHhMwyKH7g+ciEUL7WE7VT6GRf5skncw6GNuZqL/hhBiPFGcDSFELtnAXT3gt8AxwJYtlLcDFgq9B6zAtuIKIdYPFGdDCJHLOuDXwO+xwR/gGcD7gOOBTRssaybwbeBxwFrgNZhhI4TYAPC7UeYDt7vvj3RcFyFEt7zGfZ4OvACL7rk3cAoW+Otg4I6a5UwDvoFFFl0LvA4Lby6EWH9YxMSt9fLHEkLkMof0YWpX1JS3ETajkfiBvKymPCGEEEKsBxxFet31wOLkQ9kM+Glfxt3oDBQhhBBC9Hk6aWPjxAoynowF60qcTndsrHZCCCGEGHt2Im1sfCgy/8HAff283wI2abJyQgghhBh/DiRtbBwbkfc47MTYdcAHsVNmhRBCCLGeMgOL/nlYZL53EhCYJ6escxjE6DkyskwhhBBCjCH7MojUGcMCBobGHZTPTmwN/E8//W3APiXpr+2nPSCyXkIIIYSYZLwNG9Tvi8hzMOlZjRNK0u8NLOmnXQA8viT9LGyZ5VEs0JcQQgghxphkWaOHBdQqY1sGhkMPC9JTdDbKkdiSSQ84D4upUca8fvqrA9IKIYQQYpLzGwaGwzXANgVp5wG3uPRLgJ2HpJ2COX+u66d9DFuqCbmW9vN8rvKvEkIIIcSkYAoWKtgvidwPnInNSDwPOBQ7dG0+A8OhB/yYYsPkJRm5Va6jm/qhQgghhBgdc7AD1a7AZh+KBv9HgO8RtnPllBJZIZecQ4XYgNAeeCE2DOZizpy7AptjvhgrgAewU1+vw84uEUKIxvl/LD66bFuCF+cAAAAASUVORK5CYII= stem afc23f1498b2f7d63bea697fcc1fdc8e>>
---     @VkSampleMask@ values
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineMultisampleStateCreateFlags',
--- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits',
--- @VkSampleMask@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineMultisampleStateCreateInfo = VkPipelineMultisampleStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineMultisampleStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkRasterizationSamples"
-  vkRasterizationSamples :: VkSampleCountFlagBits
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkSampleShadingEnable"
-  vkSampleShadingEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkMinSampleShading"
-  vkMinSampleShading :: CFloat
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkPSampleMask"
-  vkPSampleMask :: Ptr VkSampleMask
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkAlphaToCoverageEnable"
-  vkAlphaToCoverageEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineMultisampleStateCreateInfo" "vkAlphaToOneEnable"
-  vkAlphaToOneEnable :: VkBool32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineMultisampleStateCreateInfo where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkPipelineMultisampleStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                                  <*> peek (ptr `plusPtr` 8)
-                                                  <*> peek (ptr `plusPtr` 16)
-                                                  <*> peek (ptr `plusPtr` 20)
-                                                  <*> peek (ptr `plusPtr` 24)
-                                                  <*> peek (ptr `plusPtr` 28)
-                                                  <*> peek (ptr `plusPtr` 32)
-                                                  <*> peek (ptr `plusPtr` 40)
-                                                  <*> peek (ptr `plusPtr` 44)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkRasterizationSamples (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkSampleShadingEnable (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 28) (vkMinSampleShading (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPSampleMask (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkAlphaToCoverageEnable (poked :: VkPipelineMultisampleStateCreateInfo))
-                *> poke (ptr `plusPtr` 44) (vkAlphaToOneEnable (poked :: VkPipelineMultisampleStateCreateInfo))
--- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline
--- color blend attachment state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
---     feature is not enabled, @srcColorBlendFactor@ /must/ not be
---     @VK_BLEND_FACTOR_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
---
--- -   If the
---     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
---     feature is not enabled, @dstColorBlendFactor@ /must/ not be
---     @VK_BLEND_FACTOR_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
---
--- -   If the
---     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
---     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be
---     @VK_BLEND_FACTOR_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
---
--- -   If the
---     <{html_spec_relative}#features-features-dualSrcBlend dual source blending>
---     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be
---     @VK_BLEND_FACTOR_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
---     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
---     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
---
--- == Valid Usage (Implicit)
---
--- -   @srcColorBlendFactor@ /must/ be a valid 'VkBlendFactor' value
---
--- -   @dstColorBlendFactor@ /must/ be a valid 'VkBlendFactor' value
---
--- -   @colorBlendOp@ /must/ be a valid 'VkBlendOp' value
---
--- -   @srcAlphaBlendFactor@ /must/ be a valid 'VkBlendFactor' value
---
--- -   @dstAlphaBlendFactor@ /must/ be a valid 'VkBlendFactor' value
---
--- -   @alphaBlendOp@ /must/ be a valid 'VkBlendOp' value
---
--- -   @colorWriteMask@ /must/ be a valid combination of
---     'VkColorComponentFlagBits' values
---
--- = See Also
--- #_see_also#
---
--- 'VkBlendFactor', 'VkBlendOp', @VkBool32@, 'VkColorComponentFlags',
--- 'VkPipelineColorBlendStateCreateInfo'
-data VkPipelineColorBlendAttachmentState = VkPipelineColorBlendAttachmentState
-  { -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkBlendEnable"
-  vkBlendEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkSrcColorBlendFactor"
-  vkSrcColorBlendFactor :: VkBlendFactor
-  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkDstColorBlendFactor"
-  vkDstColorBlendFactor :: VkBlendFactor
-  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkColorBlendOp"
-  vkColorBlendOp :: VkBlendOp
-  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkSrcAlphaBlendFactor"
-  vkSrcAlphaBlendFactor :: VkBlendFactor
-  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkDstAlphaBlendFactor"
-  vkDstAlphaBlendFactor :: VkBlendFactor
-  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkAlphaBlendOp"
-  vkAlphaBlendOp :: VkBlendOp
-  , -- No documentation found for Nested "VkPipelineColorBlendAttachmentState" "vkColorWriteMask"
-  vkColorWriteMask :: VkColorComponentFlags
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineColorBlendAttachmentState where
-  sizeOf ~_ = 32
-  alignment ~_ = 4
-  peek ptr = VkPipelineColorBlendAttachmentState <$> peek (ptr `plusPtr` 0)
-                                                 <*> peek (ptr `plusPtr` 4)
-                                                 <*> peek (ptr `plusPtr` 8)
-                                                 <*> peek (ptr `plusPtr` 12)
-                                                 <*> peek (ptr `plusPtr` 16)
-                                                 <*> peek (ptr `plusPtr` 20)
-                                                 <*> peek (ptr `plusPtr` 24)
-                                                 <*> peek (ptr `plusPtr` 28)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBlendEnable (poked :: VkPipelineColorBlendAttachmentState))
-                *> poke (ptr `plusPtr` 4) (vkSrcColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
-                *> poke (ptr `plusPtr` 8) (vkDstColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
-                *> poke (ptr `plusPtr` 12) (vkColorBlendOp (poked :: VkPipelineColorBlendAttachmentState))
-                *> poke (ptr `plusPtr` 16) (vkSrcAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
-                *> poke (ptr `plusPtr` 20) (vkDstAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
-                *> poke (ptr `plusPtr` 24) (vkAlphaBlendOp (poked :: VkPipelineColorBlendAttachmentState))
-                *> poke (ptr `plusPtr` 28) (vkColorWriteMask (poked :: VkPipelineColorBlendAttachmentState))
--- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of
--- a newly created pipeline color blend state
---
--- = Description
--- #_description#
---
--- Each element of the @pAttachments@ array is a
--- 'VkPipelineColorBlendAttachmentState' structure specifying per-target
--- blending state for each individual color attachment. If the
--- <{html_spec_relative}#features-features-independentBlend independent blending>
--- feature is not enabled on the device, all
--- 'VkPipelineColorBlendAttachmentState' elements in the @pAttachments@
--- array /must/ be identical.
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-independentBlend independent blending>
---     feature is not enabled, all elements of @pAttachments@ /must/ be
---     identical
---
--- -   If the
---     <{html_spec_relative}#features-features-logicOp logic operations>
---     feature is not enabled, @logicOpEnable@ /must/ be @VK_FALSE@
---
--- -   If @logicOpEnable@ is @VK_TRUE@, @logicOp@ /must/ be a valid
---     'VkLogicOp' value
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPipelineColorBlendAdvancedStateCreateInfoEXT'
---
--- -   @flags@ /must/ be @0@
---
--- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
---     pointer to an array of @attachmentCount@ valid
---     @VkPipelineColorBlendAttachmentState@ structures
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, 'VkGraphicsPipelineCreateInfo', 'VkLogicOp',
--- 'VkPipelineColorBlendAttachmentState',
--- 'VkPipelineColorBlendStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineColorBlendStateCreateInfo = VkPipelineColorBlendStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineColorBlendStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkLogicOpEnable"
-  vkLogicOpEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkLogicOp"
-  vkLogicOp :: VkLogicOp
-  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkAttachmentCount"
-  vkAttachmentCount :: Word32
-  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkPAttachments"
-  vkPAttachments :: Ptr VkPipelineColorBlendAttachmentState
-  , -- No documentation found for Nested "VkPipelineColorBlendStateCreateInfo" "vkBlendConstants"
-  vkBlendConstants :: Vector 4 CFloat
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineColorBlendStateCreateInfo where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkPipelineColorBlendStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                                 <*> peek (ptr `plusPtr` 8)
-                                                 <*> peek (ptr `plusPtr` 16)
-                                                 <*> peek (ptr `plusPtr` 20)
-                                                 <*> peek (ptr `plusPtr` 24)
-                                                 <*> peek (ptr `plusPtr` 28)
-                                                 <*> peek (ptr `plusPtr` 32)
-                                                 <*> peek (ptr `plusPtr` 40)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineColorBlendStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineColorBlendStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineColorBlendStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkLogicOpEnable (poked :: VkPipelineColorBlendStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkLogicOp (poked :: VkPipelineColorBlendStateCreateInfo))
-                *> poke (ptr `plusPtr` 28) (vkAttachmentCount (poked :: VkPipelineColorBlendStateCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPAttachments (poked :: VkPipelineColorBlendStateCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkBlendConstants (poked :: VkPipelineColorBlendStateCreateInfo))
--- | VkPipelineDynamicStateCreateInfo - Structure specifying parameters of a
--- newly created pipeline dynamic state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   Each element of @pDynamicStates@ /must/ be unique
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @pDynamicStates@ /must/ be a valid pointer to an array of
---     @dynamicStateCount@ valid 'VkDynamicState' values
---
--- -   @dynamicStateCount@ /must/ be greater than @0@
---
--- = See Also
--- #_see_also#
---
--- 'VkDynamicState', 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineDynamicStateCreateFlags',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineDynamicStateCreateInfo = VkPipelineDynamicStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineDynamicStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkDynamicStateCount"
-  vkDynamicStateCount :: Word32
-  , -- No documentation found for Nested "VkPipelineDynamicStateCreateInfo" "vkPDynamicStates"
-  vkPDynamicStates :: Ptr VkDynamicState
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineDynamicStateCreateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkPipelineDynamicStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                              <*> peek (ptr `plusPtr` 8)
-                                              <*> peek (ptr `plusPtr` 16)
-                                              <*> peek (ptr `plusPtr` 20)
-                                              <*> peek (ptr `plusPtr` 24)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDynamicStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDynamicStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDynamicStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkDynamicStateCount (poked :: VkPipelineDynamicStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPDynamicStates (poked :: VkPipelineDynamicStateCreateInfo))
--- | VkStencilOpState - Structure specifying stencil operation state
---
--- = Description
--- #_description#
---
--- == Valid Usage (Implicit)
---
--- -   @failOp@ /must/ be a valid 'VkStencilOp' value
---
--- -   @passOp@ /must/ be a valid 'VkStencilOp' value
---
--- -   @depthFailOp@ /must/ be a valid 'VkStencilOp' value
---
--- -   @compareOp@ /must/ be a valid 'VkCompareOp' value
---
--- = See Also
--- #_see_also#
---
--- 'VkCompareOp', 'VkPipelineDepthStencilStateCreateInfo', 'VkStencilOp'
-data VkStencilOpState = VkStencilOpState
-  { -- No documentation found for Nested "VkStencilOpState" "vkFailOp"
-  vkFailOp :: VkStencilOp
-  , -- No documentation found for Nested "VkStencilOpState" "vkPassOp"
-  vkPassOp :: VkStencilOp
-  , -- No documentation found for Nested "VkStencilOpState" "vkDepthFailOp"
-  vkDepthFailOp :: VkStencilOp
-  , -- No documentation found for Nested "VkStencilOpState" "vkCompareOp"
-  vkCompareOp :: VkCompareOp
-  , -- No documentation found for Nested "VkStencilOpState" "vkCompareMask"
-  vkCompareMask :: Word32
-  , -- No documentation found for Nested "VkStencilOpState" "vkWriteMask"
-  vkWriteMask :: Word32
-  , -- No documentation found for Nested "VkStencilOpState" "vkReference"
-  vkReference :: Word32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkStencilOpState where
-  sizeOf ~_ = 28
-  alignment ~_ = 4
-  peek ptr = VkStencilOpState <$> peek (ptr `plusPtr` 0)
-                              <*> peek (ptr `plusPtr` 4)
-                              <*> peek (ptr `plusPtr` 8)
-                              <*> peek (ptr `plusPtr` 12)
-                              <*> peek (ptr `plusPtr` 16)
-                              <*> peek (ptr `plusPtr` 20)
-                              <*> peek (ptr `plusPtr` 24)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFailOp (poked :: VkStencilOpState))
-                *> poke (ptr `plusPtr` 4) (vkPassOp (poked :: VkStencilOpState))
-                *> poke (ptr `plusPtr` 8) (vkDepthFailOp (poked :: VkStencilOpState))
-                *> poke (ptr `plusPtr` 12) (vkCompareOp (poked :: VkStencilOpState))
-                *> poke (ptr `plusPtr` 16) (vkCompareMask (poked :: VkStencilOpState))
-                *> poke (ptr `plusPtr` 20) (vkWriteMask (poked :: VkStencilOpState))
-                *> poke (ptr `plusPtr` 24) (vkReference (poked :: VkStencilOpState))
--- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters
--- of a newly created pipeline depth stencil state
---
--- = Description
--- #_description#
---
--- == Valid Usage
---
--- -   If the
---     <{html_spec_relative}#features-features-depthBounds depth bounds testing>
---     feature is not enabled, @depthBoundsTestEnable@ /must/ be @VK_FALSE@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be
---     @VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@
---
--- -   @flags@ /must/ be @0@
---
--- -   @depthCompareOp@ /must/ be a valid 'VkCompareOp' value
---
--- -   @front@ /must/ be a valid @VkStencilOpState@ structure
---
--- -   @back@ /must/ be a valid @VkStencilOpState@ structure
---
--- = See Also
--- #_see_also#
---
--- @VkBool32@, 'VkCompareOp', 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineDepthStencilStateCreateFlags', 'VkStencilOpState',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType'
-data VkPipelineDepthStencilStateCreateInfo = VkPipelineDepthStencilStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineDepthStencilStateCreateFlags
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthTestEnable"
-  vkDepthTestEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthWriteEnable"
-  vkDepthWriteEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthCompareOp"
-  vkDepthCompareOp :: VkCompareOp
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkDepthBoundsTestEnable"
-  vkDepthBoundsTestEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkStencilTestEnable"
-  vkStencilTestEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkFront"
-  vkFront :: VkStencilOpState
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkBack"
-  vkBack :: VkStencilOpState
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkMinDepthBounds"
-  vkMinDepthBounds :: CFloat
-  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "vkMaxDepthBounds"
-  vkMaxDepthBounds :: CFloat
-  }
-  deriving (Eq, Show)
-
-instance Storable VkPipelineDepthStencilStateCreateInfo where
-  sizeOf ~_ = 104
-  alignment ~_ = 8
-  peek ptr = VkPipelineDepthStencilStateCreateInfo <$> peek (ptr `plusPtr` 0)
-                                                   <*> peek (ptr `plusPtr` 8)
-                                                   <*> peek (ptr `plusPtr` 16)
-                                                   <*> peek (ptr `plusPtr` 20)
-                                                   <*> peek (ptr `plusPtr` 24)
-                                                   <*> peek (ptr `plusPtr` 28)
-                                                   <*> peek (ptr `plusPtr` 32)
-                                                   <*> peek (ptr `plusPtr` 36)
-                                                   <*> peek (ptr `plusPtr` 40)
-                                                   <*> peek (ptr `plusPtr` 68)
-                                                   <*> peek (ptr `plusPtr` 96)
-                                                   <*> peek (ptr `plusPtr` 100)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkDepthTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkDepthWriteEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 28) (vkDepthCompareOp (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkDepthBoundsTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 36) (vkStencilTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkFront (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 68) (vkBack (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 96) (vkMinDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))
-                *> poke (ptr `plusPtr` 100) (vkMaxDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))
--- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a
--- newly created graphics pipeline
---
--- = Description
--- #_description#
---
--- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
--- described in more detail in
--- <{html_spec_relative}#pipelines-pipeline-derivatives Pipeline Derivatives>.
---
--- @pStages@ points to an array of 'VkPipelineShaderStageCreateInfo'
--- structures, which were previously described in
--- <{html_spec_relative}#pipelines-compute Compute Pipelines>.
---
--- @pDynamicState@ points to a structure of type
--- 'VkPipelineDynamicStateCreateInfo'.
---
--- == Valid Usage
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be a
---     valid handle to a graphics @VkPipeline@
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineHandle@ is
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
---     @basePipelineIndex@ /must/ be a valid index into the calling
---     command’s @pCreateInfos@ parameter
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/ be
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
---
--- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
---     and @basePipelineHandle@ is not
---     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
---     @basePipelineIndex@ /must/ be -1
---
--- -   The @stage@ member of each element of @pStages@ /must/ be unique
---
--- -   The @stage@ member of one element of @pStages@ /must/ be
---     @VK_SHADER_STAGE_VERTEX_BIT@
---
--- -   The @stage@ member of each element of @pStages@ /must/ not be
---     @VK_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 @VkPipelineTessellationStateCreateInfo@
---     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
---     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@
---
--- -   If the @topology@ member of @pInputAssembly@ is
---     @VK_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 <{html_spec_relative}#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 <{html_spec_relative}#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
---     @VK_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
---     <{html_spec_relative}#interfaces Shader Interfaces> chapter
---
--- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
---     attachment in @renderPass@ that has a layout of
---     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ in the
---     @VkAttachmentReference@ defined by @subpass@, the @depthWriteEnable@
---     member of @pDepthStencilState@ /must/ be @VK_FALSE@
---
--- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
---     attachment in @renderPass@ that has a layout of
---     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ in the
---     @VkAttachmentReference@ defined by @subpass@, the @failOp@, @passOp@
---     and @depthFailOp@ members of each of the @front@ and @back@ members
---     of @pDepthStencilState@ /must/ be @VK_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 @VK_FALSE@ if
---     the @format@ of the attachment does not support color blend
---     operations, as specified by the
---     @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT@ flag in
---     @VkFormatProperties@::@linearTilingFeatures@ or
---     @VkFormatProperties@::@optimalTilingFeatures@ returned by
---     @vkGetPhysicalDeviceFormatProperties@
---
--- -   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
---     @VK_DYNAMIC_STATE_VIEWPORT@, the @pViewports@ member of
---     @pViewportState@ /must/ be a valid pointer to an array of
---     @pViewportState@::@viewportCount@ @VkViewport@ structures
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     @VK_DYNAMIC_STATE_SCISSOR@, the @pScissors@ member of
---     @pViewportState@ /must/ be a valid pointer to an array of
---     @pViewportState@::@scissorCount@ @VkRect2D@ structures
---
--- -   If the wide lines feature is not enabled, and no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     @VK_DYNAMIC_STATE_LINE_WIDTH@, the @lineWidth@ member of
---     @pRasterizationState@ /must/ be @1.0@
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     @VK_FALSE@, @pViewportState@ /must/ be a valid pointer to a valid
---     @VkPipelineViewportStateCreateInfo@ structure
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     @VK_FALSE@, @pMultisampleState@ /must/ be a valid pointer to a valid
---     @VkPipelineMultisampleStateCreateInfo@ structure
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     @VK_FALSE@, and @subpass@ uses a depth\/stencil attachment,
---     @pDepthStencilState@ /must/ be a valid pointer to a valid
---     @VkPipelineDepthStencilStateCreateInfo@ structure
---
--- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
---     @VK_FALSE@, and @subpass@ uses color attachments, @pColorBlendState@
---     /must/ be a valid pointer to a valid
---     @VkPipelineColorBlendStateCreateInfo@ structure
---
--- -   If the depth bias clamping feature is not enabled, no element of the
---     @pDynamicStates@ member of @pDynamicState@ is
---     @VK_DYNAMIC_STATE_DEPTH_BIAS@, and the @depthBiasEnable@ member of
---     @pRasterizationState@ is @VK_TRUE@, the @depthBiasClamp@ member of
---     @pRasterizationState@ /must/ be @0.0@
---
--- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
---     @VK_DYNAMIC_STATE_DEPTH_BOUNDS@, and the @depthBoundsTestEnable@
---     member of @pDepthStencilState@ is @VK_TRUE@, the @minDepthBounds@
---     and @maxDepthBounds@ members of @pDepthStencilState@ /must/ be
---     between @0.0@ and @1.0@, inclusive
---
--- -   @layout@ /must/ be
---     <{html_spec_relative}#descriptorsets-pipelinelayout-consistency consistent>
---     with all shaders specified in @pStages@
---
--- -   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 @subpass@ does not use any color and\/or depth\/stencil
---     attachments, then the @rasterizationSamples@ member of
---     @pMultisampleState@ /must/ follow the rules for a
---     <{html_spec_relative}#renderpass-noattachments zero-attachment subpass>
---
--- -   @subpass@ /must/ be a valid subpass within @renderPass@
---
--- -   The number of resources in @layout@ accessible to each shader stage
---     that is used by the pipeline /must/ be less than or equal to
---     @VkPhysicalDeviceLimits@::@maxPerStageResources@
---
--- == Valid Usage (Implicit)
---
--- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO@
---
--- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
---     'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPipelineDiscardRectangleStateCreateInfoEXT'
---
--- -   @flags@ /must/ be a valid combination of 'VkPipelineCreateFlagBits'
---     values
---
--- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
---     valid @VkPipelineShaderStageCreateInfo@ structures
---
--- -   @pVertexInputState@ /must/ be a valid pointer to a valid
---     @VkPipelineVertexInputStateCreateInfo@ structure
---
--- -   @pInputAssemblyState@ /must/ be a valid pointer to a valid
---     @VkPipelineInputAssemblyStateCreateInfo@ structure
---
--- -   @pRasterizationState@ /must/ be a valid pointer to a valid
---     @VkPipelineRasterizationStateCreateInfo@ structure
---
--- -   If @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid
---     pointer to a valid @VkPipelineDynamicStateCreateInfo@ structure
---
--- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
---
--- -   @renderPass@ /must/ be a valid @VkRenderPass@ handle
---
--- -   @stageCount@ /must/ be greater than @0@
---
--- -   Each of @basePipelineHandle@, @layout@, and @renderPass@ that are
---     valid handles /must/ have been created, allocated, or retrieved from
---     the same @VkDevice@
---
--- = See Also
--- #_see_also#
---
--- 'VkPipeline', 'VkPipelineColorBlendStateCreateInfo',
--- 'VkPipelineCreateFlags', 'VkPipelineDepthStencilStateCreateInfo',
--- 'VkPipelineDynamicStateCreateInfo',
--- 'VkPipelineInputAssemblyStateCreateInfo', 'VkPipelineLayout',
--- 'VkPipelineMultisampleStateCreateInfo',
--- 'VkPipelineRasterizationStateCreateInfo',
--- 'VkPipelineShaderStageCreateInfo',
--- 'VkPipelineTessellationStateCreateInfo',
--- 'VkPipelineVertexInputStateCreateInfo',
--- 'VkPipelineViewportStateCreateInfo', 'VkRenderPass',
--- 'Graphics.Vulkan.Core10.Core.VkStructureType',
--- 'vkCreateGraphicsPipelines'
-data VkGraphicsPipelineCreateInfo = VkGraphicsPipelineCreateInfo
-  { -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkSType"
-  vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPNext"
-  vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkFlags"
-  vkFlags :: VkPipelineCreateFlags
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkStageCount"
-  vkStageCount :: Word32
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPStages"
-  vkPStages :: Ptr VkPipelineShaderStageCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPVertexInputState"
-  vkPVertexInputState :: Ptr VkPipelineVertexInputStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPInputAssemblyState"
-  vkPInputAssemblyState :: Ptr VkPipelineInputAssemblyStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPTessellationState"
-  vkPTessellationState :: Ptr VkPipelineTessellationStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPViewportState"
-  vkPViewportState :: Ptr VkPipelineViewportStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPRasterizationState"
-  vkPRasterizationState :: Ptr VkPipelineRasterizationStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPMultisampleState"
-  vkPMultisampleState :: Ptr VkPipelineMultisampleStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPDepthStencilState"
-  vkPDepthStencilState :: Ptr VkPipelineDepthStencilStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPColorBlendState"
-  vkPColorBlendState :: Ptr VkPipelineColorBlendStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkPDynamicState"
-  vkPDynamicState :: Ptr VkPipelineDynamicStateCreateInfo
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkLayout"
-  vkLayout :: VkPipelineLayout
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkRenderPass"
-  vkRenderPass :: VkRenderPass
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkSubpass"
-  vkSubpass :: Word32
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkBasePipelineHandle"
-  vkBasePipelineHandle :: VkPipeline
-  , -- No documentation found for Nested "VkGraphicsPipelineCreateInfo" "vkBasePipelineIndex"
-  vkBasePipelineIndex :: Int32
-  }
-  deriving (Eq, Show)
-
-instance Storable VkGraphicsPipelineCreateInfo where
-  sizeOf ~_ = 144
-  alignment ~_ = 8
-  peek ptr = VkGraphicsPipelineCreateInfo <$> peek (ptr `plusPtr` 0)
-                                          <*> peek (ptr `plusPtr` 8)
-                                          <*> peek (ptr `plusPtr` 16)
-                                          <*> peek (ptr `plusPtr` 20)
-                                          <*> peek (ptr `plusPtr` 24)
-                                          <*> peek (ptr `plusPtr` 32)
-                                          <*> peek (ptr `plusPtr` 40)
-                                          <*> peek (ptr `plusPtr` 48)
-                                          <*> peek (ptr `plusPtr` 56)
-                                          <*> peek (ptr `plusPtr` 64)
-                                          <*> peek (ptr `plusPtr` 72)
-                                          <*> peek (ptr `plusPtr` 80)
-                                          <*> peek (ptr `plusPtr` 88)
-                                          <*> peek (ptr `plusPtr` 96)
-                                          <*> peek (ptr `plusPtr` 104)
-                                          <*> peek (ptr `plusPtr` 112)
-                                          <*> peek (ptr `plusPtr` 120)
-                                          <*> peek (ptr `plusPtr` 128)
-                                          <*> peek (ptr `plusPtr` 136)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkStageCount (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPStages (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPVertexInputState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPInputAssemblyState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkPTessellationState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkPViewportState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 64) (vkPRasterizationState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 72) (vkPMultisampleState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 80) (vkPDepthStencilState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 88) (vkPColorBlendState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 96) (vkPDynamicState (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 104) (vkLayout (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 112) (vkRenderPass (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 120) (vkSubpass (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 128) (vkBasePipelineHandle (poked :: VkGraphicsPipelineCreateInfo))
-                *> poke (ptr `plusPtr` 136) (vkBasePipelineIndex (poked :: VkGraphicsPipelineCreateInfo))
--- | VkPipelineCreateFlags - Bitmask of VkPipelineCreateFlagBits
---
--- = Description
--- #_description#
---
--- @VkPipelineCreateFlags@ is a bitmask type for setting a mask of zero or
--- more 'VkPipelineCreateFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
--- 'VkPipelineCreateFlagBits'
-type VkPipelineCreateFlags = VkPipelineCreateFlagBits
--- | VkColorComponentFlags - Bitmask of VkColorComponentFlagBits
---
--- = Description
--- #_description#
---
--- @VkColorComponentFlags@ is a bitmask type for setting a mask of zero or
--- more 'VkColorComponentFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkColorComponentFlagBits', 'VkPipelineColorBlendAttachmentState'
-type VkColorComponentFlags = VkColorComponentFlagBits
--- | VkCullModeFlags - Bitmask of VkCullModeFlagBits
---
--- = Description
--- #_description#
---
--- @VkCullModeFlags@ is a bitmask type for setting a mask of zero or more
--- 'VkCullModeFlagBits'.
---
--- = See Also
--- #_see_also#
---
--- 'VkCullModeFlagBits', 'VkPipelineRasterizationStateCreateInfo'
-type VkCullModeFlags = VkCullModeFlagBits
--- | VkSampleMask - Mask of sample coverage information
---
--- = Description
--- #_description#
---
--- = See Also
--- #_see_also#
+--
+-- The semantics of each enum value is described in the table below:
+--
+-- +--------------------------------------------+---------------------+--------+
+-- | VkBlendFactor                              | RGB Blend Factors   | Alpha  |
+-- |                                            | (Sr,Sg,Sb) or       | Blend  |
+-- |                                            | (Dr,Dg,Db)          | Factor |
+-- |                                            |                     | (Sa or |
+-- |                                            |                     | Da)    |
+-- +============================================+=====================+========+
+-- | @VK_BLEND_FACTOR_ZERO@                     | (0,0,0)             | 0      |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE@                      | (1,1,1)             | 1      |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_SRC_COLOR@                | (Rs0,Gs0,Bs0)       | As0    |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR@      | (1-Rs0,1-Gs0,1-Bs0) | 1-As0  |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_DST_COLOR@                | (Rd,Gd,Bd)          | Ad     |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR@      | (1-Rd,1-Gd,1-Bd)    | 1-Ad   |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_SRC_ALPHA@                | (As0,As0,As0)       | As0    |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA@      | (1-As0,1-As0,1-As0) | 1-As0  |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_DST_ALPHA@                | (Ad,Ad,Ad)          | Ad     |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA@      | (1-Ad,1-Ad,1-Ad)    | 1-Ad   |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_CONSTANT_COLOR@           | (Rc,Gc,Bc)          | Ac     |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR@ | (1-Rc,1-Gc,1-Bc)    | 1-Ac   |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_CONSTANT_ALPHA@           | (Ac,Ac,Ac)          | Ac     |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA@ | (1-Ac,1-Ac,1-Ac)    | 1-Ac   |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_SRC_ALPHA_SATURATE@       | (f,f,f); f =        | 1      |
+-- |                                            | min(As0,1-Ad)       |        |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_SRC1_COLOR@               | (Rs1,Gs1,Bs1)       | As1    |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@     | (1-Rs1,1-Gs1,1-Bs1) | 1-As1  |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_SRC1_ALPHA@               | (As1,As1,As1)       | As1    |
+-- +--------------------------------------------+---------------------+--------+
+-- | @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@     | (1-As1,1-As1,1-As1) | 1-As1  |
+-- +--------------------------------------------+---------------------+--------+
+--
+-- Blend Factors
+--
+-- In this table, the following conventions are used:
+--
+-- -   Rs0,Gs0,Bs0 and As0 represent the first source color R, G, B, and A
+--     components, respectively, for the fragment output location
+--     corresponding to the color attachment being blended.
+--
+-- -   Rs1,Gs1,Bs1 and As1 represent the second source color R, G, B, and A
+--     components, respectively, used in dual source blending modes, for
+--     the fragment output location corresponding to the color attachment
+--     being blended.
+--
+-- -   Rd,Gd,Bd and Ad represent the R, G, B, and A components of the
+--     destination color. That is, the color currently in the corresponding
+--     color attachment for this fragment\/sample.
+--
+-- -   Rc,Gc,Bc and Ac represent the blend constant R, G, B, and A
+--     components, respectively.
+--
+-- = See Also
+--
+-- 'VkPipelineColorBlendAttachmentState'
+newtype VkBlendFactor = VkBlendFactor Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkBlendFactor where
+  showsPrec _ VK_BLEND_FACTOR_ZERO = showString "VK_BLEND_FACTOR_ZERO"
+  showsPrec _ VK_BLEND_FACTOR_ONE = showString "VK_BLEND_FACTOR_ONE"
+  showsPrec _ VK_BLEND_FACTOR_SRC_COLOR = showString "VK_BLEND_FACTOR_SRC_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_DST_COLOR = showString "VK_BLEND_FACTOR_DST_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_SRC_ALPHA = showString "VK_BLEND_FACTOR_SRC_ALPHA"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
+  showsPrec _ VK_BLEND_FACTOR_DST_ALPHA = showString "VK_BLEND_FACTOR_DST_ALPHA"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
+  showsPrec _ VK_BLEND_FACTOR_CONSTANT_COLOR = showString "VK_BLEND_FACTOR_CONSTANT_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_CONSTANT_ALPHA = showString "VK_BLEND_FACTOR_CONSTANT_ALPHA"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
+  showsPrec _ VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = showString "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
+  showsPrec _ VK_BLEND_FACTOR_SRC1_COLOR = showString "VK_BLEND_FACTOR_SRC1_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
+  showsPrec _ VK_BLEND_FACTOR_SRC1_ALPHA = showString "VK_BLEND_FACTOR_SRC1_ALPHA"
+  showsPrec _ VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = showString "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
+  showsPrec p (VkBlendFactor x) = showParen (p >= 11) (showString "VkBlendFactor " . showsPrec 11 x)
+
+instance Read VkBlendFactor where
+  readPrec = parens ( choose [ ("VK_BLEND_FACTOR_ZERO",                     pure VK_BLEND_FACTOR_ZERO)
+                             , ("VK_BLEND_FACTOR_ONE",                      pure VK_BLEND_FACTOR_ONE)
+                             , ("VK_BLEND_FACTOR_SRC_COLOR",                pure VK_BLEND_FACTOR_SRC_COLOR)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR",      pure VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR)
+                             , ("VK_BLEND_FACTOR_DST_COLOR",                pure VK_BLEND_FACTOR_DST_COLOR)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR",      pure VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR)
+                             , ("VK_BLEND_FACTOR_SRC_ALPHA",                pure VK_BLEND_FACTOR_SRC_ALPHA)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA",      pure VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA)
+                             , ("VK_BLEND_FACTOR_DST_ALPHA",                pure VK_BLEND_FACTOR_DST_ALPHA)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA",      pure VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA)
+                             , ("VK_BLEND_FACTOR_CONSTANT_COLOR",           pure VK_BLEND_FACTOR_CONSTANT_COLOR)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR", pure VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR)
+                             , ("VK_BLEND_FACTOR_CONSTANT_ALPHA",           pure VK_BLEND_FACTOR_CONSTANT_ALPHA)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA", pure VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA)
+                             , ("VK_BLEND_FACTOR_SRC_ALPHA_SATURATE",       pure VK_BLEND_FACTOR_SRC_ALPHA_SATURATE)
+                             , ("VK_BLEND_FACTOR_SRC1_COLOR",               pure VK_BLEND_FACTOR_SRC1_COLOR)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR",     pure VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR)
+                             , ("VK_BLEND_FACTOR_SRC1_ALPHA",               pure VK_BLEND_FACTOR_SRC1_ALPHA)
+                             , ("VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA",     pure VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBlendFactor")
+                        v <- step readPrec
+                        pure (VkBlendFactor v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ZERO"
+pattern VK_BLEND_FACTOR_ZERO :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ZERO = VkBlendFactor 0
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE"
+pattern VK_BLEND_FACTOR_ONE :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE = VkBlendFactor 1
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_COLOR"
+pattern VK_BLEND_FACTOR_SRC_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_SRC_COLOR = VkBlendFactor 2
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR"
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = VkBlendFactor 3
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_COLOR"
+pattern VK_BLEND_FACTOR_DST_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_DST_COLOR = VkBlendFactor 4
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR"
+pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = VkBlendFactor 5
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA"
+pattern VK_BLEND_FACTOR_SRC_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_SRC_ALPHA = VkBlendFactor 6
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA"
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = VkBlendFactor 7
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_DST_ALPHA"
+pattern VK_BLEND_FACTOR_DST_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_DST_ALPHA = VkBlendFactor 8
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA"
+pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = VkBlendFactor 9
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_COLOR"
+pattern VK_BLEND_FACTOR_CONSTANT_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_CONSTANT_COLOR = VkBlendFactor 10
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR"
+pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = VkBlendFactor 11
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_CONSTANT_ALPHA"
+pattern VK_BLEND_FACTOR_CONSTANT_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_CONSTANT_ALPHA = VkBlendFactor 12
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA"
+pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = VkBlendFactor 13
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC_ALPHA_SATURATE"
+pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE :: VkBlendFactor
+pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = VkBlendFactor 14
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_COLOR"
+pattern VK_BLEND_FACTOR_SRC1_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_SRC1_COLOR = VkBlendFactor 15
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR"
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = VkBlendFactor 16
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_SRC1_ALPHA"
+pattern VK_BLEND_FACTOR_SRC1_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_SRC1_ALPHA = VkBlendFactor 17
+
+-- No documentation found for Nested "VkBlendFactor" "VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA"
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA :: VkBlendFactor
+pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = VkBlendFactor 18
+-- ** VkBlendOp
+
+-- | VkBlendOp - Framebuffer blending operations
+--
+-- = Description
+--
+-- The semantics of each basic blend operations is described in the table
+-- below:
+--
+-- +--------------------------------+--------------------+----------------+
+-- | VkBlendOp                      | RGB Components     | Alpha          |
+-- |                                |                    | Component      |
+-- +================================+====================+================+
+-- | @VK_BLEND_OP_ADD@              | R = Rs0 × Sr + Rd  | A = As0 × Sa + |
+-- |                                | × Dr               | Ad × Da        |
+-- |                                | G = Gs0 × Sg + Gd  |                |
+-- |                                | × Dg               |                |
+-- |                                | B = Bs0 × Sb + Bd  |                |
+-- |                                | × Db               |                |
+-- +--------------------------------+--------------------+----------------+
+-- | @VK_BLEND_OP_SUBTRACT@         | R = Rs0 × Sr - Rd  | A = As0 × Sa - |
+-- |                                | × Dr               | Ad × Da        |
+-- |                                | G = Gs0 × Sg - Gd  |                |
+-- |                                | × Dg               |                |
+-- |                                | B = Bs0 × Sb - Bd  |                |
+-- |                                | × Db               |                |
+-- +--------------------------------+--------------------+----------------+
+-- | @VK_BLEND_OP_REVERSE_SUBTRACT@ | R = Rd × Dr - Rs0  | A = Ad × Da -  |
+-- |                                | × Sr               | As0 × Sa       |
+-- |                                | G = Gd × Dg - Gs0  |                |
+-- |                                | × Sg               |                |
+-- |                                | B = Bd × Db - Bs0  |                |
+-- |                                | × Sb               |                |
+-- +--------------------------------+--------------------+----------------+
+-- | @VK_BLEND_OP_MIN@              | R = min(Rs0,Rd)    | A =            |
+-- |                                | G = min(Gs0,Gd)    | min(As0,Ad)    |
+-- |                                | B = min(Bs0,Bd)    |                |
+-- +--------------------------------+--------------------+----------------+
+-- | @VK_BLEND_OP_MAX@              | R = max(Rs0,Rd)    | A =            |
+-- |                                | G = max(Gs0,Gd)    | max(As0,Ad)    |
+-- |                                | B = max(Bs0,Bd)    |                |
+-- +--------------------------------+--------------------+----------------+
+--
+-- Basic Blend Operations
+--
+-- In this table, the following conventions are used:
+--
+-- -   Rs0, Gs0, Bs0 and As0 represent the first source color R, G, B, and
+--     A components, respectively.
+--
+-- -   Rd, Gd, Bd and Ad represent the R, G, B, and A components of the
+--     destination color. That is, the color currently in the corresponding
+--     color attachment for this fragment\/sample.
+--
+-- -   Sr, Sg, Sb and Sa represent the source blend factor R, G, B, and A
+--     components, respectively.
+--
+-- -   Dr, Dg, Db and Da represent the destination blend factor R, G, B,
+--     and A components, respectively.
+--
+-- The blending operation produces a new set of values R, G, B and A, which
+-- are written to the framebuffer attachment. If blending is not enabled
+-- for this attachment, then R, G, B and A are assigned Rs0, Gs0, Bs0 and
+-- As0, respectively.
+--
+-- If the color attachment is fixed-point, the components of the source and
+-- destination values and blend factors are each clamped to [0,1] or [-1,1]
+-- respectively for an unsigned normalized or signed normalized color
+-- attachment prior to evaluating the blend operations. If the color
+-- attachment is floating-point, no clamping occurs.
+--
+-- = See Also
+--
+-- 'VkPipelineColorBlendAttachmentState'
+newtype VkBlendOp = VkBlendOp Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkBlendOp where
+  showsPrec _ VK_BLEND_OP_ADD = showString "VK_BLEND_OP_ADD"
+  showsPrec _ VK_BLEND_OP_SUBTRACT = showString "VK_BLEND_OP_SUBTRACT"
+  showsPrec _ VK_BLEND_OP_REVERSE_SUBTRACT = showString "VK_BLEND_OP_REVERSE_SUBTRACT"
+  showsPrec _ VK_BLEND_OP_MIN = showString "VK_BLEND_OP_MIN"
+  showsPrec _ VK_BLEND_OP_MAX = showString "VK_BLEND_OP_MAX"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkBlendOp 1000148000) = showString "VK_BLEND_OP_ZERO_EXT"
+  showsPrec _ (VkBlendOp 1000148001) = showString "VK_BLEND_OP_SRC_EXT"
+  showsPrec _ (VkBlendOp 1000148002) = showString "VK_BLEND_OP_DST_EXT"
+  showsPrec _ (VkBlendOp 1000148003) = showString "VK_BLEND_OP_SRC_OVER_EXT"
+  showsPrec _ (VkBlendOp 1000148004) = showString "VK_BLEND_OP_DST_OVER_EXT"
+  showsPrec _ (VkBlendOp 1000148005) = showString "VK_BLEND_OP_SRC_IN_EXT"
+  showsPrec _ (VkBlendOp 1000148006) = showString "VK_BLEND_OP_DST_IN_EXT"
+  showsPrec _ (VkBlendOp 1000148007) = showString "VK_BLEND_OP_SRC_OUT_EXT"
+  showsPrec _ (VkBlendOp 1000148008) = showString "VK_BLEND_OP_DST_OUT_EXT"
+  showsPrec _ (VkBlendOp 1000148009) = showString "VK_BLEND_OP_SRC_ATOP_EXT"
+  showsPrec _ (VkBlendOp 1000148010) = showString "VK_BLEND_OP_DST_ATOP_EXT"
+  showsPrec _ (VkBlendOp 1000148011) = showString "VK_BLEND_OP_XOR_EXT"
+  showsPrec _ (VkBlendOp 1000148012) = showString "VK_BLEND_OP_MULTIPLY_EXT"
+  showsPrec _ (VkBlendOp 1000148013) = showString "VK_BLEND_OP_SCREEN_EXT"
+  showsPrec _ (VkBlendOp 1000148014) = showString "VK_BLEND_OP_OVERLAY_EXT"
+  showsPrec _ (VkBlendOp 1000148015) = showString "VK_BLEND_OP_DARKEN_EXT"
+  showsPrec _ (VkBlendOp 1000148016) = showString "VK_BLEND_OP_LIGHTEN_EXT"
+  showsPrec _ (VkBlendOp 1000148017) = showString "VK_BLEND_OP_COLORDODGE_EXT"
+  showsPrec _ (VkBlendOp 1000148018) = showString "VK_BLEND_OP_COLORBURN_EXT"
+  showsPrec _ (VkBlendOp 1000148019) = showString "VK_BLEND_OP_HARDLIGHT_EXT"
+  showsPrec _ (VkBlendOp 1000148020) = showString "VK_BLEND_OP_SOFTLIGHT_EXT"
+  showsPrec _ (VkBlendOp 1000148021) = showString "VK_BLEND_OP_DIFFERENCE_EXT"
+  showsPrec _ (VkBlendOp 1000148022) = showString "VK_BLEND_OP_EXCLUSION_EXT"
+  showsPrec _ (VkBlendOp 1000148023) = showString "VK_BLEND_OP_INVERT_EXT"
+  showsPrec _ (VkBlendOp 1000148024) = showString "VK_BLEND_OP_INVERT_RGB_EXT"
+  showsPrec _ (VkBlendOp 1000148025) = showString "VK_BLEND_OP_LINEARDODGE_EXT"
+  showsPrec _ (VkBlendOp 1000148026) = showString "VK_BLEND_OP_LINEARBURN_EXT"
+  showsPrec _ (VkBlendOp 1000148027) = showString "VK_BLEND_OP_VIVIDLIGHT_EXT"
+  showsPrec _ (VkBlendOp 1000148028) = showString "VK_BLEND_OP_LINEARLIGHT_EXT"
+  showsPrec _ (VkBlendOp 1000148029) = showString "VK_BLEND_OP_PINLIGHT_EXT"
+  showsPrec _ (VkBlendOp 1000148030) = showString "VK_BLEND_OP_HARDMIX_EXT"
+  showsPrec _ (VkBlendOp 1000148031) = showString "VK_BLEND_OP_HSL_HUE_EXT"
+  showsPrec _ (VkBlendOp 1000148032) = showString "VK_BLEND_OP_HSL_SATURATION_EXT"
+  showsPrec _ (VkBlendOp 1000148033) = showString "VK_BLEND_OP_HSL_COLOR_EXT"
+  showsPrec _ (VkBlendOp 1000148034) = showString "VK_BLEND_OP_HSL_LUMINOSITY_EXT"
+  showsPrec _ (VkBlendOp 1000148035) = showString "VK_BLEND_OP_PLUS_EXT"
+  showsPrec _ (VkBlendOp 1000148036) = showString "VK_BLEND_OP_PLUS_CLAMPED_EXT"
+  showsPrec _ (VkBlendOp 1000148037) = showString "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
+  showsPrec _ (VkBlendOp 1000148038) = showString "VK_BLEND_OP_PLUS_DARKER_EXT"
+  showsPrec _ (VkBlendOp 1000148039) = showString "VK_BLEND_OP_MINUS_EXT"
+  showsPrec _ (VkBlendOp 1000148040) = showString "VK_BLEND_OP_MINUS_CLAMPED_EXT"
+  showsPrec _ (VkBlendOp 1000148041) = showString "VK_BLEND_OP_CONTRAST_EXT"
+  showsPrec _ (VkBlendOp 1000148042) = showString "VK_BLEND_OP_INVERT_OVG_EXT"
+  showsPrec _ (VkBlendOp 1000148043) = showString "VK_BLEND_OP_RED_EXT"
+  showsPrec _ (VkBlendOp 1000148044) = showString "VK_BLEND_OP_GREEN_EXT"
+  showsPrec _ (VkBlendOp 1000148045) = showString "VK_BLEND_OP_BLUE_EXT"
+  showsPrec p (VkBlendOp x) = showParen (p >= 11) (showString "VkBlendOp " . showsPrec 11 x)
+
+instance Read VkBlendOp where
+  readPrec = parens ( choose [ ("VK_BLEND_OP_ADD",              pure VK_BLEND_OP_ADD)
+                             , ("VK_BLEND_OP_SUBTRACT",         pure VK_BLEND_OP_SUBTRACT)
+                             , ("VK_BLEND_OP_REVERSE_SUBTRACT", pure VK_BLEND_OP_REVERSE_SUBTRACT)
+                             , ("VK_BLEND_OP_MIN",              pure VK_BLEND_OP_MIN)
+                             , ("VK_BLEND_OP_MAX",              pure VK_BLEND_OP_MAX)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_BLEND_OP_ZERO_EXT",               pure (VkBlendOp 1000148000))
+                             , ("VK_BLEND_OP_SRC_EXT",                pure (VkBlendOp 1000148001))
+                             , ("VK_BLEND_OP_DST_EXT",                pure (VkBlendOp 1000148002))
+                             , ("VK_BLEND_OP_SRC_OVER_EXT",           pure (VkBlendOp 1000148003))
+                             , ("VK_BLEND_OP_DST_OVER_EXT",           pure (VkBlendOp 1000148004))
+                             , ("VK_BLEND_OP_SRC_IN_EXT",             pure (VkBlendOp 1000148005))
+                             , ("VK_BLEND_OP_DST_IN_EXT",             pure (VkBlendOp 1000148006))
+                             , ("VK_BLEND_OP_SRC_OUT_EXT",            pure (VkBlendOp 1000148007))
+                             , ("VK_BLEND_OP_DST_OUT_EXT",            pure (VkBlendOp 1000148008))
+                             , ("VK_BLEND_OP_SRC_ATOP_EXT",           pure (VkBlendOp 1000148009))
+                             , ("VK_BLEND_OP_DST_ATOP_EXT",           pure (VkBlendOp 1000148010))
+                             , ("VK_BLEND_OP_XOR_EXT",                pure (VkBlendOp 1000148011))
+                             , ("VK_BLEND_OP_MULTIPLY_EXT",           pure (VkBlendOp 1000148012))
+                             , ("VK_BLEND_OP_SCREEN_EXT",             pure (VkBlendOp 1000148013))
+                             , ("VK_BLEND_OP_OVERLAY_EXT",            pure (VkBlendOp 1000148014))
+                             , ("VK_BLEND_OP_DARKEN_EXT",             pure (VkBlendOp 1000148015))
+                             , ("VK_BLEND_OP_LIGHTEN_EXT",            pure (VkBlendOp 1000148016))
+                             , ("VK_BLEND_OP_COLORDODGE_EXT",         pure (VkBlendOp 1000148017))
+                             , ("VK_BLEND_OP_COLORBURN_EXT",          pure (VkBlendOp 1000148018))
+                             , ("VK_BLEND_OP_HARDLIGHT_EXT",          pure (VkBlendOp 1000148019))
+                             , ("VK_BLEND_OP_SOFTLIGHT_EXT",          pure (VkBlendOp 1000148020))
+                             , ("VK_BLEND_OP_DIFFERENCE_EXT",         pure (VkBlendOp 1000148021))
+                             , ("VK_BLEND_OP_EXCLUSION_EXT",          pure (VkBlendOp 1000148022))
+                             , ("VK_BLEND_OP_INVERT_EXT",             pure (VkBlendOp 1000148023))
+                             , ("VK_BLEND_OP_INVERT_RGB_EXT",         pure (VkBlendOp 1000148024))
+                             , ("VK_BLEND_OP_LINEARDODGE_EXT",        pure (VkBlendOp 1000148025))
+                             , ("VK_BLEND_OP_LINEARBURN_EXT",         pure (VkBlendOp 1000148026))
+                             , ("VK_BLEND_OP_VIVIDLIGHT_EXT",         pure (VkBlendOp 1000148027))
+                             , ("VK_BLEND_OP_LINEARLIGHT_EXT",        pure (VkBlendOp 1000148028))
+                             , ("VK_BLEND_OP_PINLIGHT_EXT",           pure (VkBlendOp 1000148029))
+                             , ("VK_BLEND_OP_HARDMIX_EXT",            pure (VkBlendOp 1000148030))
+                             , ("VK_BLEND_OP_HSL_HUE_EXT",            pure (VkBlendOp 1000148031))
+                             , ("VK_BLEND_OP_HSL_SATURATION_EXT",     pure (VkBlendOp 1000148032))
+                             , ("VK_BLEND_OP_HSL_COLOR_EXT",          pure (VkBlendOp 1000148033))
+                             , ("VK_BLEND_OP_HSL_LUMINOSITY_EXT",     pure (VkBlendOp 1000148034))
+                             , ("VK_BLEND_OP_PLUS_EXT",               pure (VkBlendOp 1000148035))
+                             , ("VK_BLEND_OP_PLUS_CLAMPED_EXT",       pure (VkBlendOp 1000148036))
+                             , ("VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT", pure (VkBlendOp 1000148037))
+                             , ("VK_BLEND_OP_PLUS_DARKER_EXT",        pure (VkBlendOp 1000148038))
+                             , ("VK_BLEND_OP_MINUS_EXT",              pure (VkBlendOp 1000148039))
+                             , ("VK_BLEND_OP_MINUS_CLAMPED_EXT",      pure (VkBlendOp 1000148040))
+                             , ("VK_BLEND_OP_CONTRAST_EXT",           pure (VkBlendOp 1000148041))
+                             , ("VK_BLEND_OP_INVERT_OVG_EXT",         pure (VkBlendOp 1000148042))
+                             , ("VK_BLEND_OP_RED_EXT",                pure (VkBlendOp 1000148043))
+                             , ("VK_BLEND_OP_GREEN_EXT",              pure (VkBlendOp 1000148044))
+                             , ("VK_BLEND_OP_BLUE_EXT",               pure (VkBlendOp 1000148045))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBlendOp")
+                        v <- step readPrec
+                        pure (VkBlendOp v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ADD"
+pattern VK_BLEND_OP_ADD :: VkBlendOp
+pattern VK_BLEND_OP_ADD = VkBlendOp 0
+
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SUBTRACT"
+pattern VK_BLEND_OP_SUBTRACT :: VkBlendOp
+pattern VK_BLEND_OP_SUBTRACT = VkBlendOp 1
+
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_REVERSE_SUBTRACT"
+pattern VK_BLEND_OP_REVERSE_SUBTRACT :: VkBlendOp
+pattern VK_BLEND_OP_REVERSE_SUBTRACT = VkBlendOp 2
+
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MIN"
+pattern VK_BLEND_OP_MIN :: VkBlendOp
+pattern VK_BLEND_OP_MIN = VkBlendOp 3
+
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MAX"
+pattern VK_BLEND_OP_MAX :: VkBlendOp
+pattern VK_BLEND_OP_MAX = VkBlendOp 4
+-- ** VkCompareOp
+
+-- | VkCompareOp - Stencil comparison function
+--
+-- = See Also
+--
+-- 'VkPipelineDepthStencilStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Sampler.VkSamplerCreateInfo', 'VkStencilOpState'
+newtype VkCompareOp = VkCompareOp Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkCompareOp where
+  showsPrec _ VK_COMPARE_OP_NEVER = showString "VK_COMPARE_OP_NEVER"
+  showsPrec _ VK_COMPARE_OP_LESS = showString "VK_COMPARE_OP_LESS"
+  showsPrec _ VK_COMPARE_OP_EQUAL = showString "VK_COMPARE_OP_EQUAL"
+  showsPrec _ VK_COMPARE_OP_LESS_OR_EQUAL = showString "VK_COMPARE_OP_LESS_OR_EQUAL"
+  showsPrec _ VK_COMPARE_OP_GREATER = showString "VK_COMPARE_OP_GREATER"
+  showsPrec _ VK_COMPARE_OP_NOT_EQUAL = showString "VK_COMPARE_OP_NOT_EQUAL"
+  showsPrec _ VK_COMPARE_OP_GREATER_OR_EQUAL = showString "VK_COMPARE_OP_GREATER_OR_EQUAL"
+  showsPrec _ VK_COMPARE_OP_ALWAYS = showString "VK_COMPARE_OP_ALWAYS"
+  showsPrec p (VkCompareOp x) = showParen (p >= 11) (showString "VkCompareOp " . showsPrec 11 x)
+
+instance Read VkCompareOp where
+  readPrec = parens ( choose [ ("VK_COMPARE_OP_NEVER",            pure VK_COMPARE_OP_NEVER)
+                             , ("VK_COMPARE_OP_LESS",             pure VK_COMPARE_OP_LESS)
+                             , ("VK_COMPARE_OP_EQUAL",            pure VK_COMPARE_OP_EQUAL)
+                             , ("VK_COMPARE_OP_LESS_OR_EQUAL",    pure VK_COMPARE_OP_LESS_OR_EQUAL)
+                             , ("VK_COMPARE_OP_GREATER",          pure VK_COMPARE_OP_GREATER)
+                             , ("VK_COMPARE_OP_NOT_EQUAL",        pure VK_COMPARE_OP_NOT_EQUAL)
+                             , ("VK_COMPARE_OP_GREATER_OR_EQUAL", pure VK_COMPARE_OP_GREATER_OR_EQUAL)
+                             , ("VK_COMPARE_OP_ALWAYS",           pure VK_COMPARE_OP_ALWAYS)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCompareOp")
+                        v <- step readPrec
+                        pure (VkCompareOp v)
+                        )
+                    )
+
+-- | @VK_COMPARE_OP_NEVER@ specifies that the test never passes.
+pattern VK_COMPARE_OP_NEVER :: VkCompareOp
+pattern VK_COMPARE_OP_NEVER = VkCompareOp 0
+
+-- | @VK_COMPARE_OP_LESS@ specifies that the test passes when R \< S.
+pattern VK_COMPARE_OP_LESS :: VkCompareOp
+pattern VK_COMPARE_OP_LESS = VkCompareOp 1
+
+-- | @VK_COMPARE_OP_EQUAL@ specifies that the test passes when R = S.
+pattern VK_COMPARE_OP_EQUAL :: VkCompareOp
+pattern VK_COMPARE_OP_EQUAL = VkCompareOp 2
+
+-- | @VK_COMPARE_OP_LESS_OR_EQUAL@ specifies that the test passes when R ≤ S.
+pattern VK_COMPARE_OP_LESS_OR_EQUAL :: VkCompareOp
+pattern VK_COMPARE_OP_LESS_OR_EQUAL = VkCompareOp 3
+
+-- | @VK_COMPARE_OP_GREATER@ specifies that the test passes when R > S.
+pattern VK_COMPARE_OP_GREATER :: VkCompareOp
+pattern VK_COMPARE_OP_GREATER = VkCompareOp 4
+
+-- | @VK_COMPARE_OP_NOT_EQUAL@ specifies that the test passes when R ≠ S.
+pattern VK_COMPARE_OP_NOT_EQUAL :: VkCompareOp
+pattern VK_COMPARE_OP_NOT_EQUAL = VkCompareOp 5
+
+-- | @VK_COMPARE_OP_GREATER_OR_EQUAL@ specifies that the test passes when R ≥
+-- S.
+pattern VK_COMPARE_OP_GREATER_OR_EQUAL :: VkCompareOp
+pattern VK_COMPARE_OP_GREATER_OR_EQUAL = VkCompareOp 6
+
+-- | @VK_COMPARE_OP_ALWAYS@ specifies that the test always passes.
+pattern VK_COMPARE_OP_ALWAYS :: VkCompareOp
+pattern VK_COMPARE_OP_ALWAYS = VkCompareOp 7
+-- ** VkDynamicState
+
+-- | VkDynamicState - Indicate which dynamic state is taken from dynamic
+-- state commands
+--
+-- = See Also
+--
+-- 'VkPipelineDynamicStateCreateInfo'
+newtype VkDynamicState = VkDynamicState Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDynamicState where
+  showsPrec _ VK_DYNAMIC_STATE_VIEWPORT = showString "VK_DYNAMIC_STATE_VIEWPORT"
+  showsPrec _ VK_DYNAMIC_STATE_SCISSOR = showString "VK_DYNAMIC_STATE_SCISSOR"
+  showsPrec _ VK_DYNAMIC_STATE_LINE_WIDTH = showString "VK_DYNAMIC_STATE_LINE_WIDTH"
+  showsPrec _ VK_DYNAMIC_STATE_DEPTH_BIAS = showString "VK_DYNAMIC_STATE_DEPTH_BIAS"
+  showsPrec _ VK_DYNAMIC_STATE_BLEND_CONSTANTS = showString "VK_DYNAMIC_STATE_BLEND_CONSTANTS"
+  showsPrec _ VK_DYNAMIC_STATE_DEPTH_BOUNDS = showString "VK_DYNAMIC_STATE_DEPTH_BOUNDS"
+  showsPrec _ VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = showString "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK"
+  showsPrec _ VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = showString "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK"
+  showsPrec _ VK_DYNAMIC_STATE_STENCIL_REFERENCE = showString "VK_DYNAMIC_STATE_STENCIL_REFERENCE"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkDynamicState 1000087000) = showString "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"
+  showsPrec _ (VkDynamicState 1000099000) = showString "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"
+  showsPrec _ (VkDynamicState 1000143000) = showString "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"
+  showsPrec p (VkDynamicState x) = showParen (p >= 11) (showString "VkDynamicState " . showsPrec 11 x)
+
+instance Read VkDynamicState where
+  readPrec = parens ( choose [ ("VK_DYNAMIC_STATE_VIEWPORT",             pure VK_DYNAMIC_STATE_VIEWPORT)
+                             , ("VK_DYNAMIC_STATE_SCISSOR",              pure VK_DYNAMIC_STATE_SCISSOR)
+                             , ("VK_DYNAMIC_STATE_LINE_WIDTH",           pure VK_DYNAMIC_STATE_LINE_WIDTH)
+                             , ("VK_DYNAMIC_STATE_DEPTH_BIAS",           pure VK_DYNAMIC_STATE_DEPTH_BIAS)
+                             , ("VK_DYNAMIC_STATE_BLEND_CONSTANTS",      pure VK_DYNAMIC_STATE_BLEND_CONSTANTS)
+                             , ("VK_DYNAMIC_STATE_DEPTH_BOUNDS",         pure VK_DYNAMIC_STATE_DEPTH_BOUNDS)
+                             , ("VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK", pure VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK)
+                             , ("VK_DYNAMIC_STATE_STENCIL_WRITE_MASK",   pure VK_DYNAMIC_STATE_STENCIL_WRITE_MASK)
+                             , ("VK_DYNAMIC_STATE_STENCIL_REFERENCE",    pure VK_DYNAMIC_STATE_STENCIL_REFERENCE)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV", pure (VkDynamicState 1000087000))
+                             , ("VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT", pure (VkDynamicState 1000099000))
+                             , ("VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT",  pure (VkDynamicState 1000143000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDynamicState")
+                        v <- step readPrec
+                        pure (VkDynamicState v)
+                        )
+                    )
+
+-- | @VK_DYNAMIC_STATE_VIEWPORT@ specifies that the @pViewports@ state in
+-- @VkPipelineViewportStateCreateInfo@ will be ignored and /must/ be set
+-- dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetViewport' before
+-- any draw commands. The number of viewports used by a pipeline is still
+-- specified by the @viewportCount@ member of
+-- @VkPipelineViewportStateCreateInfo@.
+pattern VK_DYNAMIC_STATE_VIEWPORT :: VkDynamicState
+pattern VK_DYNAMIC_STATE_VIEWPORT = VkDynamicState 0
+
+-- | @VK_DYNAMIC_STATE_SCISSOR@ specifies that the @pScissors@ state in
+-- @VkPipelineViewportStateCreateInfo@ will be ignored and /must/ be set
+-- dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetScissor' before
+-- any draw commands. The number of scissor rectangles used by a pipeline
+-- is still specified by the @scissorCount@ member of
+-- @VkPipelineViewportStateCreateInfo@.
+pattern VK_DYNAMIC_STATE_SCISSOR :: VkDynamicState
+pattern VK_DYNAMIC_STATE_SCISSOR = VkDynamicState 1
+
+-- | @VK_DYNAMIC_STATE_LINE_WIDTH@ specifies that the @lineWidth@ state in
+-- @VkPipelineRasterizationStateCreateInfo@ will be ignored and /must/ be
+-- set dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetLineWidth' before
+-- any draw commands that generate line primitives for the rasterizer.
+pattern VK_DYNAMIC_STATE_LINE_WIDTH :: VkDynamicState
+pattern VK_DYNAMIC_STATE_LINE_WIDTH = VkDynamicState 2
+
+-- | @VK_DYNAMIC_STATE_DEPTH_BIAS@ specifies that the
+-- @depthBiasConstantFactor@, @depthBiasClamp@ and @depthBiasSlopeFactor@
+-- states in @VkPipelineRasterizationStateCreateInfo@ will be ignored and
+-- /must/ be set dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBias' before
+-- any draws are performed with @depthBiasEnable@ in
+-- @VkPipelineRasterizationStateCreateInfo@ set to @VK_TRUE@.
+pattern VK_DYNAMIC_STATE_DEPTH_BIAS :: VkDynamicState
+pattern VK_DYNAMIC_STATE_DEPTH_BIAS = VkDynamicState 3
+
+-- | @VK_DYNAMIC_STATE_BLEND_CONSTANTS@ specifies that the @blendConstants@
+-- state in @VkPipelineColorBlendStateCreateInfo@ will be ignored and
+-- /must/ be set dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetBlendConstants'
+-- before any draws are performed with a pipeline state with
+-- @VkPipelineColorBlendAttachmentState@ member @blendEnable@ set to
+-- @VK_TRUE@ and any of the blend functions using a constant blend color.
+pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS :: VkDynamicState
+pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS = VkDynamicState 4
+
+-- | @VK_DYNAMIC_STATE_DEPTH_BOUNDS@ specifies that the @minDepthBounds@ and
+-- @maxDepthBounds@ states of 'VkPipelineDepthStencilStateCreateInfo' will
+-- be ignored and /must/ be set dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBounds'
+-- before any draws are performed with a pipeline state with
+-- @VkPipelineDepthStencilStateCreateInfo@ member @depthBoundsTestEnable@
+-- set to @VK_TRUE@.
+pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS :: VkDynamicState
+pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS = VkDynamicState 5
+
+-- | @VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK@ specifies that the @compareMask@
+-- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
+-- @back@ will be ignored and /must/ be set dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilCompareMask'
+-- before any draws are performed with a pipeline state with
+-- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
+-- to @VK_TRUE@
+pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK :: VkDynamicState
+pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = VkDynamicState 6
+
+-- | @VK_DYNAMIC_STATE_STENCIL_WRITE_MASK@ specifies that the @writeMask@
+-- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
+-- @back@ will be ignored and /must/ be set dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilWriteMask'
+-- before any draws are performed with a pipeline state with
+-- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
+-- to @VK_TRUE@
+pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK :: VkDynamicState
+pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = VkDynamicState 7
+
+-- | @VK_DYNAMIC_STATE_STENCIL_REFERENCE@ specifies that the @reference@
+-- state in @VkPipelineDepthStencilStateCreateInfo@ for both @front@ and
+-- @back@ will be ignored and /must/ be set dynamically with
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilReference'
+-- before any draws are performed with a pipeline state with
+-- @VkPipelineDepthStencilStateCreateInfo@ member @stencilTestEnable@ set
+-- to @VK_TRUE@
+pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE :: VkDynamicState
+pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE = VkDynamicState 8
+-- ** VkPolygonMode
+
+-- | VkPolygonMode - Control polygon rasterization mode
+--
+-- = Description
+--
+-- -   @VK_POLYGON_MODE_POINT@ specifies that polygon vertices are drawn as
+--     points.
+--
+-- -   @VK_POLYGON_MODE_LINE@ specifies that polygon edges are drawn as
+--     line segments.
+--
+-- -   @VK_POLYGON_MODE_FILL@ specifies that polygons are rendered using
+--     the polygon rasterization rules in this section.
+--
+-- -   @VK_POLYGON_MODE_FILL_RECTANGLE_NV@ specifies that polygons are
+--     rendered using polygon rasterization rules, modified to consider a
+--     sample within the primitive if the sample location is inside the
+--     axis-aligned bounding box of the triangle after projection. Note
+--     that the barycentric weights used in attribute interpolation /can/
+--     extend outside the range [0,1] when these primitives are shaded.
+--     Special treatment is given to a sample position on the boundary edge
+--     of the bounding box. In such a case, if two rectangles lie on either
+--     side of a common edge (with identical endpoints) on which a sample
+--     position lies, then exactly one of the triangles /must/ produce a
+--     fragment that covers that sample during rasterization.
+--
+--     Polygons rendered in @VK_POLYGON_MODE_FILL_RECTANGLE_NV@ mode /may/
+--     be clipped by the frustum or by user clip planes. If clipping is
+--     applied, the triangle is culled rather than clipped.
+--
+--     Area calculation and facingness are determined for
+--     @VK_POLYGON_MODE_FILL_RECTANGLE_NV@ mode using the triangle’s
+--     vertices.
+--
+-- These modes affect only the final rasterization of polygons: in
+-- particular, a polygon’s vertices are shaded and the polygon is clipped
+-- and possibly culled before these modes are applied.
+--
+-- = See Also
+--
+-- 'VkPipelineRasterizationStateCreateInfo'
+newtype VkPolygonMode = VkPolygonMode Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkPolygonMode where
+  showsPrec _ VK_POLYGON_MODE_FILL = showString "VK_POLYGON_MODE_FILL"
+  showsPrec _ VK_POLYGON_MODE_LINE = showString "VK_POLYGON_MODE_LINE"
+  showsPrec _ VK_POLYGON_MODE_POINT = showString "VK_POLYGON_MODE_POINT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkPolygonMode 1000153000) = showString "VK_POLYGON_MODE_FILL_RECTANGLE_NV"
+  showsPrec p (VkPolygonMode x) = showParen (p >= 11) (showString "VkPolygonMode " . showsPrec 11 x)
+
+instance Read VkPolygonMode where
+  readPrec = parens ( choose [ ("VK_POLYGON_MODE_FILL",  pure VK_POLYGON_MODE_FILL)
+                             , ("VK_POLYGON_MODE_LINE",  pure VK_POLYGON_MODE_LINE)
+                             , ("VK_POLYGON_MODE_POINT", pure VK_POLYGON_MODE_POINT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_POLYGON_MODE_FILL_RECTANGLE_NV", pure (VkPolygonMode 1000153000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPolygonMode")
+                        v <- step readPrec
+                        pure (VkPolygonMode v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_FILL"
+pattern VK_POLYGON_MODE_FILL :: VkPolygonMode
+pattern VK_POLYGON_MODE_FILL = VkPolygonMode 0
+
+-- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_LINE"
+pattern VK_POLYGON_MODE_LINE :: VkPolygonMode
+pattern VK_POLYGON_MODE_LINE = VkPolygonMode 1
+
+-- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_POINT"
+pattern VK_POLYGON_MODE_POINT :: VkPolygonMode
+pattern VK_POLYGON_MODE_POINT = VkPolygonMode 2
+-- ** VkFrontFace
+
+-- | VkFrontFace - Interpret polygon front-facing orientation
+--
+-- = Description
+--
+-- -   @VK_FRONT_FACE_COUNTER_CLOCKWISE@ specifies that a triangle with
+--     positive area is considered front-facing.
+--
+-- -   @VK_FRONT_FACE_CLOCKWISE@ specifies that a triangle with negative
+--     area is considered front-facing.
+--
+-- Any triangle which is not front-facing is back-facing, including
+-- zero-area triangles.
+--
+-- = See Also
+--
+-- 'VkPipelineRasterizationStateCreateInfo'
+newtype VkFrontFace = VkFrontFace Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkFrontFace where
+  showsPrec _ VK_FRONT_FACE_COUNTER_CLOCKWISE = showString "VK_FRONT_FACE_COUNTER_CLOCKWISE"
+  showsPrec _ VK_FRONT_FACE_CLOCKWISE = showString "VK_FRONT_FACE_CLOCKWISE"
+  showsPrec p (VkFrontFace x) = showParen (p >= 11) (showString "VkFrontFace " . showsPrec 11 x)
+
+instance Read VkFrontFace where
+  readPrec = parens ( choose [ ("VK_FRONT_FACE_COUNTER_CLOCKWISE", pure VK_FRONT_FACE_COUNTER_CLOCKWISE)
+                             , ("VK_FRONT_FACE_CLOCKWISE",         pure VK_FRONT_FACE_CLOCKWISE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkFrontFace")
+                        v <- step readPrec
+                        pure (VkFrontFace v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkFrontFace" "VK_FRONT_FACE_COUNTER_CLOCKWISE"
+pattern VK_FRONT_FACE_COUNTER_CLOCKWISE :: VkFrontFace
+pattern VK_FRONT_FACE_COUNTER_CLOCKWISE = VkFrontFace 0
+
+-- No documentation found for Nested "VkFrontFace" "VK_FRONT_FACE_CLOCKWISE"
+pattern VK_FRONT_FACE_CLOCKWISE :: VkFrontFace
+pattern VK_FRONT_FACE_CLOCKWISE = VkFrontFace 1
+-- ** VkLogicOp
+
+-- | VkLogicOp - Framebuffer logical operations
+--
+-- = Description
+--
+-- The logical operations supported by Vulkan are summarized in the
+-- following table in which
+--
+-- -   ¬ is bitwise invert,
+--
+-- -   ∧ is bitwise and,
+--
+-- -   ∨ is bitwise or,
+--
+-- -   ⊕ is bitwise exclusive or,
+--
+-- -   s is the fragment’s Rs0, Gs0, Bs0 or As0 component value for the
+--     fragment output corresponding to the color attachment being updated,
+--     and
+--
+-- -   d is the color attachment’s R, G, B or A component value:
+--
+-- +-----------------------------------+-----------------------------------+
+-- | Mode                              | Operation                         |
+-- +===================================+===================================+
+-- | @VK_LOGIC_OP_CLEAR@               | 0                                 |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_AND@                 | s ∧ d                             |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_AND_REVERSE@         | s ∧ ¬ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_COPY@                | s                                 |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_AND_INVERTED@        | ¬ s ∧ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_NO_OP@               | d                                 |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_XOR@                 | s ⊕ d                             |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_OR@                  | s ∨ d                             |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_NOR@                 | ¬ (s ∨ d)                         |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_EQUIVALENT@          | ¬ (s ⊕ d)                         |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_INVERT@              | ¬ d                               |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_OR_REVERSE@          | s ∨ ¬ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_COPY_INVERTED@       | ¬ s                               |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_OR_INVERTED@         | ¬ s ∨ d                           |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_NAND@                | ¬ (s ∧ d)                         |
+-- +-----------------------------------+-----------------------------------+
+-- | @VK_LOGIC_OP_SET@                 | all 1s                            |
+-- +-----------------------------------+-----------------------------------+
+--
+-- Logical Operations
+--
+-- The result of the logical operation is then written to the color
+-- attachment as controlled by the component write mask, described in
+-- [Blend
+-- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blendoperations).
+--
+-- = See Also
+--
+-- 'VkPipelineColorBlendStateCreateInfo'
+newtype VkLogicOp = VkLogicOp Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkLogicOp where
+  showsPrec _ VK_LOGIC_OP_CLEAR = showString "VK_LOGIC_OP_CLEAR"
+  showsPrec _ VK_LOGIC_OP_AND = showString "VK_LOGIC_OP_AND"
+  showsPrec _ VK_LOGIC_OP_AND_REVERSE = showString "VK_LOGIC_OP_AND_REVERSE"
+  showsPrec _ VK_LOGIC_OP_COPY = showString "VK_LOGIC_OP_COPY"
+  showsPrec _ VK_LOGIC_OP_AND_INVERTED = showString "VK_LOGIC_OP_AND_INVERTED"
+  showsPrec _ VK_LOGIC_OP_NO_OP = showString "VK_LOGIC_OP_NO_OP"
+  showsPrec _ VK_LOGIC_OP_XOR = showString "VK_LOGIC_OP_XOR"
+  showsPrec _ VK_LOGIC_OP_OR = showString "VK_LOGIC_OP_OR"
+  showsPrec _ VK_LOGIC_OP_NOR = showString "VK_LOGIC_OP_NOR"
+  showsPrec _ VK_LOGIC_OP_EQUIVALENT = showString "VK_LOGIC_OP_EQUIVALENT"
+  showsPrec _ VK_LOGIC_OP_INVERT = showString "VK_LOGIC_OP_INVERT"
+  showsPrec _ VK_LOGIC_OP_OR_REVERSE = showString "VK_LOGIC_OP_OR_REVERSE"
+  showsPrec _ VK_LOGIC_OP_COPY_INVERTED = showString "VK_LOGIC_OP_COPY_INVERTED"
+  showsPrec _ VK_LOGIC_OP_OR_INVERTED = showString "VK_LOGIC_OP_OR_INVERTED"
+  showsPrec _ VK_LOGIC_OP_NAND = showString "VK_LOGIC_OP_NAND"
+  showsPrec _ VK_LOGIC_OP_SET = showString "VK_LOGIC_OP_SET"
+  showsPrec p (VkLogicOp x) = showParen (p >= 11) (showString "VkLogicOp " . showsPrec 11 x)
+
+instance Read VkLogicOp where
+  readPrec = parens ( choose [ ("VK_LOGIC_OP_CLEAR",         pure VK_LOGIC_OP_CLEAR)
+                             , ("VK_LOGIC_OP_AND",           pure VK_LOGIC_OP_AND)
+                             , ("VK_LOGIC_OP_AND_REVERSE",   pure VK_LOGIC_OP_AND_REVERSE)
+                             , ("VK_LOGIC_OP_COPY",          pure VK_LOGIC_OP_COPY)
+                             , ("VK_LOGIC_OP_AND_INVERTED",  pure VK_LOGIC_OP_AND_INVERTED)
+                             , ("VK_LOGIC_OP_NO_OP",         pure VK_LOGIC_OP_NO_OP)
+                             , ("VK_LOGIC_OP_XOR",           pure VK_LOGIC_OP_XOR)
+                             , ("VK_LOGIC_OP_OR",            pure VK_LOGIC_OP_OR)
+                             , ("VK_LOGIC_OP_NOR",           pure VK_LOGIC_OP_NOR)
+                             , ("VK_LOGIC_OP_EQUIVALENT",    pure VK_LOGIC_OP_EQUIVALENT)
+                             , ("VK_LOGIC_OP_INVERT",        pure VK_LOGIC_OP_INVERT)
+                             , ("VK_LOGIC_OP_OR_REVERSE",    pure VK_LOGIC_OP_OR_REVERSE)
+                             , ("VK_LOGIC_OP_COPY_INVERTED", pure VK_LOGIC_OP_COPY_INVERTED)
+                             , ("VK_LOGIC_OP_OR_INVERTED",   pure VK_LOGIC_OP_OR_INVERTED)
+                             , ("VK_LOGIC_OP_NAND",          pure VK_LOGIC_OP_NAND)
+                             , ("VK_LOGIC_OP_SET",           pure VK_LOGIC_OP_SET)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkLogicOp")
+                        v <- step readPrec
+                        pure (VkLogicOp v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_CLEAR"
+pattern VK_LOGIC_OP_CLEAR :: VkLogicOp
+pattern VK_LOGIC_OP_CLEAR = VkLogicOp 0
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND"
+pattern VK_LOGIC_OP_AND :: VkLogicOp
+pattern VK_LOGIC_OP_AND = VkLogicOp 1
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_REVERSE"
+pattern VK_LOGIC_OP_AND_REVERSE :: VkLogicOp
+pattern VK_LOGIC_OP_AND_REVERSE = VkLogicOp 2
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY"
+pattern VK_LOGIC_OP_COPY :: VkLogicOp
+pattern VK_LOGIC_OP_COPY = VkLogicOp 3
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_AND_INVERTED"
+pattern VK_LOGIC_OP_AND_INVERTED :: VkLogicOp
+pattern VK_LOGIC_OP_AND_INVERTED = VkLogicOp 4
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NO_OP"
+pattern VK_LOGIC_OP_NO_OP :: VkLogicOp
+pattern VK_LOGIC_OP_NO_OP = VkLogicOp 5
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_XOR"
+pattern VK_LOGIC_OP_XOR :: VkLogicOp
+pattern VK_LOGIC_OP_XOR = VkLogicOp 6
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR"
+pattern VK_LOGIC_OP_OR :: VkLogicOp
+pattern VK_LOGIC_OP_OR = VkLogicOp 7
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NOR"
+pattern VK_LOGIC_OP_NOR :: VkLogicOp
+pattern VK_LOGIC_OP_NOR = VkLogicOp 8
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_EQUIVALENT"
+pattern VK_LOGIC_OP_EQUIVALENT :: VkLogicOp
+pattern VK_LOGIC_OP_EQUIVALENT = VkLogicOp 9
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_INVERT"
+pattern VK_LOGIC_OP_INVERT :: VkLogicOp
+pattern VK_LOGIC_OP_INVERT = VkLogicOp 10
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_REVERSE"
+pattern VK_LOGIC_OP_OR_REVERSE :: VkLogicOp
+pattern VK_LOGIC_OP_OR_REVERSE = VkLogicOp 11
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_COPY_INVERTED"
+pattern VK_LOGIC_OP_COPY_INVERTED :: VkLogicOp
+pattern VK_LOGIC_OP_COPY_INVERTED = VkLogicOp 12
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_OR_INVERTED"
+pattern VK_LOGIC_OP_OR_INVERTED :: VkLogicOp
+pattern VK_LOGIC_OP_OR_INVERTED = VkLogicOp 13
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_NAND"
+pattern VK_LOGIC_OP_NAND :: VkLogicOp
+pattern VK_LOGIC_OP_NAND = VkLogicOp 14
+
+-- No documentation found for Nested "VkLogicOp" "VK_LOGIC_OP_SET"
+pattern VK_LOGIC_OP_SET :: VkLogicOp
+pattern VK_LOGIC_OP_SET = VkLogicOp 15
+-- ** VkPrimitiveTopology
+
+-- | VkPrimitiveTopology - Supported primitive topologies
+--
+-- = See Also
+--
+-- 'VkPipelineInputAssemblyStateCreateInfo'
+newtype VkPrimitiveTopology = VkPrimitiveTopology Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkPrimitiveTopology where
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_POINT_LIST = showString "VK_PRIMITIVE_TOPOLOGY_POINT_LIST"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_LIST = showString "VK_PRIMITIVE_TOPOLOGY_LINE_LIST"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = showString "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = showString "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
+  showsPrec _ VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = showString "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"
+  showsPrec p (VkPrimitiveTopology x) = showParen (p >= 11) (showString "VkPrimitiveTopology " . showsPrec 11 x)
+
+instance Read VkPrimitiveTopology where
+  readPrec = parens ( choose [ ("VK_PRIMITIVE_TOPOLOGY_POINT_LIST",                    pure VK_PRIMITIVE_TOPOLOGY_POINT_LIST)
+                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_LIST",                     pure VK_PRIMITIVE_TOPOLOGY_LINE_LIST)
+                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_STRIP",                    pure VK_PRIMITIVE_TOPOLOGY_LINE_STRIP)
+                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST",                 pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST)
+                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP",                pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP)
+                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN",                  pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN)
+                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY",      pure VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY)
+                             , ("VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY",     pure VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY)
+                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY",  pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY)
+                             , ("VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY", pure VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY)
+                             , ("VK_PRIMITIVE_TOPOLOGY_PATCH_LIST",                    pure VK_PRIMITIVE_TOPOLOGY_PATCH_LIST)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPrimitiveTopology")
+                        v <- step readPrec
+                        pure (VkPrimitiveTopology v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_POINT_LIST"
+pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST = VkPrimitiveTopology 0
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_LIST"
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST = VkPrimitiveTopology 1
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP"
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = VkPrimitiveTopology 2
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST"
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = VkPrimitiveTopology 3
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP"
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = VkPrimitiveTopology 4
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN"
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = VkPrimitiveTopology 5
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY"
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 6
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY"
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 7
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY"
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 8
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY"
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 9
+
+-- No documentation found for Nested "VkPrimitiveTopology" "VK_PRIMITIVE_TOPOLOGY_PATCH_LIST"
+pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST :: VkPrimitiveTopology
+pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = VkPrimitiveTopology 10
+-- ** VkStencilOp
+
+-- | VkStencilOp - Stencil comparison function
+--
+-- = Description
+--
+-- -   @VK_STENCIL_OP_KEEP@ keeps the current value.
+--
+-- -   @VK_STENCIL_OP_ZERO@ sets the value to 0.
+--
+-- -   @VK_STENCIL_OP_REPLACE@ sets the value to @reference@.
+--
+-- -   @VK_STENCIL_OP_INCREMENT_AND_CLAMP@ increments the current value and
+--     clamps to the maximum representable unsigned value.
+--
+-- -   @VK_STENCIL_OP_DECREMENT_AND_CLAMP@ decrements the current value and
+--     clamps to 0.
+--
+-- -   @VK_STENCIL_OP_INVERT@ bitwise-inverts the current value.
+--
+-- -   @VK_STENCIL_OP_INCREMENT_AND_WRAP@ increments the current value and
+--     wraps to 0 when the maximum value would have been exceeded.
+--
+-- -   @VK_STENCIL_OP_DECREMENT_AND_WRAP@ decrements the current value and
+--     wraps to the maximum possible value when the value would go below 0.
+--
+-- For purposes of increment and decrement, the stencil bits are considered
+-- as an unsigned integer.
+--
+-- If the stencil test fails, the sample’s coverage bit is cleared in the
+-- fragment. If there is no stencil framebuffer attachment, stencil
+-- modification /cannot/ occur, and it is as if the stencil tests always
+-- pass.
+--
+-- If the stencil test passes, the @writeMask@ member of the
+-- 'VkStencilOpState' structures controls how the updated stencil value is
+-- written to the stencil framebuffer attachment.
+--
+-- The least significant s bits of @writeMask@, where s is the number of
+-- bits in the stencil framebuffer attachment, specify an integer mask.
+-- Where a 1 appears in this mask, the corresponding bit in the stencil
+-- value in the depth\/stencil attachment is written; where a 0 appears,
+-- the bit is not written. The @writeMask@ value uses either the
+-- front-facing or back-facing state based on the facingness of the
+-- fragment. Fragments generated by front-facing primitives use the front
+-- mask and fragments generated by back-facing primitives use the back
+-- mask.
+--
+-- = See Also
+--
+-- 'VkStencilOpState'
+newtype VkStencilOp = VkStencilOp Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkStencilOp where
+  showsPrec _ VK_STENCIL_OP_KEEP = showString "VK_STENCIL_OP_KEEP"
+  showsPrec _ VK_STENCIL_OP_ZERO = showString "VK_STENCIL_OP_ZERO"
+  showsPrec _ VK_STENCIL_OP_REPLACE = showString "VK_STENCIL_OP_REPLACE"
+  showsPrec _ VK_STENCIL_OP_INCREMENT_AND_CLAMP = showString "VK_STENCIL_OP_INCREMENT_AND_CLAMP"
+  showsPrec _ VK_STENCIL_OP_DECREMENT_AND_CLAMP = showString "VK_STENCIL_OP_DECREMENT_AND_CLAMP"
+  showsPrec _ VK_STENCIL_OP_INVERT = showString "VK_STENCIL_OP_INVERT"
+  showsPrec _ VK_STENCIL_OP_INCREMENT_AND_WRAP = showString "VK_STENCIL_OP_INCREMENT_AND_WRAP"
+  showsPrec _ VK_STENCIL_OP_DECREMENT_AND_WRAP = showString "VK_STENCIL_OP_DECREMENT_AND_WRAP"
+  showsPrec p (VkStencilOp x) = showParen (p >= 11) (showString "VkStencilOp " . showsPrec 11 x)
+
+instance Read VkStencilOp where
+  readPrec = parens ( choose [ ("VK_STENCIL_OP_KEEP",                pure VK_STENCIL_OP_KEEP)
+                             , ("VK_STENCIL_OP_ZERO",                pure VK_STENCIL_OP_ZERO)
+                             , ("VK_STENCIL_OP_REPLACE",             pure VK_STENCIL_OP_REPLACE)
+                             , ("VK_STENCIL_OP_INCREMENT_AND_CLAMP", pure VK_STENCIL_OP_INCREMENT_AND_CLAMP)
+                             , ("VK_STENCIL_OP_DECREMENT_AND_CLAMP", pure VK_STENCIL_OP_DECREMENT_AND_CLAMP)
+                             , ("VK_STENCIL_OP_INVERT",              pure VK_STENCIL_OP_INVERT)
+                             , ("VK_STENCIL_OP_INCREMENT_AND_WRAP",  pure VK_STENCIL_OP_INCREMENT_AND_WRAP)
+                             , ("VK_STENCIL_OP_DECREMENT_AND_WRAP",  pure VK_STENCIL_OP_DECREMENT_AND_WRAP)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkStencilOp")
+                        v <- step readPrec
+                        pure (VkStencilOp v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_KEEP"
+pattern VK_STENCIL_OP_KEEP :: VkStencilOp
+pattern VK_STENCIL_OP_KEEP = VkStencilOp 0
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_ZERO"
+pattern VK_STENCIL_OP_ZERO :: VkStencilOp
+pattern VK_STENCIL_OP_ZERO = VkStencilOp 1
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_REPLACE"
+pattern VK_STENCIL_OP_REPLACE :: VkStencilOp
+pattern VK_STENCIL_OP_REPLACE = VkStencilOp 2
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INCREMENT_AND_CLAMP"
+pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP :: VkStencilOp
+pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP = VkStencilOp 3
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_DECREMENT_AND_CLAMP"
+pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP :: VkStencilOp
+pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP = VkStencilOp 4
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INVERT"
+pattern VK_STENCIL_OP_INVERT :: VkStencilOp
+pattern VK_STENCIL_OP_INVERT = VkStencilOp 5
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_INCREMENT_AND_WRAP"
+pattern VK_STENCIL_OP_INCREMENT_AND_WRAP :: VkStencilOp
+pattern VK_STENCIL_OP_INCREMENT_AND_WRAP = VkStencilOp 6
+
+-- No documentation found for Nested "VkStencilOp" "VK_STENCIL_OP_DECREMENT_AND_WRAP"
+pattern VK_STENCIL_OP_DECREMENT_AND_WRAP :: VkStencilOp
+pattern VK_STENCIL_OP_DECREMENT_AND_WRAP = VkStencilOp 7
+-- ** VkVertexInputRate
+
+-- | VkVertexInputRate - Specify rate at which vertex attributes are pulled
+-- from buffers
+--
+-- = See Also
+--
+-- 'VkVertexInputBindingDescription'
+newtype VkVertexInputRate = VkVertexInputRate Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkVertexInputRate where
+  showsPrec _ VK_VERTEX_INPUT_RATE_VERTEX = showString "VK_VERTEX_INPUT_RATE_VERTEX"
+  showsPrec _ VK_VERTEX_INPUT_RATE_INSTANCE = showString "VK_VERTEX_INPUT_RATE_INSTANCE"
+  showsPrec p (VkVertexInputRate x) = showParen (p >= 11) (showString "VkVertexInputRate " . showsPrec 11 x)
+
+instance Read VkVertexInputRate where
+  readPrec = parens ( choose [ ("VK_VERTEX_INPUT_RATE_VERTEX",   pure VK_VERTEX_INPUT_RATE_VERTEX)
+                             , ("VK_VERTEX_INPUT_RATE_INSTANCE", pure VK_VERTEX_INPUT_RATE_INSTANCE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkVertexInputRate")
+                        v <- step readPrec
+                        pure (VkVertexInputRate v)
+                        )
+                    )
+
+-- | @VK_VERTEX_INPUT_RATE_VERTEX@ specifies that vertex attribute addressing
+-- is a function of the vertex index.
+pattern VK_VERTEX_INPUT_RATE_VERTEX :: VkVertexInputRate
+pattern VK_VERTEX_INPUT_RATE_VERTEX = VkVertexInputRate 0
+
+-- | @VK_VERTEX_INPUT_RATE_INSTANCE@ specifies that vertex attribute
+-- addressing is a function of the instance index.
+pattern VK_VERTEX_INPUT_RATE_INSTANCE :: VkVertexInputRate
+pattern VK_VERTEX_INPUT_RATE_INSTANCE = VkVertexInputRate 1
+-- ** VkPipelineDepthStencilStateCreateFlags
+
+-- | VkPipelineDepthStencilStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineDepthStencilStateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineDepthStencilStateCreateInfo'
+newtype VkPipelineDepthStencilStateCreateFlags = VkPipelineDepthStencilStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineDepthStencilStateCreateFlags where
+  
+  showsPrec p (VkPipelineDepthStencilStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineDepthStencilStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineDepthStencilStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineDepthStencilStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineDepthStencilStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineDynamicStateCreateFlags
+
+-- | VkPipelineDynamicStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineDynamicStateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineDynamicStateCreateInfo'
+newtype VkPipelineDynamicStateCreateFlags = VkPipelineDynamicStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineDynamicStateCreateFlags where
+  
+  showsPrec p (VkPipelineDynamicStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineDynamicStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineDynamicStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineDynamicStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineDynamicStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineColorBlendStateCreateFlags
+
+-- | VkPipelineColorBlendStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineColorBlendStateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineColorBlendStateCreateInfo'
+newtype VkPipelineColorBlendStateCreateFlags = VkPipelineColorBlendStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineColorBlendStateCreateFlags where
+  
+  showsPrec p (VkPipelineColorBlendStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineColorBlendStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineColorBlendStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineColorBlendStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineColorBlendStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineMultisampleStateCreateFlags
+
+-- | VkPipelineMultisampleStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineMultisampleStateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineMultisampleStateCreateInfo'
+newtype VkPipelineMultisampleStateCreateFlags = VkPipelineMultisampleStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineMultisampleStateCreateFlags where
+  
+  showsPrec p (VkPipelineMultisampleStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineMultisampleStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineMultisampleStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineMultisampleStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineMultisampleStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineRasterizationStateCreateFlags
+
+-- | VkPipelineRasterizationStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineRasterizationStateCreateFlags@ is a bitmask type for setting
+-- a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineRasterizationStateCreateInfo'
+newtype VkPipelineRasterizationStateCreateFlags = VkPipelineRasterizationStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineRasterizationStateCreateFlags where
+  
+  showsPrec p (VkPipelineRasterizationStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineRasterizationStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineRasterizationStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineRasterizationStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineRasterizationStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineViewportStateCreateFlags
+
+-- | VkPipelineViewportStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineViewportStateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineViewportStateCreateInfo'
+newtype VkPipelineViewportStateCreateFlags = VkPipelineViewportStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineViewportStateCreateFlags where
+  
+  showsPrec p (VkPipelineViewportStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineViewportStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineViewportStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineViewportStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineViewportStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineTessellationStateCreateFlags
+
+-- | VkPipelineTessellationStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineTessellationStateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineTessellationStateCreateInfo'
+newtype VkPipelineTessellationStateCreateFlags = VkPipelineTessellationStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineTessellationStateCreateFlags where
+  
+  showsPrec p (VkPipelineTessellationStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineTessellationStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineTessellationStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineTessellationStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineTessellationStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineInputAssemblyStateCreateFlags
+
+-- | VkPipelineInputAssemblyStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineInputAssemblyStateCreateFlags@ is a bitmask type for setting
+-- a mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineInputAssemblyStateCreateInfo'
+newtype VkPipelineInputAssemblyStateCreateFlags = VkPipelineInputAssemblyStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineInputAssemblyStateCreateFlags where
+  
+  showsPrec p (VkPipelineInputAssemblyStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineInputAssemblyStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineInputAssemblyStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineInputAssemblyStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineInputAssemblyStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineVertexInputStateCreateFlags
+
+-- | VkPipelineVertexInputStateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineVertexInputStateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineVertexInputStateCreateInfo'
+newtype VkPipelineVertexInputStateCreateFlags = VkPipelineVertexInputStateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineVertexInputStateCreateFlags where
+  
+  showsPrec p (VkPipelineVertexInputStateCreateFlags x) = showParen (p >= 11) (showString "VkPipelineVertexInputStateCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineVertexInputStateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineVertexInputStateCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineVertexInputStateCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkPipelineShaderStageCreateFlags
+
+-- | VkPipelineShaderStageCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkPipelineShaderStageCreateFlags@ is a bitmask type for setting a mask,
+-- but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkPipelineShaderStageCreateInfo'
+newtype VkPipelineShaderStageCreateFlags = VkPipelineShaderStageCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineShaderStageCreateFlags where
+  
+  showsPrec p (VkPipelineShaderStageCreateFlags x) = showParen (p >= 11) (showString "VkPipelineShaderStageCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineShaderStageCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineShaderStageCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineShaderStageCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkShaderStageFlagBits
+
+-- | VkShaderStageFlagBits - Bitmask specifying a pipeline stage
+--
+-- = See Also
+--
+-- 'VkPipelineShaderStageCreateInfo',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD'
+newtype VkShaderStageFlagBits = VkShaderStageFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkShaderStageFlagBits where
+  showsPrec _ VK_SHADER_STAGE_VERTEX_BIT = showString "VK_SHADER_STAGE_VERTEX_BIT"
+  showsPrec _ VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = showString "VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"
+  showsPrec _ VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = showString "VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"
+  showsPrec _ VK_SHADER_STAGE_GEOMETRY_BIT = showString "VK_SHADER_STAGE_GEOMETRY_BIT"
+  showsPrec _ VK_SHADER_STAGE_FRAGMENT_BIT = showString "VK_SHADER_STAGE_FRAGMENT_BIT"
+  showsPrec _ VK_SHADER_STAGE_COMPUTE_BIT = showString "VK_SHADER_STAGE_COMPUTE_BIT"
+  showsPrec _ VK_SHADER_STAGE_ALL_GRAPHICS = showString "VK_SHADER_STAGE_ALL_GRAPHICS"
+  showsPrec _ VK_SHADER_STAGE_ALL = showString "VK_SHADER_STAGE_ALL"
+  showsPrec p (VkShaderStageFlagBits x) = showParen (p >= 11) (showString "VkShaderStageFlagBits " . showsPrec 11 x)
+
+instance Read VkShaderStageFlagBits where
+  readPrec = parens ( choose [ ("VK_SHADER_STAGE_VERTEX_BIT",                  pure VK_SHADER_STAGE_VERTEX_BIT)
+                             , ("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT",    pure VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
+                             , ("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT", pure VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
+                             , ("VK_SHADER_STAGE_GEOMETRY_BIT",                pure VK_SHADER_STAGE_GEOMETRY_BIT)
+                             , ("VK_SHADER_STAGE_FRAGMENT_BIT",                pure VK_SHADER_STAGE_FRAGMENT_BIT)
+                             , ("VK_SHADER_STAGE_COMPUTE_BIT",                 pure VK_SHADER_STAGE_COMPUTE_BIT)
+                             , ("VK_SHADER_STAGE_ALL_GRAPHICS",                pure VK_SHADER_STAGE_ALL_GRAPHICS)
+                             , ("VK_SHADER_STAGE_ALL",                         pure VK_SHADER_STAGE_ALL)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkShaderStageFlagBits")
+                        v <- step readPrec
+                        pure (VkShaderStageFlagBits v)
+                        )
+                    )
+
+-- | @VK_SHADER_STAGE_VERTEX_BIT@ specifies the vertex stage.
+pattern VK_SHADER_STAGE_VERTEX_BIT :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_VERTEX_BIT = VkShaderStageFlagBits 0x00000001
+
+-- | @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ specifies the tessellation
+-- control stage.
+pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = VkShaderStageFlagBits 0x00000002
+
+-- | @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@ specifies the tessellation
+-- evaluation stage.
+pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = VkShaderStageFlagBits 0x00000004
+
+-- | @VK_SHADER_STAGE_GEOMETRY_BIT@ specifies the geometry stage.
+pattern VK_SHADER_STAGE_GEOMETRY_BIT :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_GEOMETRY_BIT = VkShaderStageFlagBits 0x00000008
+
+-- | @VK_SHADER_STAGE_FRAGMENT_BIT@ specifies the fragment stage.
+pattern VK_SHADER_STAGE_FRAGMENT_BIT :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_FRAGMENT_BIT = VkShaderStageFlagBits 0x00000010
+
+-- | @VK_SHADER_STAGE_COMPUTE_BIT@ specifies the compute stage.
+pattern VK_SHADER_STAGE_COMPUTE_BIT :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_COMPUTE_BIT = VkShaderStageFlagBits 0x00000020
+
+-- | @VK_SHADER_STAGE_ALL_GRAPHICS@ is a combination of bits used as
+-- shorthand to specify all graphics stages defined above (excluding the
+-- compute stage).
+pattern VK_SHADER_STAGE_ALL_GRAPHICS :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_ALL_GRAPHICS = VkShaderStageFlagBits 0x0000001f
+
+-- | @VK_SHADER_STAGE_ALL@ is a combination of bits used as shorthand to
+-- specify all shader stages supported by the device, including all
+-- additional stages which are introduced by extensions.
+pattern VK_SHADER_STAGE_ALL :: VkShaderStageFlagBits
+pattern VK_SHADER_STAGE_ALL = VkShaderStageFlagBits 0x7fffffff
+-- ** VkPipelineCreateFlagBits
+
+-- | VkPipelineCreateFlagBits - Bitmask controlling how a pipeline is created
+--
+-- = Description
+--
+-- -   @VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT@ specifies that the
+--     created pipeline will not be optimized. Using this flag /may/ reduce
+--     the time taken to create the pipeline.
+--
+-- -   @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ specifies that the
+--     pipeline to be created is allowed to be the parent of a pipeline
+--     that will be created in a subsequent call to
+--     'vkCreateGraphicsPipelines' or 'vkCreateComputePipelines'.
+--
+-- -   @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ specifies that the pipeline to
+--     be created will be a child of a previously created parent pipeline.
+--
+-- -   @VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT@ specifies that
+--     any shader input variables decorated as @DeviceIndex@ will be
+--     assigned values as if they were decorated as @ViewIndex@.
+--
+-- -   @VK_PIPELINE_CREATE_DISPATCH_BASE@ specifies that a compute pipeline
+--     /can/ be used with
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.vkCmdDispatchBase'
+--     with a non-zero base workgroup.
+--
+-- It is valid to set both @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ and
+-- @VK_PIPELINE_CREATE_DERIVATIVE_BIT@. This allows a pipeline to be both a
+-- parent and possibly a child in a pipeline hierarchy. See [Pipeline
+-- Derivatives](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-pipeline-derivatives)
+-- for more information.
+--
+-- = See Also
+--
+-- 'VkPipelineCreateFlags'
+newtype VkPipelineCreateFlagBits = VkPipelineCreateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineCreateFlagBits where
+  showsPrec _ VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = showString "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
+  showsPrec _ VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = showString "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
+  showsPrec _ VK_PIPELINE_CREATE_DERIVATIVE_BIT = showString "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkPipelineCreateFlagBits 0x00000008) = showString "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
+  showsPrec _ (VkPipelineCreateFlagBits 0x00000010) = showString "VK_PIPELINE_CREATE_DISPATCH_BASE"
+  showsPrec p (VkPipelineCreateFlagBits x) = showParen (p >= 11) (showString "VkPipelineCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkPipelineCreateFlagBits where
+  readPrec = parens ( choose [ ("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT", pure VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
+                             , ("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT",    pure VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
+                             , ("VK_PIPELINE_CREATE_DERIVATIVE_BIT",           pure VK_PIPELINE_CREATE_DERIVATIVE_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT", pure (VkPipelineCreateFlagBits 0x00000008))
+                             , ("VK_PIPELINE_CREATE_DISPATCH_BASE",                    pure (VkPipelineCreateFlagBits 0x00000010))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkPipelineCreateFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"
+pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT :: VkPipelineCreateFlagBits
+pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = VkPipelineCreateFlagBits 0x00000001
+
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"
+pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT :: VkPipelineCreateFlagBits
+pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = VkPipelineCreateFlagBits 0x00000002
+
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DERIVATIVE_BIT"
+pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT :: VkPipelineCreateFlagBits
+pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT = VkPipelineCreateFlagBits 0x00000004
+-- ** VkColorComponentFlagBits
+
+-- | VkColorComponentFlagBits - Bitmask controlling which components are
+-- written to the framebuffer
+--
+-- = Description
+--
+-- -   @VK_COLOR_COMPONENT_R_BIT@ specifies that the R value is written to
+--     the color attachment for the appropriate sample. Otherwise, the
+--     value in memory is unmodified.
+--
+-- -   @VK_COLOR_COMPONENT_G_BIT@ specifies that the G value is written to
+--     the color attachment for the appropriate sample. Otherwise, the
+--     value in memory is unmodified.
+--
+-- -   @VK_COLOR_COMPONENT_B_BIT@ specifies that the B value is written to
+--     the color attachment for the appropriate sample. Otherwise, the
+--     value in memory is unmodified.
+--
+-- -   @VK_COLOR_COMPONENT_A_BIT@ specifies that the A value is written to
+--     the color attachment for the appropriate sample. Otherwise, the
+--     value in memory is unmodified.
+--
+-- The color write mask operation is applied regardless of whether blending
+-- is enabled.
+--
+-- = See Also
+--
+-- 'VkColorComponentFlags'
+newtype VkColorComponentFlagBits = VkColorComponentFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkColorComponentFlagBits where
+  showsPrec _ VK_COLOR_COMPONENT_R_BIT = showString "VK_COLOR_COMPONENT_R_BIT"
+  showsPrec _ VK_COLOR_COMPONENT_G_BIT = showString "VK_COLOR_COMPONENT_G_BIT"
+  showsPrec _ VK_COLOR_COMPONENT_B_BIT = showString "VK_COLOR_COMPONENT_B_BIT"
+  showsPrec _ VK_COLOR_COMPONENT_A_BIT = showString "VK_COLOR_COMPONENT_A_BIT"
+  showsPrec p (VkColorComponentFlagBits x) = showParen (p >= 11) (showString "VkColorComponentFlagBits " . showsPrec 11 x)
+
+instance Read VkColorComponentFlagBits where
+  readPrec = parens ( choose [ ("VK_COLOR_COMPONENT_R_BIT", pure VK_COLOR_COMPONENT_R_BIT)
+                             , ("VK_COLOR_COMPONENT_G_BIT", pure VK_COLOR_COMPONENT_G_BIT)
+                             , ("VK_COLOR_COMPONENT_B_BIT", pure VK_COLOR_COMPONENT_B_BIT)
+                             , ("VK_COLOR_COMPONENT_A_BIT", pure VK_COLOR_COMPONENT_A_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkColorComponentFlagBits")
+                        v <- step readPrec
+                        pure (VkColorComponentFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_R_BIT"
+pattern VK_COLOR_COMPONENT_R_BIT :: VkColorComponentFlagBits
+pattern VK_COLOR_COMPONENT_R_BIT = VkColorComponentFlagBits 0x00000001
+
+-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_G_BIT"
+pattern VK_COLOR_COMPONENT_G_BIT :: VkColorComponentFlagBits
+pattern VK_COLOR_COMPONENT_G_BIT = VkColorComponentFlagBits 0x00000002
+
+-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_B_BIT"
+pattern VK_COLOR_COMPONENT_B_BIT :: VkColorComponentFlagBits
+pattern VK_COLOR_COMPONENT_B_BIT = VkColorComponentFlagBits 0x00000004
+
+-- No documentation found for Nested "VkColorComponentFlagBits" "VK_COLOR_COMPONENT_A_BIT"
+pattern VK_COLOR_COMPONENT_A_BIT :: VkColorComponentFlagBits
+pattern VK_COLOR_COMPONENT_A_BIT = VkColorComponentFlagBits 0x00000008
+-- ** VkCullModeFlagBits
+
+-- | VkCullModeFlagBits - Bitmask controlling triangle culling
+--
+-- = Description
+--
+-- -   @VK_CULL_MODE_NONE@ specifies that no triangles are discarded
+--
+-- -   @VK_CULL_MODE_FRONT_BIT@ specifies that front-facing triangles are
+--     discarded
+--
+-- -   @VK_CULL_MODE_BACK_BIT@ specifies that back-facing triangles are
+--     discarded
+--
+-- -   @VK_CULL_MODE_FRONT_AND_BACK@ specifies that all triangles are
+--     discarded.
+--
+-- Following culling, fragments are produced for any triangles which have
+-- not been discarded.
+--
+-- = See Also
+--
+-- 'VkCullModeFlags'
+newtype VkCullModeFlagBits = VkCullModeFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkCullModeFlagBits where
+  showsPrec _ VK_CULL_MODE_FRONT_BIT = showString "VK_CULL_MODE_FRONT_BIT"
+  showsPrec _ VK_CULL_MODE_BACK_BIT = showString "VK_CULL_MODE_BACK_BIT"
+  showsPrec _ VK_CULL_MODE_NONE = showString "VK_CULL_MODE_NONE"
+  showsPrec _ VK_CULL_MODE_FRONT_AND_BACK = showString "VK_CULL_MODE_FRONT_AND_BACK"
+  showsPrec p (VkCullModeFlagBits x) = showParen (p >= 11) (showString "VkCullModeFlagBits " . showsPrec 11 x)
+
+instance Read VkCullModeFlagBits where
+  readPrec = parens ( choose [ ("VK_CULL_MODE_FRONT_BIT",      pure VK_CULL_MODE_FRONT_BIT)
+                             , ("VK_CULL_MODE_BACK_BIT",       pure VK_CULL_MODE_BACK_BIT)
+                             , ("VK_CULL_MODE_NONE",           pure VK_CULL_MODE_NONE)
+                             , ("VK_CULL_MODE_FRONT_AND_BACK", pure VK_CULL_MODE_FRONT_AND_BACK)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCullModeFlagBits")
+                        v <- step readPrec
+                        pure (VkCullModeFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_FRONT_BIT"
+pattern VK_CULL_MODE_FRONT_BIT :: VkCullModeFlagBits
+pattern VK_CULL_MODE_FRONT_BIT = VkCullModeFlagBits 0x00000001
+
+-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_BACK_BIT"
+pattern VK_CULL_MODE_BACK_BIT :: VkCullModeFlagBits
+pattern VK_CULL_MODE_BACK_BIT = VkCullModeFlagBits 0x00000002
+
+-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_NONE"
+pattern VK_CULL_MODE_NONE :: VkCullModeFlagBits
+pattern VK_CULL_MODE_NONE = VkCullModeFlagBits 0x00000000
+
+-- No documentation found for Nested "VkCullModeFlagBits" "VK_CULL_MODE_FRONT_AND_BACK"
+pattern VK_CULL_MODE_FRONT_AND_BACK :: VkCullModeFlagBits
+pattern VK_CULL_MODE_FRONT_AND_BACK = VkCullModeFlagBits 0x00000003
+-- | Dummy data to tag the 'Ptr' with
+data VkPipeline_T
+-- | VkPipeline - Opaque handle to a pipeline object
+--
+-- = See Also
+--
+-- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTablePipelineEntryNVX',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindPipeline',
+-- 'vkCreateComputePipelines', 'vkCreateGraphicsPipelines',
+-- 'vkDestroyPipeline',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.vkGetShaderInfoAMD'
+type VkPipeline = Ptr VkPipeline_T
+-- | Dummy data to tag the 'Ptr' with
+data VkPipelineLayout_T
+-- | VkPipelineLayout - Opaque handle to a pipeline layout object
+--
+-- = See Also
+--
+-- 'VkComputePipelineCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateCreateInfo',
+-- 'VkGraphicsPipelineCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableDescriptorSetEntryNVX',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTablePushConstantEntryNVX',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindDescriptorSets',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPushConstants',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetWithTemplateKHR',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.vkCreatePipelineLayout',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.vkDestroyPipelineLayout'
+type VkPipelineLayout = Ptr VkPipelineLayout_T
+-- | Dummy data to tag the 'Ptr' with
+data VkRenderPass_T
+-- | VkRenderPass - Opaque handle to a render pass object
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferInheritanceInfo',
+-- 'Graphics.Vulkan.Core10.Pass.VkFramebufferCreateInfo',
+-- 'VkGraphicsPipelineCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
+-- 'Graphics.Vulkan.Core10.Pass.vkCreateRenderPass',
+-- 'Graphics.Vulkan.Core10.Pass.vkDestroyRenderPass',
+-- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity'
+type VkRenderPass = Ptr VkRenderPass_T
+-- | vkCreateGraphicsPipelines - Create graphics pipelines
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the graphics pipelines.
+--
+-- -   @pipelineCache@ is either
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', indicating that
+--     pipeline caching is disabled; or the handle of a valid [pipeline
+--     cache](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-cache)
+--     object, in which case use of that cache is enabled for the duration
+--     of the command.
+--
+-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
+--     @pPipelines@ arrays.
+--
+-- -   @pCreateInfos@ is an array of @VkGraphicsPipelineCreateInfo@
+--     structures.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- -   @pPipelines@ is a pointer to an array in which the resulting
+--     graphics pipeline objects are returned.
+--
+-- = Description
+--
+-- The 'VkGraphicsPipelineCreateInfo' 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
+--     @VK_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
+--     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, the base pipeline /must/
+--     have been created with the
+--     @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ flag set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @pipelineCache@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipelineCache@
+--     /must/ be a valid @VkPipelineCache@ handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid @VkGraphicsPipelineCreateInfo@ structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pPipelines@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ @VkPipeline@ 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
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_INVALID_SHADER_NV@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkGraphicsPipelineCreateInfo', 'VkPipeline',
+-- 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'
+foreign import ccall "vkCreateGraphicsPipelines" vkCreateGraphicsPipelines :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr VkGraphicsPipelineCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelines" ::: Ptr VkPipeline) -> IO VkResult
+-- | vkCreateComputePipelines - Creates a new compute pipeline object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the compute pipelines.
+--
+-- -   @pipelineCache@ is either
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', indicating that
+--     pipeline caching is disabled; or the handle of a valid [pipeline
+--     cache](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-cache)
+--     object, in which case use of that cache is enabled for the duration
+--     of the command.
+--
+-- -   @createInfoCount@ is the length of the @pCreateInfos@ and
+--     @pPipelines@ arrays.
+--
+-- -   @pCreateInfos@ is an array of @VkComputePipelineCreateInfo@
+--     structures.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- -   @pPipelines@ is a pointer to an array in which the resulting compute
+--     pipeline objects are returned.
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of any element of @pCreateInfos@ contains the
+--     @VK_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
+--     @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag, the base pipeline /must/
+--     have been created with the
+--     @VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT@ flag set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @pipelineCache@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipelineCache@
+--     /must/ be a valid @VkPipelineCache@ handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ valid @VkComputePipelineCreateInfo@ structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pPipelines@ /must/ be a valid pointer to an array of
+--     @createInfoCount@ @VkPipeline@ 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
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_INVALID_SHADER_NV@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkComputePipelineCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkPipeline',
+-- 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'
+foreign import ccall "vkCreateComputePipelines" vkCreateComputePipelines :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("createInfoCount" ::: Word32) -> ("pCreateInfos" ::: Ptr VkComputePipelineCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelines" ::: Ptr VkPipeline) -> IO VkResult
+-- | vkDestroyPipeline - Destroy a pipeline object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that destroys the pipeline.
+--
+-- -   @pipeline@ is the handle of the pipeline to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @pipeline@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @pipeline@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @pipeline@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @pipeline@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipeline@ /must/
+--     be a valid @VkPipeline@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ 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
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkPipeline'
+foreign import ccall "vkDestroyPipeline" vkDestroyPipeline :: ("device" ::: VkDevice) -> ("pipeline" ::: VkPipeline) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | VkOffset2D - Structure specifying a two-dimensional offset
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPlaneCapabilitiesKHR',
+-- 'VkRect2D',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkRectLayerKHR'
+data VkOffset2D = VkOffset2D
+  { -- | @x@ is the x offset.
+  vkX :: Int32
+  , -- | @y@ is the y offset.
+  vkY :: Int32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkOffset2D where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkOffset2D <$> peek (ptr `plusPtr` 0)
+                        <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset2D))
+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset2D))
+-- | VkExtent2D - Structure specifying a two-dimensional extent
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayModeParametersKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPlaneCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplaySurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkMultisamplePropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT',
+-- 'VkRect2D',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkRectLayerKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.Pass.vkGetRenderAreaGranularity'
+data VkExtent2D = VkExtent2D
+  { -- | @width@ is the width of the extent.
+  vkWidth :: Word32
+  , -- | @height@ is the height of the extent.
+  vkHeight :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExtent2D where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkExtent2D <$> peek (ptr `plusPtr` 0)
+                        <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkWidth (poked :: VkExtent2D))
+                *> poke (ptr `plusPtr` 4) (vkHeight (poked :: VkExtent2D))
+-- | 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@.
+--
+-- 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 [implementation-dependent maximum viewport
+-- dimensions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxViewportDimensions)
+-- /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
+-- [implementation-dependent
+-- precision](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-viewportSubPixelBits).
+--
+-- == Valid Usage
+--
+-- -   @width@ /must/ be greater than @0.0@
+--
+-- -   @width@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxViewportDimensions@[0]
+--
+-- -   The absolute value of @height@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@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 @{html_spec_relative}#VK_EXT_depth_range_unrestricted@
+--     extension is enabled @minDepth@ /must/ be between @0.0@ and @1.0@,
+--     inclusive
+--
+-- -   Unless @{html_spec_relative}#VK_EXT_depth_range_unrestricted@
+--     extension is enabled @maxDepth@ /must/ be between @0.0@ and @1.0@,
+--     inclusive
+--
+-- = See Also
+--
+-- 'VkPipelineViewportStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetViewport'
+data VkViewport = VkViewport
+  { -- | @x@ and @y@ are the viewport’s upper left corner (x,y).
+  vkX :: CFloat
+  , -- No documentation found for Nested "VkViewport" "y"
+  vkY :: CFloat
+  , -- | @width@ and @height@ are the viewport’s width and height, respectively.
+  vkWidth :: CFloat
+  , -- No documentation found for Nested "VkViewport" "height"
+  vkHeight :: CFloat
+  , -- | @minDepth@ and @maxDepth@ are the depth range for the viewport. It is
+  -- valid for @minDepth@ to be greater than or equal to @maxDepth@.
+  vkMinDepth :: CFloat
+  , -- No documentation found for Nested "VkViewport" "maxDepth"
+  vkMaxDepth :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkViewport where
+  sizeOf ~_ = 24
+  alignment ~_ = 4
+  peek ptr = VkViewport <$> peek (ptr `plusPtr` 0)
+                        <*> peek (ptr `plusPtr` 4)
+                        <*> peek (ptr `plusPtr` 8)
+                        <*> peek (ptr `plusPtr` 12)
+                        <*> peek (ptr `plusPtr` 16)
+                        <*> peek (ptr `plusPtr` 20)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkViewport))
+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkViewport))
+                *> poke (ptr `plusPtr` 8) (vkWidth (poked :: VkViewport))
+                *> poke (ptr `plusPtr` 12) (vkHeight (poked :: VkViewport))
+                *> poke (ptr `plusPtr` 16) (vkMinDepth (poked :: VkViewport))
+                *> poke (ptr `plusPtr` 20) (vkMaxDepth (poked :: VkViewport))
+-- | VkRect2D - Structure specifying a two-dimensional subregion
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkClearRect',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupRenderPassBeginInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.VkDisplayPresentInfoKHR',
+-- 'VkExtent2D', 'VkOffset2D',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPipelineDiscardRectangleStateCreateInfoEXT',
+-- 'VkPipelineViewportStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.vkCmdSetDiscardRectangleEXT',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetScissor',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetPhysicalDevicePresentRectanglesKHR'
+data VkRect2D = VkRect2D
+  { -- | @offset@ is a 'VkOffset2D' specifying the rectangle offset.
+  vkOffset :: VkOffset2D
+  , -- | @extent@ is a 'VkExtent2D' specifying the rectangle extent.
+  vkExtent :: VkExtent2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRect2D where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek ptr = VkRect2D <$> peek (ptr `plusPtr` 0)
+                      <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect2D))
+                *> poke (ptr `plusPtr` 8) (vkExtent (poked :: VkRect2D))
+-- | 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 @VkBool32@
+--
+-- = See Also
+--
+-- 'VkSpecializationInfo'
+data VkSpecializationMapEntry = VkSpecializationMapEntry
+  { -- | @constantID@ is the ID of the specialization constant in SPIR-V.
+  vkConstantID :: Word32
+  , -- | @offset@ is the byte offset of the specialization constant value within
+  -- the supplied data buffer.
+  vkOffset :: Word32
+  , -- | @size@ is the byte size of the specialization constant value within the
+  -- supplied data buffer.
+  vkSize :: CSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSpecializationMapEntry where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek ptr = VkSpecializationMapEntry <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 4)
+                                      <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkConstantID (poked :: VkSpecializationMapEntry))
+                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkSpecializationMapEntry))
+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSpecializationMapEntry))
+-- | VkSpecializationInfo - Structure specifying specialization info
+--
+-- = Description
+--
+-- @pMapEntries@ points to a structure of type 'VkSpecializationMapEntry'.
+--
+-- == 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@
+--
+-- -   If @mapEntryCount@ is not @0@, @pMapEntries@ /must/ be a valid
+--     pointer to an array of @mapEntryCount@ valid
+--     @VkSpecializationMapEntry@ structures
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @dataSize@ is not @0@, @pData@ /must/ be a valid pointer to an
+--     array of @dataSize@ bytes
+--
+-- = See Also
+--
+-- 'VkPipelineShaderStageCreateInfo', 'VkSpecializationMapEntry'
+data VkSpecializationInfo = VkSpecializationInfo
+  { -- | @mapEntryCount@ is the number of entries in the @pMapEntries@ array.
+  vkMapEntryCount :: Word32
+  , -- | @pMapEntries@ is a pointer to an array of @VkSpecializationMapEntry@
+  -- which maps constant IDs to offsets in @pData@.
+  vkPMapEntries :: Ptr VkSpecializationMapEntry
+  , -- | @dataSize@ is the byte size of the @pData@ buffer.
+  vkDataSize :: CSize
+  , -- | @pData@ contains the actual constant values to specialize with.
+  vkPData :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSpecializationInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkSpecializationInfo <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMapEntryCount (poked :: VkSpecializationInfo))
+                *> poke (ptr `plusPtr` 8) (vkPMapEntries (poked :: VkSpecializationInfo))
+                *> poke (ptr `plusPtr` 16) (vkDataSize (poked :: VkSpecializationInfo))
+                *> poke (ptr `plusPtr` 24) (vkPData (poked :: VkSpecializationInfo))
+-- | VkPipelineShaderStageCreateInfo - Structure specifying parameters of a
+-- newly created pipeline shader stage
+--
+-- == Valid Usage
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @stage@ /must/ not be
+--     @VK_SHADER_STAGE_GEOMETRY_BIT@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @stage@ /must/ not be
+--     @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ or
+--     @VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT@
+--
+-- -   @stage@ /must/ not be @VK_SHADER_STAGE_ALL_GRAPHICS@, or
+--     @VK_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
+--     @VkPhysicalDeviceLimits@::@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
+--     @VkPhysicalDeviceLimits@::@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
+--     @VkPhysicalDeviceLimits@::@maxCombinedClipAndCullDistances@
+--
+-- -   If the identified entry point includes any variable in its interface
+--     that is declared with the @SampleMask@ @BuiltIn@ decoration, that
+--     variable /must/ not have an array size greater than
+--     @VkPhysicalDeviceLimits@::@maxSampleMaskWords@
+--
+-- -   If @stage@ is @VK_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 @VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT@ or
+--     @VK_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
+--     @VkPhysicalDeviceLimits@::@maxTessellationPatchSize@
+--
+-- -   If @stage@ is @VK_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 @VkPhysicalDeviceLimits@::@maxGeometryOutputVertices@
+--
+-- -   If @stage@ is @VK_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
+--     @VkPhysicalDeviceLimits@::@maxGeometryShaderInvocations@
+--
+-- -   If @stage@ is @VK_SHADER_STAGE_GEOMETRY_BIT@, 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 @VK_SHADER_STAGE_GEOMETRY_BIT@, 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 @VK_SHADER_STAGE_FRAGMENT_BIT@, the identified entry
+--     point /must/ not include any output variables in its interface
+--     decorated with @CullDistance@
+--
+-- -   If @stage@ is @VK_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 @VK_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
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @stage@ /must/ be a valid 'VkShaderStageFlagBits' value
+--
+-- -   @module@ /must/ be a valid @VkShaderModule@ handle
+--
+-- -   @pName@ /must/ be a null-terminated UTF-8 string
+--
+-- -   If @pSpecializationInfo@ is not @NULL@, @pSpecializationInfo@ /must/
+--     be a valid pointer to a valid @VkSpecializationInfo@ structure
+--
+-- = See Also
+--
+-- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineShaderStageCreateFlags',
+-- 'Graphics.Vulkan.Core10.Shader.VkShaderModule', 'VkShaderStageFlagBits',
+-- 'VkSpecializationInfo', 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineShaderStageCreateInfo = VkPipelineShaderStageCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineShaderStageCreateFlags
+  , -- | @stage@ is a 'VkShaderStageFlagBits' value specifying a single pipeline
+  -- stage.
+  vkStage :: VkShaderStageFlagBits
+  , -- | @module@ is a @VkShaderModule@ object that contains the shader for this
+  -- stage.
+  vkModule :: VkShaderModule
+  , -- | @pName@ is a pointer to a null-terminated UTF-8 string specifying the
+  -- entry point name of the shader for this stage.
+  vkPName :: Ptr CChar
+  , -- | @pSpecializationInfo@ is a pointer to 'VkSpecializationInfo', as
+  -- described in [Specialization
+  -- Constants](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-specialization-constants),
+  -- and /can/ be @NULL@.
+  vkPSpecializationInfo :: Ptr VkSpecializationInfo
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineShaderStageCreateInfo where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkPipelineShaderStageCreateInfo <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+                                             <*> peek (ptr `plusPtr` 20)
+                                             <*> peek (ptr `plusPtr` 24)
+                                             <*> peek (ptr `plusPtr` 32)
+                                             <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineShaderStageCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineShaderStageCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineShaderStageCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkStage (poked :: VkPipelineShaderStageCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkModule (poked :: VkPipelineShaderStageCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPName (poked :: VkPipelineShaderStageCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPSpecializationInfo (poked :: VkPipelineShaderStageCreateInfo))
+-- | VkComputePipelineCreateInfo - Structure specifying parameters of a newly
+-- created compute pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in [Pipeline
+-- Derivatives](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-pipeline-derivatives).
+--
+-- @stage@ points to a structure of type @VkPipelineShaderStageCreateInfo@.
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be a
+--     valid handle to a compute @VkPipeline@
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineHandle@ is
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @basePipelineIndex@ /must/ be a valid index into the calling
+--     command’s @pCreateInfos@ parameter
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/ be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineHandle@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @basePipelineIndex@ /must/ be -1
+--
+-- -   The @stage@ member of @stage@ /must/ be
+--     @VK_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 [Shader
+--     Interfaces](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#interfaces)
+--     chapter
+--
+-- -   @layout@ /must/ be
+--     [consistent](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency)
+--     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
+--     @VkPhysicalDeviceLimits@::@maxPerStageResources@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of 'VkPipelineCreateFlagBits'
+--     values
+--
+-- -   @stage@ /must/ be a valid @VkPipelineShaderStageCreateInfo@
+--     structure
+--
+-- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   Both of @basePipelineHandle@, and @layout@ that are valid handles
+--     /must/ have been created, allocated, or retrieved from the same
+--     @VkDevice@
+--
+-- = See Also
+--
+-- 'VkPipeline', 'VkPipelineCreateFlags', 'VkPipelineLayout',
+-- 'VkPipelineShaderStageCreateInfo',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateComputePipelines'
+data VkComputePipelineCreateInfo = VkComputePipelineCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is a bitmask of 'VkPipelineCreateFlagBits' specifying how the
+  -- pipeline will be generated.
+  vkFlags :: VkPipelineCreateFlags
+  , -- | @stage@ is a 'VkPipelineShaderStageCreateInfo' describing the compute
+  -- shader.
+  vkStage :: VkPipelineShaderStageCreateInfo
+  , -- | @layout@ is the description of binding locations used by both the
+  -- pipeline and descriptor sets used with the pipeline.
+  vkLayout :: VkPipelineLayout
+  , -- | @basePipelineHandle@ is a pipeline to derive from
+  vkBasePipelineHandle :: VkPipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+  -- as a pipeline to derive from
+  vkBasePipelineIndex :: Int32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkComputePipelineCreateInfo where
+  sizeOf ~_ = 96
+  alignment ~_ = 8
+  peek ptr = VkComputePipelineCreateInfo <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+                                         <*> peek (ptr `plusPtr` 24)
+                                         <*> peek (ptr `plusPtr` 72)
+                                         <*> peek (ptr `plusPtr` 80)
+                                         <*> peek (ptr `plusPtr` 88)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkComputePipelineCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkComputePipelineCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkComputePipelineCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkStage (poked :: VkComputePipelineCreateInfo))
+                *> poke (ptr `plusPtr` 72) (vkLayout (poked :: VkComputePipelineCreateInfo))
+                *> poke (ptr `plusPtr` 80) (vkBasePipelineHandle (poked :: VkComputePipelineCreateInfo))
+                *> poke (ptr `plusPtr` 88) (vkBasePipelineIndex (poked :: VkComputePipelineCreateInfo))
+-- | VkVertexInputBindingDescription - Structure specifying vertex input
+-- binding description
+--
+-- == Valid Usage
+--
+-- -   @binding@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
+--
+-- -   @stride@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxVertexInputBindingStride@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @inputRate@ /must/ be a valid 'VkVertexInputRate' value
+--
+-- = See Also
+--
+-- 'VkPipelineVertexInputStateCreateInfo', 'VkVertexInputRate'
+data VkVertexInputBindingDescription = VkVertexInputBindingDescription
+  { -- | @binding@ is the binding number that this structure describes.
+  vkBinding :: Word32
+  , -- | @stride@ is the distance in bytes between two consecutive elements
+  -- within the buffer.
+  vkStride :: Word32
+  , -- | @inputRate@ is a 'VkVertexInputRate' value specifying whether vertex
+  -- attribute addressing is a function of the vertex index or of the
+  -- instance index.
+  vkInputRate :: VkVertexInputRate
+  }
+  deriving (Eq, Show)
+
+instance Storable VkVertexInputBindingDescription where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkVertexInputBindingDescription <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 4)
+                                             <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkVertexInputBindingDescription))
+                *> poke (ptr `plusPtr` 4) (vkStride (poked :: VkVertexInputBindingDescription))
+                *> poke (ptr `plusPtr` 8) (vkInputRate (poked :: VkVertexInputBindingDescription))
+-- | VkVertexInputAttributeDescription - Structure specifying vertex input
+-- attribute description
+--
+-- == Valid Usage
+--
+-- -   @location@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxVertexInputAttributes@
+--
+-- -   @binding@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
+--
+-- -   @offset@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxVertexInputAttributeOffset@
+--
+-- -   @format@ /must/ be allowed as a vertex buffer format, as specified
+--     by the @VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT@ flag in
+--     @VkFormatProperties@::@bufferFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkFormat',
+-- 'VkPipelineVertexInputStateCreateInfo'
+data VkVertexInputAttributeDescription = VkVertexInputAttributeDescription
+  { -- | @location@ is the shader binding location number for this attribute.
+  vkLocation :: Word32
+  , -- | @binding@ is the binding number which this attribute takes its data
+  -- from.
+  vkBinding :: Word32
+  , -- | @format@ is the size and type of the vertex attribute data.
+  vkFormat :: VkFormat
+  , -- | @offset@ is a byte offset of this attribute relative to the start of an
+  -- element in the vertex input binding.
+  vkOffset :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkVertexInputAttributeDescription where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek ptr = VkVertexInputAttributeDescription <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 4)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 12)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkLocation (poked :: VkVertexInputAttributeDescription))
+                *> poke (ptr `plusPtr` 4) (vkBinding (poked :: VkVertexInputAttributeDescription))
+                *> poke (ptr `plusPtr` 8) (vkFormat (poked :: VkVertexInputAttributeDescription))
+                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkVertexInputAttributeDescription))
+-- | VkPipelineVertexInputStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline vertex input state
+--
+-- == Valid Usage
+--
+-- -   @vertexBindingDescriptionCount@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
+--
+-- -   @vertexAttributeDescriptionCount@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxVertexInputAttributes@
+--
+-- -   For every @binding@ specified by each element of
+--     @pVertexAttributeDescriptions@, a @VkVertexInputBindingDescription@
+--     /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
+--     @VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPipelineVertexInputDivisorStateCreateInfoEXT'
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @vertexBindingDescriptionCount@ is not @0@,
+--     @pVertexBindingDescriptions@ /must/ be a valid pointer to an array
+--     of @vertexBindingDescriptionCount@ valid
+--     @VkVertexInputBindingDescription@ structures
+--
+-- -   If @vertexAttributeDescriptionCount@ is not @0@,
+--     @pVertexAttributeDescriptions@ /must/ be a valid pointer to an array
+--     of @vertexAttributeDescriptionCount@ valid
+--     @VkVertexInputAttributeDescription@ structures
+--
+-- = See Also
+--
+-- 'VkGraphicsPipelineCreateInfo', 'VkPipelineVertexInputStateCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'VkVertexInputAttributeDescription', 'VkVertexInputBindingDescription'
+data VkPipelineVertexInputStateCreateInfo = VkPipelineVertexInputStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineVertexInputStateCreateFlags
+  , -- | @vertexBindingDescriptionCount@ is the number of vertex binding
+  -- descriptions provided in @pVertexBindingDescriptions@.
+  vkVertexBindingDescriptionCount :: Word32
+  , -- | @pVertexBindingDescriptions@ is a pointer to an array of
+  -- @VkVertexInputBindingDescription@ structures.
+  vkPVertexBindingDescriptions :: Ptr VkVertexInputBindingDescription
+  , -- | @vertexAttributeDescriptionCount@ is the number of vertex attribute
+  -- descriptions provided in @pVertexAttributeDescriptions@.
+  vkVertexAttributeDescriptionCount :: Word32
+  , -- | @pVertexAttributeDescriptions@ is a pointer to an array of
+  -- @VkVertexInputAttributeDescription@ structures.
+  vkPVertexAttributeDescriptions :: Ptr VkVertexInputAttributeDescription
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineVertexInputStateCreateInfo where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkPipelineVertexInputStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                  <*> peek (ptr `plusPtr` 8)
+                                                  <*> peek (ptr `plusPtr` 16)
+                                                  <*> peek (ptr `plusPtr` 20)
+                                                  <*> peek (ptr `plusPtr` 24)
+                                                  <*> peek (ptr `plusPtr` 32)
+                                                  <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineVertexInputStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineVertexInputStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineVertexInputStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkVertexBindingDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPVertexBindingDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkVertexAttributeDescriptionCount (poked :: VkPipelineVertexInputStateCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPVertexAttributeDescriptions (poked :: VkPipelineVertexInputStateCreateInfo))
+-- | 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 @VK_PRIMITIVE_TOPOLOGY_POINT_LIST@,
+--     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST@,
+--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST@,
+--     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY@,
+--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY@ or
+--     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@, @primitiveRestartEnable@ /must/
+--     be @VK_FALSE@
+--
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
+--     feature is not enabled, @topology@ /must/ not be any of
+--     @VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY@,
+--     @VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY@,
+--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY@ or
+--     @VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY@
+--
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
+--     feature is not enabled, @topology@ /must/ not be
+--     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @topology@ /must/ be a valid 'VkPrimitiveTopology' value
+--
+-- = See Also
+--
+-- @VkBool32@, 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineInputAssemblyStateCreateFlags', 'VkPrimitiveTopology',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineInputAssemblyStateCreateInfo = VkPipelineInputAssemblyStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineInputAssemblyStateCreateFlags
+  , -- | @topology@ is a 'VkPrimitiveTopology' defining the primitive topology,
+  -- as described below.
+  vkTopology :: VkPrimitiveTopology
+  , -- | @primitiveRestartEnable@ controls whether a special vertex index value
+  -- is treated as restarting the assembly of primitives. This enable only
+  -- applies to indexed draws
+  -- ('Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexed' and
+  -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexedIndirect'),
+  -- and the special index value is either 0xFFFFFFFF when the @indexType@
+  -- parameter of @vkCmdBindIndexBuffer@ is equal to @VK_INDEX_TYPE_UINT32@,
+  -- or 0xFFFF when @indexType@ is equal to @VK_INDEX_TYPE_UINT16@. Primitive
+  -- restart is not allowed for “list” topologies.
+  vkPrimitiveRestartEnable :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineInputAssemblyStateCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineInputAssemblyStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                    <*> peek (ptr `plusPtr` 8)
+                                                    <*> peek (ptr `plusPtr` 16)
+                                                    <*> peek (ptr `plusPtr` 20)
+                                                    <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineInputAssemblyStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineInputAssemblyStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineInputAssemblyStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkTopology (poked :: VkPipelineInputAssemblyStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPrimitiveRestartEnable (poked :: VkPipelineInputAssemblyStateCreateInfo))
+-- | 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 @VkPhysicalDeviceLimits@::@maxTessellationPatchSize@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPipelineTessellationDomainOriginStateCreateInfo'
+--
+-- -   @flags@ /must/ be @0@
+--
+-- = See Also
+--
+-- 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineTessellationStateCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineTessellationStateCreateInfo = VkPipelineTessellationStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineTessellationStateCreateFlags
+  , -- | @patchControlPoints@ number of control points per patch.
+  vkPatchControlPoints :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineTessellationStateCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPipelineTessellationStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                   <*> peek (ptr `plusPtr` 8)
+                                                   <*> peek (ptr `plusPtr` 16)
+                                                   <*> peek (ptr `plusPtr` 20)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineTessellationStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineTessellationStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineTessellationStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkPatchControlPoints (poked :: VkPipelineTessellationStateCreateInfo))
+-- | VkPipelineViewportStateCreateInfo - Structure specifying parameters of a
+-- newly created pipeline viewport state
+--
+-- == Valid Usage
+--
+-- -   If the [multiple
+--     viewports](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiViewport)
+--     feature is not enabled, @viewportCount@ /must/ be @1@
+--
+-- -   If the [multiple
+--     viewports](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiViewport)
+--     feature is not enabled, @scissorCount@ /must/ be @1@
+--
+-- -   @viewportCount@ /must/ be between @1@ and
+--     @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
+--
+-- -   @scissorCount@ /must/ be between @1@ and
+--     @VkPhysicalDeviceLimits@::@maxViewports@, inclusive
+--
+-- -   @scissorCount@ and @viewportCount@ /must/ be identical
+--
+-- -   If the @viewportWScalingEnable@ member of a
+--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'
+--     structure chained to the @pNext@ chain is @VK_TRUE@, the
+--     @viewportCount@ member of the
+--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'
+--     structure /must/ be equal to @viewportCount@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_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
+--     'Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle.VkPipelineViewportSwizzleStateCreateInfoNV'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @viewportCount@ /must/ be greater than @0@
+--
+-- -   @scissorCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'VkGraphicsPipelineCreateInfo', 'VkPipelineViewportStateCreateFlags',
+-- 'VkRect2D', 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkViewport'
+data VkPipelineViewportStateCreateInfo = VkPipelineViewportStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineViewportStateCreateFlags
+  , -- | @viewportCount@ is the number of viewports used by the pipeline.
+  vkViewportCount :: Word32
+  , -- | @pViewports@ is a pointer to an array of 'VkViewport' structures,
+  -- defining the viewport transforms. If the viewport state is dynamic, this
+  -- member is ignored.
+  vkPViewports :: Ptr VkViewport
+  , -- | @scissorCount@ is the number of
+  -- [scissors](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-scissor)
+  -- and /must/ match the number of viewports.
+  vkScissorCount :: Word32
+  , -- | @pScissors@ is a pointer to an array of @VkRect2D@ structures which
+  -- define the rectangular bounds of the scissor for the corresponding
+  -- viewport. If the scissor state is dynamic, this member is ignored.
+  vkPScissors :: Ptr VkRect2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineViewportStateCreateInfo where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkPipelineViewportStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+                                               <*> peek (ptr `plusPtr` 20)
+                                               <*> peek (ptr `plusPtr` 24)
+                                               <*> peek (ptr `plusPtr` 32)
+                                               <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineViewportStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineViewportStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineViewportStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkViewportCount (poked :: VkPipelineViewportStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPViewports (poked :: VkPipelineViewportStateCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkScissorCount (poked :: VkPipelineViewportStateCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPScissors (poked :: VkPipelineViewportStateCreateInfo))
+-- | VkPipelineRasterizationStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline rasterization state
+--
+-- = Description
+--
+-- The application /can/ also add a
+-- @VkPipelineRasterizationStateRasterizationOrderAMD@ structure to the
+-- @pNext@ chain of a @VkPipelineRasterizationStateCreateInfo@ structure.
+-- This structure enables selecting the rasterization order to use when
+-- rendering with the corresponding graphics pipeline as described in
+-- [Rasterization
+-- Order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primrast-order).
+--
+-- == Valid Usage
+--
+-- -   If the [depth
+--     clamping](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-depthClamp)
+--     feature is not enabled, @depthClampEnable@ /must/ be @VK_FALSE@
+--
+-- -   If the [non-solid fill
+--     modes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-fillModeNonSolid)
+--     feature is not enabled, @polygonMode@ /must/ be
+--     @VK_POLYGON_MODE_FILL@ or @VK_POLYGON_MODE_FILL_RECTANGLE_NV@
+--
+-- -   If the @{html_spec_relative}#VK_NV_fill_rectangle@ extension is not
+--     enabled, @polygonMode@ /must/ not be
+--     @VK_POLYGON_MODE_FILL_RECTANGLE_NV@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_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
+--     'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.VkPipelineRasterizationConservativeStateCreateInfoEXT'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_AMD_rasterization_order.VkPipelineRasterizationStateRasterizationOrderAMD'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @polygonMode@ /must/ be a valid 'VkPolygonMode' value
+--
+-- -   @cullMode@ /must/ be a valid combination of 'VkCullModeFlagBits'
+--     values
+--
+-- -   @frontFace@ /must/ be a valid 'VkFrontFace' value
+--
+-- = See Also
+--
+-- @VkBool32@, 'VkCullModeFlags', 'VkFrontFace',
+-- 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineRasterizationStateCreateFlags', 'VkPolygonMode',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineRasterizationStateCreateInfo = VkPipelineRasterizationStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineRasterizationStateCreateFlags
+  , -- | @depthClampEnable@ controls whether to clamp the fragment’s depth values
+  -- instead of clipping primitives to the z planes of the frustum, as
+  -- described in [Primitive
+  -- Clipping](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-clipping).
+  vkDepthClampEnable :: VkBool32
+  , -- | @rasterizerDiscardEnable@ controls whether primitives are discarded
+  -- immediately before the rasterization stage.
+  vkRasterizerDiscardEnable :: VkBool32
+  , -- | @polygonMode@ is the triangle rendering mode. See 'VkPolygonMode'.
+  vkPolygonMode :: VkPolygonMode
+  , -- | @cullMode@ is the triangle facing direction used for primitive culling.
+  -- See 'VkCullModeFlagBits'.
+  vkCullMode :: VkCullModeFlags
+  , -- | @frontFace@ is a 'VkFrontFace' value specifying the front-facing
+  -- triangle orientation to be used for culling.
+  vkFrontFace :: VkFrontFace
+  , -- | @depthBiasEnable@ controls whether to bias fragment depth values.
+  vkDepthBiasEnable :: VkBool32
+  , -- | @depthBiasConstantFactor@ is a scalar factor controlling the constant
+  -- depth value added to each fragment.
+  vkDepthBiasConstantFactor :: CFloat
+  , -- | @depthBiasClamp@ is the maximum (or minimum) depth bias of a fragment.
+  vkDepthBiasClamp :: CFloat
+  , -- | @depthBiasSlopeFactor@ is a scalar factor applied to a fragment’s slope
+  -- in depth bias calculations.
+  vkDepthBiasSlopeFactor :: CFloat
+  , -- | @lineWidth@ is the width of rasterized line segments.
+  vkLineWidth :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineRasterizationStateCreateInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkPipelineRasterizationStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                    <*> peek (ptr `plusPtr` 8)
+                                                    <*> peek (ptr `plusPtr` 16)
+                                                    <*> peek (ptr `plusPtr` 20)
+                                                    <*> peek (ptr `plusPtr` 24)
+                                                    <*> peek (ptr `plusPtr` 28)
+                                                    <*> peek (ptr `plusPtr` 32)
+                                                    <*> peek (ptr `plusPtr` 36)
+                                                    <*> peek (ptr `plusPtr` 40)
+                                                    <*> peek (ptr `plusPtr` 44)
+                                                    <*> peek (ptr `plusPtr` 48)
+                                                    <*> peek (ptr `plusPtr` 52)
+                                                    <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkDepthClampEnable (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkRasterizerDiscardEnable (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkPolygonMode (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkCullMode (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 36) (vkFrontFace (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkDepthBiasEnable (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 44) (vkDepthBiasConstantFactor (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkDepthBiasClamp (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 52) (vkDepthBiasSlopeFactor (poked :: VkPipelineRasterizationStateCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkLineWidth (poked :: VkPipelineRasterizationStateCreateInfo))
+-- | VkPipelineMultisampleStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline multisample state
+--
+-- == Valid Usage
+--
+-- -   If the [sample rate
+--     shading](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sampleRateShading)
+--     feature is not enabled, @sampleShadingEnable@ /must/ be @VK_FALSE@
+--
+-- -   If the [alpha to
+--     one](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-alphaToOne)
+--     feature is not enabled, @alphaToOneEnable@ /must/ be @VK_FALSE@
+--
+-- -   @minSampleShading@ /must/ be in the range [0,1]
+--
+-- -   If the subpass has any color attachments and @rasterizationSamples@
+--     is greater than the number of color samples, then
+--     @sampleShadingEnable@ /must/ be @VK_FALSE@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_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
+--     'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.VkPipelineCoverageModulationStateCreateInfoNV',
+--     'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.VkPipelineCoverageToColorStateCreateInfoNV',
+--     or
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @rasterizationSamples@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+--     value
+--
+-- -   If @pSampleMask@ is not @NULL@, @pSampleMask@ /must/ be a valid
+--     pointer to an array of
+--     \(\lceil{\mathit{rasterizationSamples} \over 32}\rceil\)
+--     @VkSampleMask@ values
+--
+-- = See Also
+--
+-- @VkBool32@, 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineMultisampleStateCreateFlags',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits',
+-- @VkSampleMask@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineMultisampleStateCreateInfo = VkPipelineMultisampleStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineMultisampleStateCreateFlags
+  , -- | @rasterizationSamples@ is a
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+  -- specifying the number of samples per pixel used in rasterization.
+  vkRasterizationSamples :: VkSampleCountFlagBits
+  , -- | @sampleShadingEnable@ /can/ be used to enable [Sample
+  -- Shading](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-sampleshading).
+  vkSampleShadingEnable :: VkBool32
+  , -- | @minSampleShading@ specifies a minimum fraction of sample shading if
+  -- @sampleShadingEnable@ is set to @VK_TRUE@.
+  vkMinSampleShading :: CFloat
+  , -- | @pSampleMask@ is a bitmask of static coverage information that is ANDed
+  -- with the coverage information generated during rasterization, as
+  -- described in [Sample
+  -- Mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-samplemask).
+  vkPSampleMask :: Ptr VkSampleMask
+  , -- | @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 [Multisample
+  -- Coverage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-covg)
+  -- section.
+  vkAlphaToCoverageEnable :: VkBool32
+  , -- | @alphaToOneEnable@ controls whether the alpha component of the
+  -- fragment’s first color output is replaced with one as described in
+  -- [Multisample
+  -- Coverage](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-covg).
+  vkAlphaToOneEnable :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineMultisampleStateCreateInfo where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkPipelineMultisampleStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                  <*> peek (ptr `plusPtr` 8)
+                                                  <*> peek (ptr `plusPtr` 16)
+                                                  <*> peek (ptr `plusPtr` 20)
+                                                  <*> peek (ptr `plusPtr` 24)
+                                                  <*> peek (ptr `plusPtr` 28)
+                                                  <*> peek (ptr `plusPtr` 32)
+                                                  <*> peek (ptr `plusPtr` 40)
+                                                  <*> peek (ptr `plusPtr` 44)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkRasterizationSamples (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkSampleShadingEnable (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkMinSampleShading (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPSampleMask (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkAlphaToCoverageEnable (poked :: VkPipelineMultisampleStateCreateInfo))
+                *> poke (ptr `plusPtr` 44) (vkAlphaToOneEnable (poked :: VkPipelineMultisampleStateCreateInfo))
+-- | VkPipelineColorBlendAttachmentState - Structure specifying a pipeline
+-- color blend attachment state
+--
+-- == Valid Usage
+--
+-- -   If the [dual source
+--     blending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-dualSrcBlend)
+--     feature is not enabled, @srcColorBlendFactor@ /must/ not be
+--     @VK_BLEND_FACTOR_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
+--
+-- -   If the [dual source
+--     blending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-dualSrcBlend)
+--     feature is not enabled, @dstColorBlendFactor@ /must/ not be
+--     @VK_BLEND_FACTOR_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
+--
+-- -   If the [dual source
+--     blending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-dualSrcBlend)
+--     feature is not enabled, @srcAlphaBlendFactor@ /must/ not be
+--     @VK_BLEND_FACTOR_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
+--
+-- -   If the [dual source
+--     blending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-dualSrcBlend)
+--     feature is not enabled, @dstAlphaBlendFactor@ /must/ not be
+--     @VK_BLEND_FACTOR_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR@,
+--     @VK_BLEND_FACTOR_SRC1_ALPHA@, or
+--     @VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA@
+--
+-- -   If either of @colorBlendOp@ or @alphaBlendOp@ is an [advanced blend
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced),
+--     then @colorBlendOp@ /must/ equal @alphaBlendOp@
+--
+-- -   If
+--     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
+--     is @VK_FALSE@ and @colorBlendOp@ is an [advanced blend
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced),
+--     then @colorBlendOp@ /must/ be the same for all attachments.
+--
+-- -   If
+--     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendIndependentBlend@
+--     is @VK_FALSE@ and @alphaBlendOp@ is an [advanced blend
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced),
+--     then @alphaBlendOp@ /must/ be the same for all attachments.
+--
+-- -   If
+--     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT'::@advancedBlendAllOperations@
+--     is @VK_FALSE@, then @colorBlendOp@ /must/ not be
+--     @VK_BLEND_OP_ZERO_EXT@, @VK_BLEND_OP_SRC_EXT@,
+--     @VK_BLEND_OP_DST_EXT@, @VK_BLEND_OP_SRC_OVER_EXT@,
+--     @VK_BLEND_OP_DST_OVER_EXT@, @VK_BLEND_OP_SRC_IN_EXT@,
+--     @VK_BLEND_OP_DST_IN_EXT@, @VK_BLEND_OP_SRC_OUT_EXT@,
+--     @VK_BLEND_OP_DST_OUT_EXT@, @VK_BLEND_OP_SRC_ATOP_EXT@,
+--     @VK_BLEND_OP_DST_ATOP_EXT@, @VK_BLEND_OP_XOR_EXT@,
+--     @VK_BLEND_OP_INVERT_EXT@, @VK_BLEND_OP_INVERT_RGB_EXT@,
+--     @VK_BLEND_OP_LINEARDODGE_EXT@, @VK_BLEND_OP_LINEARBURN_EXT@,
+--     @VK_BLEND_OP_VIVIDLIGHT_EXT@, @VK_BLEND_OP_LINEARLIGHT_EXT@,
+--     @VK_BLEND_OP_PINLIGHT_EXT@, @VK_BLEND_OP_HARDMIX_EXT@,
+--     @VK_BLEND_OP_PLUS_EXT@, @VK_BLEND_OP_PLUS_CLAMPED_EXT@,
+--     @VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT@, @VK_BLEND_OP_PLUS_DARKER_EXT@,
+--     @VK_BLEND_OP_MINUS_EXT@, @VK_BLEND_OP_MINUS_CLAMPED_EXT@,
+--     @VK_BLEND_OP_CONTRAST_EXT@, @VK_BLEND_OP_INVERT_OVG_EXT@,
+--     @VK_BLEND_OP_RED_EXT@, @VK_BLEND_OP_GREEN_EXT@, or
+--     @VK_BLEND_OP_BLUE_EXT@
+--
+-- -   If @colorBlendOp@ or @alphaBlendOp@ is an [advanced blend
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced),
+--     then
+--     'Graphics.Vulkan.Core10.Pass.VkSubpassDescription'::@colorAttachmentCount@
+--     of the subpass this pipeline is compiled against /must/ be less than
+--     or equal to
+--     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT'::advancedBlendMaxColorAttachments
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @srcColorBlendFactor@ /must/ be a valid 'VkBlendFactor' value
+--
+-- -   @dstColorBlendFactor@ /must/ be a valid 'VkBlendFactor' value
+--
+-- -   @colorBlendOp@ /must/ be a valid 'VkBlendOp' value
+--
+-- -   @srcAlphaBlendFactor@ /must/ be a valid 'VkBlendFactor' value
+--
+-- -   @dstAlphaBlendFactor@ /must/ be a valid 'VkBlendFactor' value
+--
+-- -   @alphaBlendOp@ /must/ be a valid 'VkBlendOp' value
+--
+-- -   @colorWriteMask@ /must/ be a valid combination of
+--     'VkColorComponentFlagBits' values
+--
+-- = See Also
+--
+-- 'VkBlendFactor', 'VkBlendOp', @VkBool32@, 'VkColorComponentFlags',
+-- 'VkPipelineColorBlendStateCreateInfo'
+data VkPipelineColorBlendAttachmentState = VkPipelineColorBlendAttachmentState
+  { -- | @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.
+  vkBlendEnable :: VkBool32
+  , -- | @srcColorBlendFactor@ selects which blend factor is used to determine
+  -- the source factors (Sr,Sg,Sb).
+  vkSrcColorBlendFactor :: VkBlendFactor
+  , -- | @dstColorBlendFactor@ selects which blend factor is used to determine
+  -- the destination factors (Dr,Dg,Db).
+  vkDstColorBlendFactor :: VkBlendFactor
+  , -- | @colorBlendOp@ selects which blend operation is used to calculate the
+  -- RGB values to write to the color attachment.
+  vkColorBlendOp :: VkBlendOp
+  , -- | @srcAlphaBlendFactor@ selects which blend factor is used to determine
+  -- the source factor Sa.
+  vkSrcAlphaBlendFactor :: VkBlendFactor
+  , -- | @dstAlphaBlendFactor@ selects which blend factor is used to determine
+  -- the destination factor Da.
+  vkDstAlphaBlendFactor :: VkBlendFactor
+  , -- | @alphaBlendOp@ selects which blend operation is use to calculate the
+  -- alpha values to write to the color attachment.
+  vkAlphaBlendOp :: VkBlendOp
+  , -- | @colorWriteMask@ is a bitmask of 'VkColorComponentFlagBits' specifying
+  -- which of the R, G, B, and\/or A components are enabled for writing, as
+  -- described for the [Color Write
+  -- Mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-color-write-mask).
+  vkColorWriteMask :: VkColorComponentFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineColorBlendAttachmentState where
+  sizeOf ~_ = 32
+  alignment ~_ = 4
+  peek ptr = VkPipelineColorBlendAttachmentState <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 4)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 12)
+                                                 <*> peek (ptr `plusPtr` 16)
+                                                 <*> peek (ptr `plusPtr` 20)
+                                                 <*> peek (ptr `plusPtr` 24)
+                                                 <*> peek (ptr `plusPtr` 28)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBlendEnable (poked :: VkPipelineColorBlendAttachmentState))
+                *> poke (ptr `plusPtr` 4) (vkSrcColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
+                *> poke (ptr `plusPtr` 8) (vkDstColorBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
+                *> poke (ptr `plusPtr` 12) (vkColorBlendOp (poked :: VkPipelineColorBlendAttachmentState))
+                *> poke (ptr `plusPtr` 16) (vkSrcAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
+                *> poke (ptr `plusPtr` 20) (vkDstAlphaBlendFactor (poked :: VkPipelineColorBlendAttachmentState))
+                *> poke (ptr `plusPtr` 24) (vkAlphaBlendOp (poked :: VkPipelineColorBlendAttachmentState))
+                *> poke (ptr `plusPtr` 28) (vkColorWriteMask (poked :: VkPipelineColorBlendAttachmentState))
+-- | VkPipelineColorBlendStateCreateInfo - Structure specifying parameters of
+-- a newly created pipeline color blend state
+--
+-- = Description
+--
+-- Each element of the @pAttachments@ array is a
+-- 'VkPipelineColorBlendAttachmentState' structure specifying per-target
+-- blending state for each individual color attachment. If the [independent
+-- blending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-independentBlend)
+-- feature is not enabled on the device, all
+-- 'VkPipelineColorBlendAttachmentState' elements in the @pAttachments@
+-- array /must/ be identical.
+--
+-- == Valid Usage
+--
+-- -   If the [independent
+--     blending](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-independentBlend)
+--     feature is not enabled, all elements of @pAttachments@ /must/ be
+--     identical
+--
+-- -   If the [logic
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-logicOp)
+--     feature is not enabled, @logicOpEnable@ /must/ be @VK_FALSE@
+--
+-- -   If @logicOpEnable@ is @VK_TRUE@, @logicOp@ /must/ be a valid
+--     'VkLogicOp' value
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPipelineColorBlendAdvancedStateCreateInfoEXT'
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     @VkPipelineColorBlendAttachmentState@ structures
+--
+-- = See Also
+--
+-- @VkBool32@, 'VkGraphicsPipelineCreateInfo', 'VkLogicOp',
+-- 'VkPipelineColorBlendAttachmentState',
+-- 'VkPipelineColorBlendStateCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineColorBlendStateCreateInfo = VkPipelineColorBlendStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineColorBlendStateCreateFlags
+  , -- | @logicOpEnable@ controls whether to apply [Logical
+  -- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-logicop).
+  vkLogicOpEnable :: VkBool32
+  , -- | @logicOp@ selects which logical operation to apply.
+  vkLogicOp :: VkLogicOp
+  , -- | @attachmentCount@ is the number of @VkPipelineColorBlendAttachmentState@
+  -- elements in @pAttachments@. This value /must/ equal the
+  -- @colorAttachmentCount@ for the subpass in which this pipeline is used.
+  vkAttachmentCount :: Word32
+  , -- | @pAttachments@: is a pointer to array of per target attachment states.
+  vkPAttachments :: Ptr VkPipelineColorBlendAttachmentState
+  , -- | @blendConstants@ is 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 [blend
+  -- factor](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blendfactors).
+  vkBlendConstants :: Vector 4 CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineColorBlendStateCreateInfo where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkPipelineColorBlendStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+                                                 <*> peek (ptr `plusPtr` 20)
+                                                 <*> peek (ptr `plusPtr` 24)
+                                                 <*> peek (ptr `plusPtr` 28)
+                                                 <*> peek (ptr `plusPtr` 32)
+                                                 <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineColorBlendStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineColorBlendStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineColorBlendStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkLogicOpEnable (poked :: VkPipelineColorBlendStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkLogicOp (poked :: VkPipelineColorBlendStateCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkAttachmentCount (poked :: VkPipelineColorBlendStateCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPAttachments (poked :: VkPipelineColorBlendStateCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkBlendConstants (poked :: VkPipelineColorBlendStateCreateInfo))
+-- | 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
+--     @VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @pDynamicStates@ /must/ be a valid pointer to an array of
+--     @dynamicStateCount@ valid 'VkDynamicState' values
+--
+-- -   @dynamicStateCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'VkDynamicState', 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineDynamicStateCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineDynamicStateCreateInfo = VkPipelineDynamicStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineDynamicStateCreateFlags
+  , -- | @dynamicStateCount@ is the number of elements in the @pDynamicStates@
+  -- array.
+  vkDynamicStateCount :: Word32
+  , -- | @pDynamicStates@ is an array of 'VkDynamicState' values specifying which
+  -- pieces of pipeline state will use the values from dynamic state commands
+  -- rather than from pipeline state creation info.
+  vkPDynamicStates :: Ptr VkDynamicState
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineDynamicStateCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineDynamicStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+                                              <*> peek (ptr `plusPtr` 20)
+                                              <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDynamicStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDynamicStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDynamicStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkDynamicStateCount (poked :: VkPipelineDynamicStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPDynamicStates (poked :: VkPipelineDynamicStateCreateInfo))
+-- | VkStencilOpState - Structure specifying stencil operation state
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @failOp@ /must/ be a valid 'VkStencilOp' value
+--
+-- -   @passOp@ /must/ be a valid 'VkStencilOp' value
+--
+-- -   @depthFailOp@ /must/ be a valid 'VkStencilOp' value
+--
+-- -   @compareOp@ /must/ be a valid 'VkCompareOp' value
+--
+-- = See Also
+--
+-- 'VkCompareOp', 'VkPipelineDepthStencilStateCreateInfo', 'VkStencilOp'
+data VkStencilOpState = VkStencilOpState
+  { -- | @failOp@ is a 'VkStencilOp' value specifying the action performed on
+  -- samples that fail the stencil test.
+  vkFailOp :: VkStencilOp
+  , -- | @passOp@ is a 'VkStencilOp' value specifying the action performed on
+  -- samples that pass both the depth and stencil tests.
+  vkPassOp :: VkStencilOp
+  , -- | @depthFailOp@ is a 'VkStencilOp' value specifying the action performed
+  -- on samples that pass the stencil test and fail the depth test.
+  vkDepthFailOp :: VkStencilOp
+  , -- | @compareOp@ is a 'VkCompareOp' value specifying the comparison operator
+  -- used in the stencil test.
+  vkCompareOp :: VkCompareOp
+  , -- | @compareMask@ selects the bits of the unsigned integer stencil values
+  -- participating in the stencil test.
+  vkCompareMask :: Word32
+  , -- | @writeMask@ selects the bits of the unsigned integer stencil values
+  -- updated by the stencil test in the stencil framebuffer attachment.
+  vkWriteMask :: Word32
+  , -- | @reference@ is an integer reference value that is used in the unsigned
+  -- stencil comparison.
+  vkReference :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkStencilOpState where
+  sizeOf ~_ = 28
+  alignment ~_ = 4
+  peek ptr = VkStencilOpState <$> peek (ptr `plusPtr` 0)
+                              <*> peek (ptr `plusPtr` 4)
+                              <*> peek (ptr `plusPtr` 8)
+                              <*> peek (ptr `plusPtr` 12)
+                              <*> peek (ptr `plusPtr` 16)
+                              <*> peek (ptr `plusPtr` 20)
+                              <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFailOp (poked :: VkStencilOpState))
+                *> poke (ptr `plusPtr` 4) (vkPassOp (poked :: VkStencilOpState))
+                *> poke (ptr `plusPtr` 8) (vkDepthFailOp (poked :: VkStencilOpState))
+                *> poke (ptr `plusPtr` 12) (vkCompareOp (poked :: VkStencilOpState))
+                *> poke (ptr `plusPtr` 16) (vkCompareMask (poked :: VkStencilOpState))
+                *> poke (ptr `plusPtr` 20) (vkWriteMask (poked :: VkStencilOpState))
+                *> poke (ptr `plusPtr` 24) (vkReference (poked :: VkStencilOpState))
+-- | VkPipelineDepthStencilStateCreateInfo - Structure specifying parameters
+-- of a newly created pipeline depth stencil state
+--
+-- == Valid Usage
+--
+-- -   If the [depth bounds
+--     testing](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-depthBounds)
+--     feature is not enabled, @depthBoundsTestEnable@ /must/ be @VK_FALSE@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @depthCompareOp@ /must/ be a valid 'VkCompareOp' value
+--
+-- -   @front@ /must/ be a valid @VkStencilOpState@ structure
+--
+-- -   @back@ /must/ be a valid @VkStencilOpState@ structure
+--
+-- = See Also
+--
+-- @VkBool32@, 'VkCompareOp', 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineDepthStencilStateCreateFlags', 'VkStencilOpState',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineDepthStencilStateCreateInfo = VkPipelineDepthStencilStateCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is reserved for future use.
+  vkFlags :: VkPipelineDepthStencilStateCreateFlags
+  , -- | @depthTestEnable@ controls whether [depth
+  -- testing](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-depth)
+  -- is enabled.
+  vkDepthTestEnable :: VkBool32
+  , -- | @depthWriteEnable@ controls whether [depth
+  -- writes](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-depth-write)
+  -- are enabled when @depthTestEnable@ is @VK_TRUE@. Depth writes are always
+  -- disabled when @depthTestEnable@ is @VK_FALSE@.
+  vkDepthWriteEnable :: VkBool32
+  , -- | @depthCompareOp@ is the comparison operator used in the [depth
+  -- test](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-depth).
+  vkDepthCompareOp :: VkCompareOp
+  , -- | @depthBoundsTestEnable@ controls whether [depth bounds
+  -- testing](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-dbt)
+  -- is enabled.
+  vkDepthBoundsTestEnable :: VkBool32
+  , -- | @stencilTestEnable@ controls whether [stencil
+  -- testing](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-stencil)
+  -- is enabled.
+  vkStencilTestEnable :: VkBool32
+  , -- | @front@ and @back@ control the parameters of the [stencil
+  -- test](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-stencil).
+  vkFront :: VkStencilOpState
+  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "back"
+  vkBack :: VkStencilOpState
+  , -- | @minDepthBounds@ and @maxDepthBounds@ define the range of values used in
+  -- the [depth bounds
+  -- test](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-dbt).
+  vkMinDepthBounds :: CFloat
+  , -- No documentation found for Nested "VkPipelineDepthStencilStateCreateInfo" "maxDepthBounds"
+  vkMaxDepthBounds :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineDepthStencilStateCreateInfo where
+  sizeOf ~_ = 104
+  alignment ~_ = 8
+  peek ptr = VkPipelineDepthStencilStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                   <*> peek (ptr `plusPtr` 8)
+                                                   <*> peek (ptr `plusPtr` 16)
+                                                   <*> peek (ptr `plusPtr` 20)
+                                                   <*> peek (ptr `plusPtr` 24)
+                                                   <*> peek (ptr `plusPtr` 28)
+                                                   <*> peek (ptr `plusPtr` 32)
+                                                   <*> peek (ptr `plusPtr` 36)
+                                                   <*> peek (ptr `plusPtr` 40)
+                                                   <*> peek (ptr `plusPtr` 68)
+                                                   <*> peek (ptr `plusPtr` 96)
+                                                   <*> peek (ptr `plusPtr` 100)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkDepthTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkDepthWriteEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkDepthCompareOp (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkDepthBoundsTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 36) (vkStencilTestEnable (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkFront (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 68) (vkBack (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 96) (vkMinDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))
+                *> poke (ptr `plusPtr` 100) (vkMaxDepthBounds (poked :: VkPipelineDepthStencilStateCreateInfo))
+-- | VkGraphicsPipelineCreateInfo - Structure specifying parameters of a
+-- newly created graphics pipeline
+--
+-- = Description
+--
+-- The parameters @basePipelineHandle@ and @basePipelineIndex@ are
+-- described in more detail in [Pipeline
+-- Derivatives](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-pipeline-derivatives).
+--
+-- @pStages@ points to an array of 'VkPipelineShaderStageCreateInfo'
+-- structures, which were previously described in [Compute
+-- Pipelines](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-compute).
+--
+-- @pDynamicState@ points to a structure of type
+-- 'VkPipelineDynamicStateCreateInfo'.
+--
+-- If any shader stage fails to compile, the compile log will be reported
+-- back to the application, and @VK_ERROR_INVALID_SHADER_NV@ will be
+-- generated.
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineIndex@ is -1, @basePipelineHandle@ /must/ be a
+--     valid handle to a graphics @VkPipeline@
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineHandle@ is
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @basePipelineIndex@ /must/ be a valid index into the calling
+--     command’s @pCreateInfos@ parameter
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineIndex@ is not -1, @basePipelineHandle@ /must/ be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   If @flags@ contains the @VK_PIPELINE_CREATE_DERIVATIVE_BIT@ flag,
+--     and @basePipelineHandle@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @basePipelineIndex@ /must/ be -1
+--
+-- -   The @stage@ member of each element of @pStages@ /must/ be unique
+--
+-- -   The @stage@ member of one element of @pStages@ /must/ be
+--     @VK_SHADER_STAGE_VERTEX_BIT@
+--
+-- -   The @stage@ member of each element of @pStages@ /must/ not be
+--     @VK_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 @VkPipelineTessellationStateCreateInfo@
+--     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
+--     @VK_PRIMITIVE_TOPOLOGY_PATCH_LIST@
+--
+-- -   If the @topology@ member of @pInputAssembly@ is
+--     @VK_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
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-geometry-execution)
+--     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
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-geometry-execution)
+--     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
+--     @VK_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 [Shader
+--     Interfaces](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#interfaces)
+--     chapter
+--
+-- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
+--     attachment in @renderPass@ that has a layout of
+--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ or
+--     @VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL@ in the
+--     @VkAttachmentReference@ defined by @subpass@, the @depthWriteEnable@
+--     member of @pDepthStencilState@ /must/ be @VK_FALSE@
+--
+-- -   If rasterization is not disabled and @subpass@ uses a depth\/stencil
+--     attachment in @renderPass@ that has a layout of
+--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ or
+--     @VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL@ in the
+--     @VkAttachmentReference@ defined by @subpass@, the @failOp@, @passOp@
+--     and @depthFailOp@ members of each of the @front@ and @back@ members
+--     of @pDepthStencilState@ /must/ be @VK_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 @VK_FALSE@ if
+--     the @format@ of the attachment does not support color blend
+--     operations, as specified by the
+--     @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ or
+--     @VkFormatProperties@::@optimalTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   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
+--     @VK_DYNAMIC_STATE_VIEWPORT@, the @pViewports@ member of
+--     @pViewportState@ /must/ be a valid pointer to an array of
+--     @pViewportState@::@viewportCount@ @VkViewport@ structures
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     @VK_DYNAMIC_STATE_SCISSOR@, the @pScissors@ member of
+--     @pViewportState@ /must/ be a valid pointer to an array of
+--     @pViewportState@::@scissorCount@ @VkRect2D@ structures
+--
+-- -   If the wide lines feature is not enabled, and no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     @VK_DYNAMIC_STATE_LINE_WIDTH@, the @lineWidth@ member of
+--     @pRasterizationState@ /must/ be @1.0@
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     @VK_FALSE@, @pViewportState@ /must/ be a valid pointer to a valid
+--     @VkPipelineViewportStateCreateInfo@ structure
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     @VK_FALSE@, @pMultisampleState@ /must/ be a valid pointer to a valid
+--     @VkPipelineMultisampleStateCreateInfo@ structure
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     @VK_FALSE@, and @subpass@ uses a depth\/stencil attachment,
+--     @pDepthStencilState@ /must/ be a valid pointer to a valid
+--     @VkPipelineDepthStencilStateCreateInfo@ structure
+--
+-- -   If the @rasterizerDiscardEnable@ member of @pRasterizationState@ is
+--     @VK_FALSE@, and @subpass@ uses color attachments, @pColorBlendState@
+--     /must/ be a valid pointer to a valid
+--     @VkPipelineColorBlendStateCreateInfo@ structure
+--
+-- -   If the depth bias clamping feature is not enabled, no element of the
+--     @pDynamicStates@ member of @pDynamicState@ is
+--     @VK_DYNAMIC_STATE_DEPTH_BIAS@, and the @depthBiasEnable@ member of
+--     @pRasterizationState@ is @VK_TRUE@, the @depthBiasClamp@ member of
+--     @pRasterizationState@ /must/ be @0.0@
+--
+-- -   If the @{html_spec_relative}#VK_EXT_depth_range_unrestricted@
+--     extension is not enabled and no element of the @pDynamicStates@
+--     member of @pDynamicState@ is @VK_DYNAMIC_STATE_DEPTH_BOUNDS@, and
+--     the @depthBoundsTestEnable@ member of @pDepthStencilState@ is
+--     @VK_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
+--     @VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT@, and the
+--     @sampleLocationsEnable@ member of a
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
+--     structure chained to the @pNext@ chain of @pMultisampleState@ is
+--     @VK_TRUE@, @sampleLocationsInfo.sampleLocationGridSize.width@ /must/
+--     evenly divide
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkMultisamplePropertiesEXT'::@sampleLocationGridSize.width@
+--     as returned by
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT'
+--     with a @samples@ parameter equaling @rasterizationSamples@
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     @VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT@, and the
+--     @sampleLocationsEnable@ member of a
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
+--     structure chained to the @pNext@ chain of @pMultisampleState@ is
+--     @VK_TRUE@, @sampleLocationsInfo.sampleLocationGridSize.height@
+--     /must/ evenly divide
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkMultisamplePropertiesEXT'::@sampleLocationGridSize.height@
+--     as returned by
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkGetPhysicalDeviceMultisamplePropertiesEXT'
+--     with a @samples@ parameter equaling @rasterizationSamples@
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     @VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT@, and the
+--     @sampleLocationsEnable@ member of a
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
+--     structure chained to the @pNext@ chain of @pMultisampleState@ is
+--     @VK_TRUE@, @sampleLocationsInfo.sampleLocationsPerPixel@ /must/
+--     equal @rasterizationSamples@
+--
+-- -   If the @sampleLocationsEnable@ member of a
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'
+--     structure chained to the @pNext@ chain of @pMultisampleState@ is
+--     @VK_TRUE@, the fragment shader code /must/ not statically use the
+--     extended instruction @InterpolateAtSample@
+--
+-- -   @layout@ /must/ be
+--     [consistent](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-pipelinelayout-consistency)
+--     with all shaders specified in @pStages@
+--
+-- -   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 @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 @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 @subpass@ does not use any color and\/or depth\/stencil
+--     attachments, then the @rasterizationSamples@ member of
+--     @pMultisampleState@ /must/ follow the rules for a [zero-attachment
+--     subpass](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-noattachments)
+--
+-- -   @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 @VK_PIPELINE_CREATE_DISPATCH_BASE@
+--     flag.
+--
+-- -   If @pStages@ includes a fragment shader stage and an input
+--     attachment was referenced by the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkRenderPassInputAttachmentAspectCreateInfo'
+--     at @renderPass@ create time, its shader code /must/ not read from
+--     any aspect that was not specified in the @aspectMask@ of the
+--     corresponding
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkInputAttachmentAspectReference'
+--     structure.
+--
+-- -   The number of resources in @layout@ accessible to each shader stage
+--     that is used by the pipeline /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxPerStageResources@
+--
+-- -   If no element of the @pDynamicStates@ member of @pDynamicState@ is
+--     @VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV@, and the
+--     @viewportWScalingEnable@ member of a
+--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'
+--     structure, chained to the @pNext@ chain of @pViewportState@, is
+--     @VK_TRUE@, the @pViewportWScalings@ member of the
+--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'
+--     /must/ be a pointer to an array of
+--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV'::@viewportCount@
+--     valid
+--     'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkViewportWScalingNV'
+--     structures
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPipelineDiscardRectangleStateCreateInfoEXT'
+--
+-- -   @flags@ /must/ be a valid combination of 'VkPipelineCreateFlagBits'
+--     values
+--
+-- -   @pStages@ /must/ be a valid pointer to an array of @stageCount@
+--     valid @VkPipelineShaderStageCreateInfo@ structures
+--
+-- -   @pVertexInputState@ /must/ be a valid pointer to a valid
+--     @VkPipelineVertexInputStateCreateInfo@ structure
+--
+-- -   @pInputAssemblyState@ /must/ be a valid pointer to a valid
+--     @VkPipelineInputAssemblyStateCreateInfo@ structure
+--
+-- -   @pRasterizationState@ /must/ be a valid pointer to a valid
+--     @VkPipelineRasterizationStateCreateInfo@ structure
+--
+-- -   If @pDynamicState@ is not @NULL@, @pDynamicState@ /must/ be a valid
+--     pointer to a valid @VkPipelineDynamicStateCreateInfo@ structure
+--
+-- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   @renderPass@ /must/ be a valid @VkRenderPass@ handle
+--
+-- -   @stageCount@ /must/ be greater than @0@
+--
+-- -   Each of @basePipelineHandle@, @layout@, and @renderPass@ that are
+--     valid handles /must/ have been created, allocated, or retrieved from
+--     the same @VkDevice@
+--
+-- = See Also
+--
+-- 'VkPipeline', 'VkPipelineColorBlendStateCreateInfo',
+-- 'VkPipelineCreateFlags', 'VkPipelineDepthStencilStateCreateInfo',
+-- 'VkPipelineDynamicStateCreateInfo',
+-- 'VkPipelineInputAssemblyStateCreateInfo', 'VkPipelineLayout',
+-- 'VkPipelineMultisampleStateCreateInfo',
+-- 'VkPipelineRasterizationStateCreateInfo',
+-- 'VkPipelineShaderStageCreateInfo',
+-- 'VkPipelineTessellationStateCreateInfo',
+-- 'VkPipelineVertexInputStateCreateInfo',
+-- 'VkPipelineViewportStateCreateInfo', 'VkRenderPass',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateGraphicsPipelines'
+data VkGraphicsPipelineCreateInfo = VkGraphicsPipelineCreateInfo
+  { -- | @sType@ is the type of this structure.
+  vkSType :: VkStructureType
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+  vkPNext :: Ptr ()
+  , -- | @flags@ is a bitmask of 'VkPipelineCreateFlagBits' specifying how the
+  -- pipeline will be generated.
+  vkFlags :: VkPipelineCreateFlags
+  , -- | @stageCount@ is the number of entries in the @pStages@ array.
+  vkStageCount :: Word32
+  , -- | @pStages@ is an array of size @stageCount@ structures of type
+  -- 'VkPipelineShaderStageCreateInfo' describing the set of the shader
+  -- stages to be included in the graphics pipeline.
+  vkPStages :: Ptr VkPipelineShaderStageCreateInfo
+  , -- | @pVertexInputState@ is a pointer to an instance of the
+  -- 'VkPipelineVertexInputStateCreateInfo' structure.
+  vkPVertexInputState :: Ptr VkPipelineVertexInputStateCreateInfo
+  , -- | @pInputAssemblyState@ is a pointer to an instance of the
+  -- 'VkPipelineInputAssemblyStateCreateInfo' structure which determines
+  -- input assembly behavior, as described in [Drawing
+  -- Commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#drawing).
+  vkPInputAssemblyState :: Ptr VkPipelineInputAssemblyStateCreateInfo
+  , -- | @pTessellationState@ is a pointer to an instance of the
+  -- 'VkPipelineTessellationStateCreateInfo' structure, and is ignored if the
+  -- pipeline does not include a tessellation control shader stage and
+  -- tessellation evaluation shader stage.
+  vkPTessellationState :: Ptr VkPipelineTessellationStateCreateInfo
+  , -- | @pViewportState@ is a pointer to an instance of the
+  -- 'VkPipelineViewportStateCreateInfo' structure, and is ignored if the
+  -- pipeline has rasterization disabled.
+  vkPViewportState :: Ptr VkPipelineViewportStateCreateInfo
+  , -- | @pRasterizationState@ is a pointer to an instance of the
+  -- 'VkPipelineRasterizationStateCreateInfo' structure.
+  vkPRasterizationState :: Ptr VkPipelineRasterizationStateCreateInfo
+  , -- | @pMultisampleState@ is a pointer to an instance of the
+  -- 'VkPipelineMultisampleStateCreateInfo', and is ignored if the pipeline
+  -- has rasterization disabled.
+  vkPMultisampleState :: Ptr VkPipelineMultisampleStateCreateInfo
+  , -- | @pDepthStencilState@ is a pointer to an instance of the
+  -- 'VkPipelineDepthStencilStateCreateInfo' 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.
+  vkPDepthStencilState :: Ptr VkPipelineDepthStencilStateCreateInfo
+  , -- | @pColorBlendState@ is a pointer to an instance of the
+  -- 'VkPipelineColorBlendStateCreateInfo' 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.
+  vkPColorBlendState :: Ptr VkPipelineColorBlendStateCreateInfo
+  , -- | @pDynamicState@ is a pointer to 'VkPipelineDynamicStateCreateInfo' 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.
+  vkPDynamicState :: Ptr VkPipelineDynamicStateCreateInfo
+  , -- | @layout@ is the description of binding locations used by both the
+  -- pipeline and descriptor sets used with the pipeline.
+  vkLayout :: VkPipelineLayout
+  , -- | @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 [Render Pass
+  -- Compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+  -- for more information.
+  vkRenderPass :: VkRenderPass
+  , -- | @subpass@ is the index of the subpass in the render pass where this
+  -- pipeline will be used.
+  vkSubpass :: Word32
+  , -- | @basePipelineHandle@ is a pipeline to derive from.
+  vkBasePipelineHandle :: VkPipeline
+  , -- | @basePipelineIndex@ is an index into the @pCreateInfos@ parameter to use
+  -- as a pipeline to derive from.
+  vkBasePipelineIndex :: Int32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkGraphicsPipelineCreateInfo where
+  sizeOf ~_ = 144
+  alignment ~_ = 8
+  peek ptr = VkGraphicsPipelineCreateInfo <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 16)
+                                          <*> peek (ptr `plusPtr` 20)
+                                          <*> peek (ptr `plusPtr` 24)
+                                          <*> peek (ptr `plusPtr` 32)
+                                          <*> peek (ptr `plusPtr` 40)
+                                          <*> peek (ptr `plusPtr` 48)
+                                          <*> peek (ptr `plusPtr` 56)
+                                          <*> peek (ptr `plusPtr` 64)
+                                          <*> peek (ptr `plusPtr` 72)
+                                          <*> peek (ptr `plusPtr` 80)
+                                          <*> peek (ptr `plusPtr` 88)
+                                          <*> peek (ptr `plusPtr` 96)
+                                          <*> peek (ptr `plusPtr` 104)
+                                          <*> peek (ptr `plusPtr` 112)
+                                          <*> peek (ptr `plusPtr` 120)
+                                          <*> peek (ptr `plusPtr` 128)
+                                          <*> peek (ptr `plusPtr` 136)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkStageCount (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPStages (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPVertexInputState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPInputAssemblyState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkPTessellationState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkPViewportState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 64) (vkPRasterizationState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 72) (vkPMultisampleState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 80) (vkPDepthStencilState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 88) (vkPColorBlendState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 96) (vkPDynamicState (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 104) (vkLayout (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 112) (vkRenderPass (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 120) (vkSubpass (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 128) (vkBasePipelineHandle (poked :: VkGraphicsPipelineCreateInfo))
+                *> poke (ptr `plusPtr` 136) (vkBasePipelineIndex (poked :: VkGraphicsPipelineCreateInfo))
+-- | VkPipelineCreateFlags - Bitmask of VkPipelineCreateFlagBits
+--
+-- = Description
+--
+-- @VkPipelineCreateFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkPipelineCreateFlagBits'.
+--
+-- = See Also
+--
+-- 'VkComputePipelineCreateInfo', 'VkGraphicsPipelineCreateInfo',
+-- 'VkPipelineCreateFlagBits'
+type VkPipelineCreateFlags = VkPipelineCreateFlagBits
+-- | VkColorComponentFlags - Bitmask of VkColorComponentFlagBits
+--
+-- = Description
+--
+-- @VkColorComponentFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkColorComponentFlagBits'.
+--
+-- = See Also
+--
+-- 'VkColorComponentFlagBits', 'VkPipelineColorBlendAttachmentState'
+type VkColorComponentFlags = VkColorComponentFlagBits
+-- | VkCullModeFlags - Bitmask of VkCullModeFlagBits
+--
+-- = Description
+--
+-- @VkCullModeFlags@ is a bitmask type for setting a mask of zero or more
+-- 'VkCullModeFlagBits'.
+--
+-- = See Also
+--
+-- 'VkCullModeFlagBits', 'VkPipelineRasterizationStateCreateInfo'
+type VkCullModeFlags = VkCullModeFlagBits
+-- | VkSampleMask - Mask of sample coverage information
+--
+-- = See Also
 --
 -- 'VkPipelineMultisampleStateCreateInfo'
 type VkSampleMask = Word32
diff --git a/src/Graphics/Vulkan/Core10/PipelineCache.hs b/src/Graphics/Vulkan/Core10/PipelineCache.hs
--- a/src/Graphics/Vulkan/Core10/PipelineCache.hs
+++ b/src/Graphics/Vulkan/Core10/PipelineCache.hs
@@ -71,13 +71,11 @@
 -- | VkPipelineCacheCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineCacheCreateFlags@ is a bitmask type for setting a mask, but
 -- is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineCacheCreateInfo'
 newtype VkPipelineCacheCreateFlags = VkPipelineCacheCreateFlags VkFlags
@@ -102,11 +100,7 @@
 data VkPipelineCache_T
 -- | VkPipelineCache - Opaque handle to a pipeline cache object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Pipeline.vkCreateComputePipelines',
 -- 'Graphics.Vulkan.Core10.Pipeline.vkCreateGraphicsPipelines',
@@ -116,7 +110,6 @@
 -- | vkCreatePipelineCache - Creates a new pipeline cache
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the pipeline cache
 --     object.
@@ -126,13 +119,14 @@
 --     cache object.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pPipelineCache@ is a pointer to a @VkPipelineCache@ handle in which
 --     the resulting pipeline cache object is returned.
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -174,16 +168,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -192,7 +185,6 @@
 -- | vkDestroyPipelineCache - Destroy a pipeline cache object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the pipeline cache
 --     object.
@@ -200,10 +192,9 @@
 -- -   @pipelineCache@ is the handle of the pipeline cache to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -232,7 +223,6 @@
 -- -   Host access to @pipelineCache@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -241,7 +231,6 @@
 -- | vkGetPipelineCacheData - Get the data store from a pipeline cache
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the pipeline cache.
 --
@@ -253,7 +242,6 @@
 -- -   @pData@ is either @NULL@ or a pointer to a buffer.
 --
 -- = Description
--- #_description#
 --
 -- If @pData@ is @NULL@, then the maximum size of the data that /can/ be
 -- retrieved from the pipeline cache, in bytes, is returned in @pDataSize@.
@@ -282,39 +270,32 @@
 -- written to @pData@ /must/ be a header consisting of the following
 -- members:
 --
--- > +----+--------------+--------------------------------------------------+
--- > | Of | Size         | Meaning                                          |
--- > | fs |              |                                                  |
--- > | et |              |                                                  |
--- > +====+==============+==================================================+
--- > | 0  | 4            | length in bytes of the entire pipeline cache     |
--- > |    |              | header written as a stream of bytes, with the    |
--- > |    |              | least significant byte first                     |
--- > +----+--------------+--------------------------------------------------+
--- > | 4  | 4            | a                                                |
--- > |    |              | 'Graphics.Vulkan.Core10.Constants.VkPipelineCach |
--- > |    |              | eHeaderVersion'                                  |
--- > |    |              | value written as a stream of bytes, with the     |
--- > |    |              | least significant byte first                     |
--- > +----+--------------+--------------------------------------------------+
--- > | 8  | 4            | a vendor ID equal to                             |
--- > |    |              | @VkPhysicalDeviceProperties@::@vendorID@ written |
--- > |    |              | as a stream of bytes, with the least significant |
--- > |    |              | byte first                                       |
--- > +----+--------------+--------------------------------------------------+
--- > | 12 | 4            | a device ID equal to                             |
--- > |    |              | @VkPhysicalDeviceProperties@::@deviceID@ written |
--- > |    |              | as a stream of bytes, with the least significant |
--- > |    |              | byte first                                       |
--- > +----+--------------+--------------------------------------------------+
--- > | 16 | @VK_UUID_SIZ | a pipeline cache ID equal to                     |
--- > |    | E@           | @VkPhysicalDeviceProperties@::@pipelineCacheUUID |
--- > |    |              | @                                                |
--- > +----+--------------+--------------------------------------------------+
--- >
--- > Layout for pipeline cache header version
--- > @VK_PIPELINE_CACHE_HEADER_VERSION_ONE@
+-- +--------+----------------+-----------------------------------------------------------------+
+-- | Offset | Size           | Meaning                                                         |
+-- +========+================+=================================================================+
+-- | 0      | 4              | length in bytes of the entire pipeline cache header written as  |
+-- |        |                | a stream of bytes, with the least significant byte first        |
+-- +--------+----------------+-----------------------------------------------------------------+
+-- | 4      | 4              | a                                                               |
+-- |        |                | 'Graphics.Vulkan.Core10.Constants.VkPipelineCacheHeaderVersion' |
+-- |        |                | value written as a stream of bytes, with the least significant  |
+-- |        |                | byte first                                                      |
+-- +--------+----------------+-----------------------------------------------------------------+
+-- | 8      | 4              | a vendor ID equal to @VkPhysicalDeviceProperties@::@vendorID@   |
+-- |        |                | written as a stream of bytes, with the least significant byte   |
+-- |        |                | first                                                           |
+-- +--------+----------------+-----------------------------------------------------------------+
+-- | 12     | 4              | a device ID equal to @VkPhysicalDeviceProperties@::@deviceID@   |
+-- |        |                | written as a stream of bytes, with the least significant byte   |
+-- |        |                | first                                                           |
+-- +--------+----------------+-----------------------------------------------------------------+
+-- | 16     | @VK_UUID_SIZE@ | a pipeline cache ID equal to                                    |
+-- |        |                | @VkPhysicalDeviceProperties@::@pipelineCacheUUID@               |
+-- +--------+----------------+-----------------------------------------------------------------+
 --
+-- Layout for pipeline cache header version
+-- @VK_PIPELINE_CACHE_HEADER_VERSION_ONE@
+--
 -- The first four bytes encode the length of the entire pipeline cache
 -- header, in bytes. This value includes all fields in the header including
 -- the pipeline cache version field and the size of the length field.
@@ -345,18 +326,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkPipelineCache'
@@ -364,7 +344,6 @@
 -- | vkMergePipelineCaches - Combine the data stores of pipeline caches
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the pipeline cache objects.
 --
@@ -378,7 +357,6 @@
 --     included after the merge.
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -413,16 +391,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkPipelineCache'
@@ -430,9 +407,6 @@
 -- | VkPipelineCacheCreateInfo - Structure specifying parameters of a newly
 -- created pipeline cache
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of
@@ -454,20 +428,23 @@
 --     pointer to an array of @initialDataSize@ bytes
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineCacheCreateFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreatePipelineCache'
 data VkPipelineCacheCreateInfo = VkPipelineCacheCreateInfo
-  { -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkPipelineCacheCreateFlags
-  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkInitialDataSize"
+  , -- | @initialDataSize@ is the number of bytes in @pInitialData@. If
+  -- @initialDataSize@ is zero, the pipeline cache will initially be empty.
   vkInitialDataSize :: CSize
-  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkPInitialData"
+  , -- | @pInitialData@ is a pointer to previously retrieved pipeline cache data.
+  -- If the pipeline cache data is incompatible (as defined below) with the
+  -- device, the pipeline cache will be initially empty. If @initialDataSize@
+  -- is zero, @pInitialData@ is ignored.
   vkPInitialData :: Ptr ()
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/PipelineLayout.hs b/src/Graphics/Vulkan/Core10/PipelineLayout.hs
--- a/src/Graphics/Vulkan/Core10/PipelineLayout.hs
+++ b/src/Graphics/Vulkan/Core10/PipelineLayout.hs
@@ -72,13 +72,11 @@
 -- | VkPipelineLayoutCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineLayoutCreateFlags@ is a bitmask type for setting a mask, but
 -- is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineLayoutCreateInfo'
 newtype VkPipelineLayoutCreateFlags = VkPipelineLayoutCreateFlags VkFlags
@@ -103,11 +101,7 @@
 data VkDescriptorSetLayout_T
 -- | VkDescriptorSetLayout - Opaque handle to a descriptor set layout object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetAllocateInfo',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateCreateInfo',
@@ -118,7 +112,6 @@
 -- | vkCreatePipelineLayout - Creates a new pipeline layout object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the pipeline layout.
 --
@@ -127,14 +120,13 @@
 --     pipeline layout object.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pPipelineLayout@ points to a @VkPipelineLayout@ handle in which the
 --     resulting pipeline layout object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -150,16 +142,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -169,17 +160,15 @@
 -- | vkDestroyPipelineLayout - Destroy a pipeline layout object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the pipeline layout.
 --
 -- -   @pipelineLayout@ is the pipeline layout to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -208,7 +197,6 @@
 -- -   Host access to @pipelineLayout@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -216,9 +204,6 @@
 foreign import ccall "vkDestroyPipelineLayout" vkDestroyPipelineLayout :: ("device" ::: VkDevice) -> ("pipelineLayout" ::: VkPipelineLayout) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
 -- | VkPushConstantRange - Structure specifying a push constant range
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @offset@ /must/ be less than
@@ -241,15 +226,21 @@
 -- -   @stageFlags@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineLayoutCreateInfo', 'VkShaderStageFlags'
 data VkPushConstantRange = VkPushConstantRange
-  { -- No documentation found for Nested "VkPushConstantRange" "vkStageFlags"
+  { -- | @stageFlags@ is a set of stage flags describing the shader stages that
+  -- will access a range of push constants. If a particular stage is not
+  -- included in the range, then accessing members of that range of push
+  -- constants from the corresponding shader stage will result in undefined
+  -- data being read.
   vkStageFlags :: VkShaderStageFlags
-  , -- No documentation found for Nested "VkPushConstantRange" "vkOffset"
+  , -- | @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.
   vkOffset :: Word32
-  , -- No documentation found for Nested "VkPushConstantRange" "vkSize"
+  , -- No documentation found for Nested "VkPushConstantRange" "size"
   vkSize :: Word32
   }
   deriving (Eq, Show)
@@ -267,7 +258,6 @@
 -- newly created pipeline layout object
 --
 -- = Members
--- #_members#
 --
 -- -   @sType@ is the type of this structure.
 --
@@ -296,85 +286,209 @@
 --     in pipelines that is expected to outperform memory-backed resource
 --     updates.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @setLayoutCount@ /must/ be less than or equal to
 --     @VkPhysicalDeviceLimits@::@maxBoundDescriptorSets@
 --
--- -   The total number of descriptors of the type
---     @VK_DESCRIPTOR_TYPE_SAMPLER@ and
---     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ accessible to any shader
---     stage across all elements of @pSetLayouts@ /must/ be less than or
---     equal to @VkPhysicalDeviceLimits@::@maxPerStageDescriptorSamplers@
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_SAMPLER@ and
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ accessible to any given
+--     shader stage across all elements of @pSetLayouts@ /must/ be less
+--     than or equal to
+--     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorSamplers@
 --
--- -   The total number of descriptors of the type
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ and
---     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ accessible to any shader
---     stage across all elements of @pSetLayouts@ /must/ be less than or
---     equal to
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@
+--     and @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ accessible to any
+--     given shader stage across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
 --     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorUniformBuffers@
 --
--- -   The total number of descriptors of the type
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ and
---     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ accessible to any shader
---     stage across all elements of @pSetLayouts@ /must/ be less than or
---     equal to
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@
+--     and @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ accessible to any
+--     given shader stage across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
 --     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorStorageBuffers@
 --
--- -   The total number of descriptors of the type
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of
 --     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
 --     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, and
---     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ accessible to any shader
---     stage across all elements of @pSetLayouts@ /must/ be less than or
---     equal to
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ accessible to any given
+--     shader stage across all elements of @pSetLayouts@ /must/ be less
+--     than or equal to
 --     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorSampledImages@
 --
--- -   The total number of descriptors of the type
---     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, and
---     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ accessible to any shader
---     stage across all elements of @pSetLayouts@ /must/ be less than or
---     equal to
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@,
+--     and @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ accessible to any
+--     given shader stage across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
 --     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorStorageImages@
 --
--- -   The total number of descriptors of the type
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@
+--     accessible to any given shader stage across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorInputAttachments@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_SAMPLER@ and
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ accessible to any given
+--     shader stage across all elements of @pSetLayouts@ /must/ be less
+--     than or equal to
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxPerStageDescriptorUpdateAfterBindSamplers@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ and
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ accessible to any given
+--     shader stage across all elements of @pSetLayouts@ /must/ be less
+--     than or equal to
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxPerStageDescriptorUpdateAfterBindUniformBuffers@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ and
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ accessible to any given
+--     shader stage across all elements of @pSetLayouts@ /must/ be less
+--     than or equal to
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxPerStageDescriptorUpdateAfterBindStorageBuffers@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, and
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ accessible to any given
+--     shader stage across all elements of @pSetLayouts@ /must/ be less
+--     than or equal to
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxPerStageDescriptorUpdateAfterBindSampledImages@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, and
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ accessible to any given
+--     shader stage across all elements of @pSetLayouts@ /must/ be less
+--     than or equal to
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxPerStageDescriptorUpdateAfterBindStorageImages@
+--
+-- -   The total number of descriptors with a @descriptorType@ of
 --     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ accessible to any given shader
 --     stage across all elements of @pSetLayouts@ /must/ be less than or
 --     equal to
---     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorInputAttachments@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxPerStageDescriptorUpdateAfterBindInputAttachments@
 --
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_SAMPLER@ and
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ accessible across all
+--     shader stages and across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetSamplers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@
+--     accessible across all shader stagess and and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetUniformBuffers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ accessible across all
+--     shader stages and across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetUniformBuffersDynamic@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetStorageBuffers@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ accessible across all
+--     shader stages and across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetStorageBuffersDynamic@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@, and
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ accessible across all
+--     shader stages and across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetSampledImages@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@,
+--     and @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ accessible across all
+--     shader stages and across all elements of @pSetLayouts@ /must/ be
+--     less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetStorageImages@
+--
+-- -   The total number of descriptors in descriptor set layouts created
+--     without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set with a @descriptorType@ of @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@
+--     accessible across all shader stages and across all elements of
+--     @pSetLayouts@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxDescriptorSetInputAttachments@
+--
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_SAMPLER@ and
 --     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ accessible across all
 --     shader stages and across all elements of @pSetLayouts@ /must/ be
 --     less than or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetSamplers@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindSamplers@
 --
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ accessible across all shader
 --     stagess and and across all elements of @pSetLayouts@ /must/ be less
 --     than or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetUniformBuffers@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindUniformBuffers@
 --
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ accessible across all
 --     shader stages and across all elements of @pSetLayouts@ /must/ be
 --     less than or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetUniformBuffersDynamic@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@
 --
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ accessible across all shader
 --     stages and across all elements of @pSetLayouts@ /must/ be less than
 --     or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetStorageBuffers@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindStorageBuffers@
 --
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ accessible across all
 --     shader stages and across all elements of @pSetLayouts@ /must/ be
 --     less than or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetStorageBuffersDynamic@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@
 --
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
@@ -382,24 +496,28 @@
 --     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ accessible across all
 --     shader stages and across all elements of @pSetLayouts@ /must/ be
 --     less than or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetSampledImages@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindSampledImages@
 --
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, and
 --     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ accessible across all
 --     shader stages and across all elements of @pSetLayouts@ /must/ be
 --     less than or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetStorageImages@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindStorageImages@
 --
 -- -   The total number of descriptors of the type
 --     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ accessible across all shader
 --     stages and across all elements of @pSetLayouts@ /must/ be less than
 --     or equal to
---     @VkPhysicalDeviceLimits@::@maxDescriptorSetInputAttachments@
+--     @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@::@maxDescriptorSetUpdateAfterBindInputAttachments@
 --
 -- -   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
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@ set
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO@
@@ -417,25 +535,24 @@
 --     @VkPushConstantRange@ structures
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorSetLayout', 'VkPipelineLayoutCreateFlags',
 -- 'VkPushConstantRange', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreatePipelineLayout'
 data VkPipelineLayoutCreateInfo = VkPipelineLayoutCreateInfo
-  { -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkSType"
+  { -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPNext"
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkFlags"
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "flags"
   vkFlags :: VkPipelineLayoutCreateFlags
-  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkSetLayoutCount"
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "setLayoutCount"
   vkSetLayoutCount :: Word32
-  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPSetLayouts"
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "pSetLayouts"
   vkPSetLayouts :: Ptr VkDescriptorSetLayout
-  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPushConstantRangeCount"
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "pushConstantRangeCount"
   vkPushConstantRangeCount :: Word32
-  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPPushConstantRanges"
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "pPushConstantRanges"
   vkPPushConstantRanges :: Ptr VkPushConstantRange
   }
   deriving (Eq, Show)
@@ -460,13 +577,11 @@
 -- | VkShaderStageFlags - Bitmask of VkShaderStageFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkShaderStageFlags@ is a bitmask type for setting a mask of zero or
 -- more 'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutBinding',
 -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTablePushConstantEntryNVX',
diff --git a/src/Graphics/Vulkan/Core10/Query.hs b/src/Graphics/Vulkan/Core10/Query.hs
--- a/src/Graphics/Vulkan/Core10/Query.hs
+++ b/src/Graphics/Vulkan/Core10/Query.hs
@@ -97,7 +97,6 @@
 -- | VkQueryType - Specify the type of queries managed by a query pool
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueryPoolCreateInfo'
 newtype VkQueryType = VkQueryType Int32
@@ -121,18 +120,18 @@
                         )
                     )
 
--- | @VK_QUERY_TYPE_OCCLUSION@ specifies an
--- <{html_spec_relative}#queries-occlusion occlusion query>.
+-- | @VK_QUERY_TYPE_OCCLUSION@ specifies an [occlusion
+-- query](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-occlusion).
 pattern VK_QUERY_TYPE_OCCLUSION :: VkQueryType
 pattern VK_QUERY_TYPE_OCCLUSION = VkQueryType 0
 
--- | @VK_QUERY_TYPE_PIPELINE_STATISTICS@ specifies a
--- <{html_spec_relative}#queries-pipestats pipeline statistics query>.
+-- | @VK_QUERY_TYPE_PIPELINE_STATISTICS@ specifies a [pipeline statistics
+-- query](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-pipestats).
 pattern VK_QUERY_TYPE_PIPELINE_STATISTICS :: VkQueryType
 pattern VK_QUERY_TYPE_PIPELINE_STATISTICS = VkQueryType 1
 
--- | @VK_QUERY_TYPE_TIMESTAMP@ specifies a
--- <{html_spec_relative}#queries-timestamps timestamp query>.
+-- | @VK_QUERY_TYPE_TIMESTAMP@ specifies a [timestamp
+-- query](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-timestamps).
 pattern VK_QUERY_TYPE_TIMESTAMP :: VkQueryType
 pattern VK_QUERY_TYPE_TIMESTAMP = VkQueryType 2
 -- ** VkQueryPoolCreateFlags
@@ -140,13 +139,11 @@
 -- | VkQueryPoolCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkQueryPoolCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueryPoolCreateInfo'
 newtype VkQueryPoolCreateFlags = VkQueryPoolCreateFlags VkFlags
@@ -173,7 +170,6 @@
 -- are returned
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueryResultFlags'
 newtype VkQueryResultFlagBits = VkQueryResultFlagBits VkFlags
@@ -225,34 +221,35 @@
 -- statistics
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT@ specifies
 --     that queries managed by the pool will count the number of vertices
---     processed by the <{html_spec_relative}#drawing input assembly>
+--     processed by the [input
+--     assembly](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#drawing)
 --     stage. Vertices corresponding to incomplete primitives /may/
 --     contribute to the count.
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT@
 --     specifies that queries managed by the pool will count the number of
---     primitives processed by the
---     <{html_spec_relative}#drawing input assembly> stage. If primitive
---     restart is enabled, restarting the primitive topology has no effect
---     on the count. Incomplete primitives /may/ be counted.
+--     primitives processed by the [input
+--     assembly](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#drawing)
+--     stage. If primitive restart is enabled, restarting the primitive
+--     topology has no effect on the count. Incomplete primitives /may/ be
+--     counted.
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT@
 --     specifies that queries managed by the pool will count the number of
 --     vertex shader invocations. This counter’s value is incremented each
 --     time a vertex shader is
---     <{html_spec_relative}#shaders-vertex-execution invoked>.
+--     [invoked](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-vertex-execution).
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT@
 --     specifies that queries managed by the pool will count the number of
 --     geometry shader invocations. This counter’s value is incremented
 --     each time a geometry shader is
---     <{html_spec_relative}#shaders-geometry-execution invoked>. In the
---     case of
---     <{html_spec_relative}#geometry-invocations instanced geometry shaders>,
+--     [invoked](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-geometry-execution).
+--     In the case of [instanced geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#geometry-invocations),
 --     the geometry shader invocations count is incremented for each
 --     separate instanced invocation.
 --
@@ -266,15 +263,15 @@
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT@ specifies
 --     that queries managed by the pool will count the number of primitives
---     processed by the
---     <{html_spec_relative}#vertexpostproc-clipping Primitive Clipping>
+--     processed by the [Primitive
+--     Clipping](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-clipping)
 --     stage of the pipeline. The counter’s value is incremented each time
 --     a primitive reaches the primitive clipping stage.
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT@ specifies that
 --     queries managed by the pool will count the number of primitives
---     output by the
---     <{html_spec_relative}#vertexpostproc-clipping Primitive Clipping>
+--     output by the [Primitive
+--     Clipping](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-clipping)
 --     stage of the pipeline. The counter’s value is incremented each time
 --     a primitive passes the primitive clipping stage. The actual number
 --     of primitives output by the primitive clipping stage for a
@@ -290,20 +287,20 @@
 --     specifies that queries managed by the pool will count the number of
 --     fragment shader invocations. The counter’s value is incremented each
 --     time the fragment shader is
---     <{html_spec_relative}#shaders-fragment-execution invoked>.
+--     [invoked](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-fragment-execution).
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT@
 --     specifies that queries managed by the pool will count the number of
 --     patches processed by the tessellation control shader. The counter’s
 --     value is incremented once for each patch for which a tessellation
 --     control shader is
---     <{html_spec_relative}#shaders-tessellation-control-execution invoked>.
+--     [invoked](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-tessellation-control-execution).
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT@
 --     specifies that queries managed by the pool will count the number of
 --     invocations of the tessellation evaluation shader. The counter’s
 --     value is incremented each time the tessellation evaluation shader is
---     <{html_spec_relative}#shaders-tessellation-evaluation-execution invoked>.
+--     [invoked](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-tessellation-evaluation-execution).
 --
 -- -   @VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT@
 --     specifies that queries managed by the pool will count the number of
@@ -317,8 +314,8 @@
 -- These values are intended to measure relative statistics on one
 -- implementation. Various device architectures will count these values
 -- differently. Any or all counters /may/ be affected by the issues
--- described in
--- <{html_spec_relative}#queries-operation-undefined Query Operation>.
+-- described in [Query
+-- Operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-undefined).
 --
 -- __Note__
 --
@@ -336,7 +333,6 @@
 -- (via @vkGetQueryPoolResults@).
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueryPipelineStatisticFlags'
 newtype VkQueryPipelineStatisticFlagBits = VkQueryPipelineStatisticFlagBits VkFlags
@@ -423,11 +419,7 @@
 data VkQueryPool_T
 -- | VkQueryPool - Opaque handle to a query pool object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBeginQuery',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults',
@@ -439,7 +431,6 @@
 -- | vkCreateQueryPool - Create a new query pool object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the query pool.
 --
@@ -448,14 +439,13 @@
 --     queries to be managed by the pool.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pQueryPool@ is a pointer to a @VkQueryPool@ handle in which the
 --     resulting query pool object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -470,16 +460,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkQueryPool',
@@ -488,17 +477,15 @@
 -- | vkDestroyQueryPool - Destroy a query pool object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the query pool.
 --
 -- -   @queryPool@ is the query pool to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -530,7 +517,6 @@
 -- -   Host access to @queryPool@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkQueryPool'
@@ -539,7 +525,6 @@
 -- host memory region
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the query pool.
 --
@@ -566,12 +551,12 @@
 --     when results are returned.
 --
 -- = Description
--- #_description#
 --
 -- If no bits are set in @flags@, and all requested queries are in the
 -- available state, results are written as an array of 32-bit unsigned
 -- integer values. The behavior when not all queries are available, is
--- described <{html_spec_relative}#queries-wait-bit-not-set below>.
+-- described
+-- [below](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-wait-bit-not-set).
 --
 -- If @VK_QUERY_RESULT_64_BIT@ is not set and the result overflows a 32-bit
 -- value, the value /may/ either wrap or saturate. Similarly, if
@@ -656,7 +641,7 @@
 --
 -- -   @dataSize@ /must/ be large enough to contain the result of each
 --     query, as described
---     <{html_spec_relative}#queries-operation-memorylayout here>
+--     [here](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-operation-memorylayout)
 --
 -- -   If the @queryType@ used to create @queryPool@ was
 --     @VK_QUERY_TYPE_TIMESTAMP@, @flags@ /must/ not contain
@@ -680,12 +665,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_NOT_READY@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -693,7 +678,6 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', @VkDeviceSize@,
 -- 'VkQueryPool', 'VkQueryResultFlags'
@@ -702,15 +686,14 @@
 -- created query pool
 --
 -- = Description
--- #_description#
 --
 -- @pipelineStatistics@ is ignored if @queryType@ is not
 -- @VK_QUERY_TYPE_PIPELINE_STATISTICS@.
 --
 -- == Valid Usage
 --
--- -   If the
---     <{html_spec_relative}#features-features-pipelineStatisticsQuery pipeline statistics queries>
+-- -   If the [pipeline statistics
+--     queries](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-pipelineStatisticsQuery)
 --     feature is not enabled, @queryType@ /must/ not be
 --     @VK_QUERY_TYPE_PIPELINE_STATISTICS@
 --
@@ -729,23 +712,26 @@
 -- -   @queryType@ /must/ be a valid 'VkQueryType' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueryPipelineStatisticFlags', 'VkQueryPoolCreateFlags',
 -- 'VkQueryType', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateQueryPool'
 data VkQueryPoolCreateInfo = VkQueryPoolCreateInfo
-  { -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkQueryPoolCreateFlags
-  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkQueryType"
+  , -- | @queryType@ is a 'VkQueryType' value specifying the type of queries
+  -- managed by the pool.
   vkQueryType :: VkQueryType
-  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkQueryCount"
+  , -- | @queryCount@ is the number of queries managed by the pool.
   vkQueryCount :: Word32
-  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkPipelineStatistics"
+  , -- | @pipelineStatistics@ is a bitmask of 'VkQueryPipelineStatisticFlagBits'
+  -- specifying which counters will be returned in queries on the new pool,
+  -- as described below in
+  -- [{html_spec_relative}#queries-pipestats](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#queries-pipestats).
   vkPipelineStatistics :: VkQueryPipelineStatisticFlags
   }
   deriving (Eq, Show)
@@ -768,13 +754,11 @@
 -- | VkQueryResultFlags - Bitmask of VkQueryResultFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkQueryResultFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkQueryResultFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueryResultFlagBits',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults',
@@ -784,13 +768,11 @@
 -- VkQueryPipelineStatisticFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkQueryPipelineStatisticFlags@ is a bitmask type for setting a mask of
 -- zero or more 'VkQueryPipelineStatisticFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferInheritanceInfo',
 -- 'VkQueryPipelineStatisticFlagBits', 'VkQueryPoolCreateInfo'
diff --git a/src/Graphics/Vulkan/Core10/Queue.hs b/src/Graphics/Vulkan/Core10/Queue.hs
--- a/src/Graphics/Vulkan/Core10/Queue.hs
+++ b/src/Graphics/Vulkan/Core10/Queue.hs
@@ -88,13 +88,19 @@
 -- | VkPipelineStageFlagBits - Bitmask specifying pipeline stages
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT@ specifies the stage of the
 --     pipeline where any commands are initially received by the queue.
 --
+-- -   @VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX@ specifies the stage of
+--     the pipeline where device-side generation of commands via
+--     'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCmdProcessCommandsNVX'
+--     is handled.
+--
 -- -   @VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT@ specifies the stage of the
 --     pipeline where Draw\/DispatchIndirect data structures are consumed.
+--     This stage also includes reading commands written by
+--     'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCmdProcessCommandsNVX'.
 --
 -- -   @VK_PIPELINE_STAGE_VERTEX_INPUT_BIT@ specifies the stage of the
 --     pipeline where vertex and index buffers are consumed.
@@ -117,26 +123,31 @@
 -- -   @VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT@ specifies the stage of
 --     the pipeline where early fragment tests (depth and stencil tests
 --     before fragment shading) are performed. This stage also includes
---     <{html_spec_relative}#renderpass-load-store-ops subpass load operations>
+--     [subpass load
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops)
 --     for framebuffer attachments with a depth\/stencil format.
 --
 -- -   @VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT@ specifies the stage of
 --     the pipeline where late fragment tests (depth and stencil tests
 --     after fragment shading) are performed. This stage also includes
---     <{html_spec_relative}#renderpass-load-store-ops subpass store operations>
+--     [subpass store
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops)
 --     for framebuffer attachments with a depth\/stencil format.
 --
 -- -   @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@ specifies the stage
 --     of the pipeline after blending where the final color values are
---     output from the pipeline. This stage also includes
---     <{html_spec_relative}#renderpass-load-store-ops subpass load and store operations>
+--     output from the pipeline. This stage also includes [subpass load and
+--     store
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-load-store-ops)
 --     and multisample resolve operations for framebuffer attachments with
 --     a color format.
 --
 -- -   @VK_PIPELINE_STAGE_TRANSFER_BIT@ specifies the execution of copy
---     commands. This includes the operations resulting from all
---     <{html_spec_relative}#copies copy commands>,
---     <{html_spec_relative}#clears clear commands> (with the exception of
+--     commands. This includes the operations resulting from all [copy
+--     commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#copies),
+--     [clear
+--     commands](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#clears)
+--     (with the exception of
 --     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearAttachments'),
 --     and
 --     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults'.
@@ -205,7 +216,6 @@
 -- operations between queues.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineStageFlags',
 -- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.vkCmdWriteBufferMarkerAMD',
@@ -334,11 +344,7 @@
 data VkQueue_T
 -- | VkQueue - Opaque handle to a queue object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'vkGetDeviceQueue',
 -- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.vkGetDeviceQueue2',
@@ -353,11 +359,7 @@
 data VkCommandBuffer_T
 -- | VkCommandBuffer - Opaque handle to a command buffer object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkCmdProcessCommandsInfoNVX',
 -- 'VkSubmitInfo',
@@ -435,11 +437,7 @@
 data VkFence_T
 -- | VkFence - Opaque handle to a fence object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkAcquireNextImageInfoKHR',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.VkFenceGetFdInfoKHR',
@@ -461,11 +459,7 @@
 data VkSemaphore_T
 -- | VkSemaphore - Opaque handle to a semaphore object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkAcquireNextImageInfoKHR',
 -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkBindSparseInfo',
@@ -482,7 +476,6 @@
 -- | vkGetDeviceQueue - Get a queue handle from a device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the queue.
 --
@@ -495,9 +488,6 @@
 -- -   @pQueue@ is a pointer to a @VkQueue@ object that will be filled with
 --     the handle for the requested queue.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @queueFamilyIndex@ /must/ be one of the queue family indices
@@ -518,7 +508,6 @@
 -- -   @pQueue@ /must/ be a valid pointer to a @VkQueue@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkQueue'
 foreign import ccall "vkGetDeviceQueue" vkGetDeviceQueue :: ("device" ::: VkDevice) -> ("queueFamilyIndex" ::: Word32) -> ("queueIndex" ::: Word32) -> ("pQueue" ::: Ptr VkQueue) -> IO ()
@@ -526,7 +515,6 @@
 -- queue
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @queue@ is the queue that the command buffers will be submitted to.
 --
@@ -538,10 +526,10 @@
 -- -   @fence@ is an /optional/ handle to a fence to be signaled once all
 --     submitted command buffers have completed execution. If @fence@ is
 --     not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', it defines a
---     <{html_spec_relative}#synchronization-fences-signaling fence signal operation>.
+--     [fence signal
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-signaling).
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -549,8 +537,8 @@
 -- attempt to batch work together into as few calls to @vkQueueSubmit@ as
 -- possible.
 --
--- @vkQueueSubmit@ is a
--- <{html_spec_relative}#devsandqueues-submission queue submission command>,
+-- @vkQueueSubmit@ is a [queue submission
+-- command](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-submission),
 -- with each batch defined by an element of @pSubmits@ as an instance of
 -- the 'VkSubmitInfo' structure. Batches begin execution in the order they
 -- appear in @pSubmits@, but /may/ complete out of order.
@@ -559,35 +547,41 @@
 -- additional ordering constraints compared to other submission commands,
 -- with dependencies involving previous and subsequent queue operations.
 -- Information about these additional constraints can be found in the
--- <{html_spec_relative}#synchronization-semaphores semaphore> and
--- <{html_spec_relative}#synchronization-fences fence> sections of
--- <{html_spec_relative}#synchronization the synchronization chapter>.
+-- [semaphore](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores)
+-- and
+-- [fence](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences)
+-- sections of [the synchronization
+-- chapter](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization).
 --
 -- Details on the interaction of @pWaitDstStageMask@ with synchronization
--- are described in the
--- <{html_spec_relative}#synchronization-semaphores-waiting semaphore wait operation>
--- section of
--- <{html_spec_relative}#synchronization the synchronization chapter>.
+-- are described in the [semaphore wait
+-- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-waiting)
+-- section of [the synchronization
+-- chapter](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization).
 --
 -- The order that batches appear in @pSubmits@ is used to determine
--- <{html_spec_relative}#synchronization-submission-order submission order>,
--- and thus all the
--- <{html_spec_relative}#synchronization-implicit implicit ordering guarantees>
+-- [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order),
+-- and thus all the [implicit ordering
+-- guarantees](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-implicit)
 -- that respect it. Other than these implicit ordering guarantees and any
--- <{html_spec_relative}#synchronization explicit synchronization primitives>,
+-- [explicit synchronization
+-- primitives](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization),
 -- these batches /may/ overlap or otherwise execute out of order.
 --
--- If any command buffer submitted to this queue is in the
--- <{html_spec_relative}#commandbuffers-lifecycle executable state>, it is
--- moved to the
--- <{html_spec_relative}#commandbuffers-lifecycle pending state>. Once
--- execution of all submissions of a command buffer complete, it moves from
--- the <{html_spec_relative}#commandbuffers-lifecycle pending state>, back
--- to the <{html_spec_relative}#commandbuffers-lifecycle executable state>.
+-- If any command buffer submitted to this queue is in the [executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle),
+-- it is moved to the [pending
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
+-- Once execution of all submissions of a command buffer complete, it moves
+-- from the [pending
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle),
+-- back to the [executable
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 -- If a command buffer was recorded with the
 -- @VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT@ flag, it instead moves
--- back to the
--- <{html_spec_relative}#commandbuffers-lifecycle invalid state>.
+-- back to the [invalid
+-- state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- If @vkQueueSubmit@ fails, it /may/ return @VK_ERROR_OUT_OF_HOST_MEMORY@
 -- or @VK_ERROR_OUT_OF_DEVICE_MEMORY@. If it does, the implementation
@@ -596,8 +590,8 @@
 -- and any semaphores referenced by @pSubmits@ is unaffected by the call or
 -- its failure. If @vkQueueSubmit@ fails in such a way that the
 -- implementation is unable to make that guarantee, the implementation
--- /must/ return @VK_ERROR_DEVICE_LOST@. See
--- <{html_spec_relative}#devsandqueues-lost-device Lost Device>.
+-- /must/ return @VK_ERROR_DEVICE_LOST@. See [Lost
+-- Device](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-lost-device).
 --
 -- == Valid Usage
 --
@@ -621,7 +615,8 @@
 -- -   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
---     <{html_spec_relative}#synchronization-pipeline-stages-supported table of supported pipeline stages>.
+--     [table of supported pipeline
+--     stages](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-supported).
 --
 -- -   Each element of the @pSignalSemaphores@ member of any element of
 --     @pSubmits@ /must/ be unsignaled when the semaphore signal operation
@@ -633,30 +628,33 @@
 --
 -- -   All elements of the @pWaitSemaphores@ member of all elements of
 --     @pSubmits@ /must/ be semaphores that are signaled, or have
---     <{html_spec_relative}#synchronization-semaphores-signaling semaphore signal operations>
+--     [semaphore signal
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-signaling)
 --     previously submitted for execution.
 --
 -- -   Each element of the @pCommandBuffers@ member of each element of
---     @pSubmits@ /must/ be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending or executable state>.
+--     @pSubmits@ /must/ be in the [pending or executable
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- -   If any element of the @pCommandBuffers@ member of any element of
 --     @pSubmits@ was not recorded with the
 --     @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@, it /must/ not be in
---     the <{html_spec_relative}#commandbuffers-lifecycle pending state>.
+--     the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
--- -   Any
---     <{html_spec_relative}#commandbuffers-secondary secondary command buffers recorded>
+-- -   Any [secondary command buffers
+--     recorded](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-secondary)
 --     into any element of the @pCommandBuffers@ member of any element of
---     @pSubmits@ /must/ be in the
---     <{html_spec_relative}#commandbuffers-lifecycle pending or executable state>.
+--     @pSubmits@ /must/ be in the [pending or executable
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
--- -   If any
---     <{html_spec_relative}#commandbuffers-secondary secondary command buffers recorded>
+-- -   If any [secondary command buffers
+--     recorded](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-secondary)
 --     into any element of the @pCommandBuffers@ member of any element of
 --     @pSubmits@ was not recorded with the
 --     @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@, it /must/ not be in
---     the <{html_spec_relative}#commandbuffers-lifecycle pending state>.
+--     the [pending
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle).
 --
 -- -   Each element of the @pCommandBuffers@ member of each element of
 --     @pSubmits@ /must/ have been allocated from a @VkCommandPool@ that
@@ -689,21 +687,21 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | -               | -               | Any             | -               |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | -                                                                                                           | -                                                                                                          | Any                                                                                                   | -                                                                                                                          |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -711,19 +709,16 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkFence', 'VkQueue', 'VkSubmitInfo'
 foreign import ccall "vkQueueSubmit" vkQueueSubmit :: ("queue" ::: VkQueue) -> ("submitCount" ::: Word32) -> ("pSubmits" ::: Ptr VkSubmitInfo) -> ("fence" ::: VkFence) -> IO VkResult
 -- | vkQueueWaitIdle - Wait for a queue to become idle
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @queue@ is the queue on which to wait.
 --
 -- = Description
--- #_description#
 --
 -- @vkQueueWaitIdle@ is equivalent to submitting a fence to a queue and
 -- waiting with an infinite timeout for that fence to signal.
@@ -734,21 +729,21 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | -               | -               | Any             | -               |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | -                                                                                                           | -                                                                                                          | Any                                                                                                   | -                                                                                                                          |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -756,19 +751,16 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueue'
 foreign import ccall "vkQueueWaitIdle" vkQueueWaitIdle :: ("queue" ::: VkQueue) -> IO VkResult
 -- | vkDeviceWaitIdle - Wait for a device to become idle
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device to idle.
 --
 -- = Description
--- #_description#
 --
 -- @vkDeviceWaitIdle@ is equivalent to calling @vkQueueWaitIdle@ for all
 -- queues owned by @device@.
@@ -784,10 +776,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -795,22 +787,21 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkDeviceWaitIdle" vkDeviceWaitIdle :: ("device" ::: VkDevice) -> IO VkResult
 -- | VkSubmitInfo - Structure specifying a queue submit operation
 --
 -- = Description
--- #_description#
 --
 -- The order that command buffers appear in @pCommandBuffers@ is used to
--- determine
--- <{html_spec_relative}#synchronization-submission-order submission order>,
--- and thus all the
--- <{html_spec_relative}#synchronization-implicit implicit ordering guarantees>
+-- determine [submission
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-submission-order),
+-- and thus all the [implicit ordering
+-- guarantees](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-implicit)
 -- that respect it. Other than these implicit ordering guarantees and any
--- <{html_spec_relative}#synchronization explicit synchronization primitives>,
+-- [explicit synchronization
+-- primitives](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization),
 -- these command buffers /may/ overlap or otherwise execute out of order.
 --
 -- == Valid Usage
@@ -818,13 +809,13 @@
 -- -   Each element of @pCommandBuffers@ /must/ not have been allocated
 --     with @VK_COMMAND_BUFFER_LEVEL_SECONDARY@
 --
--- -   If the
---     <{html_spec_relative}#features-features-geometryShader geometry shaders>
+-- -   If the [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-geometryShader)
 --     feature is not enabled, each element of @pWaitDstStageMask@ /must/
 --     not contain @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@
 --
--- -   If the
---     <{html_spec_relative}#features-features-tessellationShader tessellation shaders>
+-- -   If the [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-tessellationShader)
 --     feature is not enabled, each element of @pWaitDstStageMask@ /must/
 --     not contain @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ or
 --     @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@
@@ -872,28 +863,39 @@
 --     the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCommandBuffer', 'VkPipelineStageFlags', 'VkSemaphore',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkQueueSubmit'
 data VkSubmitInfo = VkSubmitInfo
-  { -- No documentation found for Nested "VkSubmitInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSubmitInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSubmitInfo" "vkWaitSemaphoreCount"
+  , -- | @waitSemaphoreCount@ is the number of semaphores upon which to wait
+  -- before executing the command buffers for the batch.
   vkWaitSemaphoreCount :: Word32
-  , -- No documentation found for Nested "VkSubmitInfo" "vkPWaitSemaphores"
+  , -- | @pWaitSemaphores@ is a pointer to an array of semaphores upon which to
+  -- wait before the command buffers for this batch begin execution. If
+  -- semaphores to wait on are provided, they define a [semaphore wait
+  -- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-waiting).
   vkPWaitSemaphores :: Ptr VkSemaphore
-  , -- No documentation found for Nested "VkSubmitInfo" "vkPWaitDstStageMask"
+  , -- | @pWaitDstStageMask@ is a pointer to an array of pipeline stages at which
+  -- each corresponding semaphore wait will occur.
   vkPWaitDstStageMask :: Ptr VkPipelineStageFlags
-  , -- No documentation found for Nested "VkSubmitInfo" "vkCommandBufferCount"
+  , -- | @commandBufferCount@ is the number of command buffers to execute in the
+  -- batch.
   vkCommandBufferCount :: Word32
-  , -- No documentation found for Nested "VkSubmitInfo" "vkPCommandBuffers"
+  , -- | @pCommandBuffers@ is a pointer to an array of command buffers to execute
+  -- in the batch.
   vkPCommandBuffers :: Ptr VkCommandBuffer
-  , -- No documentation found for Nested "VkSubmitInfo" "vkSignalSemaphoreCount"
+  , -- | @signalSemaphoreCount@ is the number of semaphores to be signaled once
+  -- the commands specified in @pCommandBuffers@ have completed execution.
   vkSignalSemaphoreCount :: Word32
-  , -- No documentation found for Nested "VkSubmitInfo" "vkPSignalSemaphores"
+  , -- | @pSignalSemaphores@ is a pointer to an array of semaphores which will be
+  -- signaled when the command buffers for this batch have completed
+  -- execution. If semaphores to be signaled are provided, they define a
+  -- [semaphore signal
+  -- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-signaling).
   vkPSignalSemaphores :: Ptr VkSemaphore
   }
   deriving (Eq, Show)
@@ -922,13 +924,11 @@
 -- | VkPipelineStageFlags - Bitmask of VkPipelineStageFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineStageFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkPipelineStageFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineStageFlagBits', 'VkSubmitInfo',
 -- 'Graphics.Vulkan.Core10.Pass.VkSubpassDependency',
diff --git a/src/Graphics/Vulkan/Core10/QueueSemaphore.hs b/src/Graphics/Vulkan/Core10/QueueSemaphore.hs
--- a/src/Graphics/Vulkan/Core10/QueueSemaphore.hs
+++ b/src/Graphics/Vulkan/Core10/QueueSemaphore.hs
@@ -65,13 +65,11 @@
 -- | VkSemaphoreCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkSemaphoreCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSemaphoreCreateInfo'
 newtype VkSemaphoreCreateFlags = VkSemaphoreCreateFlags VkFlags
@@ -95,7 +93,6 @@
 -- | vkCreateSemaphore - Create a new queue semaphore object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the semaphore.
 --
@@ -104,13 +101,14 @@
 --     how the semaphore is to be created.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pSemaphore@ points to a handle in which the resulting semaphore
 --     object is returned.
 --
 -- = Description
--- #_description#
 --
 -- When created, the semaphore is in the unsignaled state.
 --
@@ -128,16 +126,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -146,17 +143,15 @@
 -- | vkDestroySemaphore - Destroy a semaphore object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the semaphore.
 --
 -- -   @semaphore@ is the handle of the semaphore to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -188,7 +183,6 @@
 -- -   Host access to @semaphore@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -197,9 +191,6 @@
 -- | VkSemaphoreCreateInfo - Structure specifying parameters of a newly
 -- created semaphore
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO@
@@ -216,16 +207,15 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSemaphoreCreateFlags', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateSemaphore'
 data VkSemaphoreCreateInfo = VkSemaphoreCreateInfo
-  { -- No documentation found for Nested "VkSemaphoreCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSemaphoreCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSemaphoreCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkSemaphoreCreateFlags
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/Sampler.hs b/src/Graphics/Vulkan/Core10/Sampler.hs
--- a/src/Graphics/Vulkan/Core10/Sampler.hs
+++ b/src/Graphics/Vulkan/Core10/Sampler.hs
@@ -91,7 +91,6 @@
 -- | VkBorderColor - Specify border color used for texture lookups
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK@ specifies a transparent,
 --     floating-point format, black color.
@@ -111,11 +110,10 @@
 -- -   @VK_BORDER_COLOR_INT_OPAQUE_WHITE@ specifies an opaque, integer
 --     format, white color.
 --
--- These colors are described in detail in
--- <{html_spec_relative}#textures-texel-replacement Texel Replacement>.
+-- These colors are described in detail in [Texel
+-- Replacement](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-texel-replacement).
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSamplerCreateInfo'
 newtype VkBorderColor = VkBorderColor Int32
@@ -174,7 +172,6 @@
 -- coordinates outside an image
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSamplerCreateInfo'
 newtype VkSamplerAddressMode = VkSamplerAddressMode Int32
@@ -228,17 +225,17 @@
 -- | VkFilter - Specify filters used for texture lookups
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_FILTER_NEAREST@ specifies nearest filtering.
 --
 -- -   @VK_FILTER_LINEAR@ specifies linear filtering.
 --
--- These filters are described in detail in
--- <{html_spec_relative}#textures-texel-filtering Texel Filtering>.
+-- -   @VK_FILTER_CUBIC_IMG@ specifies cubic filtering.
 --
+-- These filters are described in detail in [Texel
+-- Filtering](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-texel-filtering).
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkSamplerCreateInfo',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo',
@@ -278,17 +275,15 @@
 -- | VkSamplerMipmapMode - Specify mipmap mode used for texture lookups
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_SAMPLER_MIPMAP_MODE_NEAREST@ specifies nearest filtering.
 --
 -- -   @VK_SAMPLER_MIPMAP_MODE_LINEAR@ specifies linear filtering.
 --
--- These modes are described in detail in
--- <{html_spec_relative}#textures-texel-filtering Texel Filtering>.
+-- These modes are described in detail in [Texel
+-- Filtering](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-texel-filtering).
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSamplerCreateInfo'
 newtype VkSamplerMipmapMode = VkSamplerMipmapMode Int32
@@ -322,13 +317,11 @@
 -- | VkSamplerCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkSamplerCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSamplerCreateInfo'
 newtype VkSamplerCreateFlags = VkSamplerCreateFlags VkFlags
@@ -353,11 +346,7 @@
 data VkSampler_T
 -- | VkSampler - Opaque handle to a sampler object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorImageInfo',
 -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutBinding',
@@ -366,7 +355,6 @@
 -- | vkCreateSampler - Create a new sampler object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the sampler.
 --
@@ -375,14 +363,13 @@
 --     object.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pSampler@ points to a 'VkSampler' handle in which the resulting
 --     sampler object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -397,10 +384,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -408,7 +395,6 @@
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkSampler',
@@ -417,17 +403,15 @@
 -- | vkDestroySampler - Destroy a sampler object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the sampler.
 --
 -- -   @sampler@ is the sampler to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -459,7 +443,6 @@
 -- -   Host access to @sampler@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkSampler'
@@ -468,7 +451,6 @@
 -- sampler
 --
 -- = Members
--- #_members#
 --
 -- -   @sType@ is the type of this structure.
 --
@@ -496,13 +478,13 @@
 --
 -- -   @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
---     <{html_spec_relative}#textures-level-of-detail-operation Level-of-Detail Operation>
+--     as described in the [Level-of-Detail
+--     Operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-level-of-detail-operation)
 --     section.
 --
 -- -   @anisotropyEnable@ is @VK_TRUE@ to enable anisotropic filtering, as
---     described in the
---     <{html_spec_relative}#textures-texel-anisotropic-filtering Texel Anisotropic Filtering>
+--     described in the [Texel Anisotropic
+--     Filtering](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-texel-anisotropic-filtering)
 --     section, or @VK_FALSE@ otherwise.
 --
 -- -   @maxAnisotropy@ is the anisotropy value clamp used by the sampler
@@ -517,13 +499,13 @@
 --
 -- -   @compareOp@ is a 'Graphics.Vulkan.Core10.Pipeline.VkCompareOp' value
 --     specifying the comparison function to apply to fetched data before
---     filtering as described in the
---     <{html_spec_relative}#textures-depth-compare-operation Depth Compare Operation>
+--     filtering as described in the [Depth Compare
+--     Operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-depth-compare-operation)
 --     section.
 --
 -- -   @minLod@ and @maxLod@ are the values used to clamp the computed LOD
---     value, as described in the
---     <{html_spec_relative}#textures-level-of-detail-operation Level-of-Detail Operation>
+--     value, as described in the [Level-of-Detail
+--     Operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-level-of-detail-operation)
 --     section. @maxLod@ /must/ be greater than or equal to @minLod@.
 --
 -- -   @borderColor@ is a 'VkBorderColor' value specifying the predefined
@@ -551,6 +533,8 @@
 --
 --     -   @compareEnable@ /must/ be @VK_FALSE@.
 --
+--     -   The sampler /must/ not enable sampler Y’CBCR conversion.
+--
 -- -   When @unnormalizedCoordinates@ is @VK_TRUE@, images the sampler is
 --     used with in the shader have the following requirements:
 --
@@ -569,7 +553,6 @@
 --     -   The functions /must/ not use offsets.
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -588,16 +571,17 @@
 -- @minFilter@ = @VK_FILTER_NEAREST@, respectively.
 --
 -- Note that using a @maxLod@ of zero would cause
--- <{html_spec_relative}#textures-texel-filtering magnification> to always
--- be performed, and the @magFilter@ to always be used. This is valid, just
--- not an exact match for OpenGL behavior. Clamping the maximum LOD to 0.25
--- allows the λ value to be non-zero and minification to be performed,
--- while still always rounding down to the base level. If the @minFilter@
--- and @magFilter@ are equal, then using a @maxLod@ of zero also works.
+-- [magnification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-texel-filtering)
+-- to always be performed, and the @magFilter@ to always be used. This is
+-- valid, just not an exact match for OpenGL behavior. Clamping the maximum
+-- LOD to 0.25 allows the λ value to be non-zero and minification to be
+-- performed, while still always rounding down to the base level. If the
+-- @minFilter@ and @magFilter@ are equal, then using a @maxLod@ of zero
+-- also works.
 --
 -- The maximum number of sampler objects which /can/ be simultaneously
 -- created on a device is implementation-dependent and specified by the
--- <{html_spec_relative}#features-limits-maxSamplerAllocationCount maxSamplerAllocationCount>
+-- [maxSamplerAllocationCount](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-maxSamplerAllocationCount)
 -- member of the
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'
 -- structure. If @maxSamplerAllocationCount@ is exceeded, @vkCreateSampler@
@@ -613,14 +597,21 @@
 -- -   The absolute value of @mipLodBias@ /must/ be less than or equal to
 --     @VkPhysicalDeviceLimits@::@maxSamplerLodBias@
 --
--- -   If the
---     <{html_spec_relative}#features-features-samplerAnisotropy anisotropic sampling>
+-- -   If the [anisotropic
+--     sampling](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-samplerAnisotropy)
 --     feature is not enabled, @anisotropyEnable@ /must/ be @VK_FALSE@
 --
 -- -   If @anisotropyEnable@ is @VK_TRUE@, @maxAnisotropy@ /must/ be
 --     between @1.0@ and @VkPhysicalDeviceLimits@::@maxSamplerAnisotropy@,
 --     inclusive
 --
+-- -   If [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+--     is enabled and
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT@
+--     is not set for the format, @minFilter@ and @magFilter@ /must/ be
+--     equal to the sampler Y’CBCR conversion’s @chromaFilter@
+--
 -- -   If @unnormalizedCoordinates@ is @VK_TRUE@, @minFilter@ and
 --     @magFilter@ /must/ be equal
 --
@@ -645,6 +636,18 @@
 --     @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER@, @borderColor@ /must/ be a
 --     valid 'VkBorderColor' value
 --
+-- -   If [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+--     is enabled, @addressModeU@, @addressModeV@, and @addressModeW@
+--     /must/ be @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE@,
+--     @anisotropyEnable@ /must/ be @VK_FALSE@, and
+--     @unnormalizedCoordinates@ /must/ be @VK_FALSE@
+--
+-- -   The sampler reduction mode /must/ be set to
+--     @VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT@ if [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion)
+--     is enabled
+--
 -- -   If the @{html_spec_relative}#VK_KHR_sampler_mirror_clamp_to_edge@
 --     extension is not enabled, @addressModeU@, @addressModeV@ and
 --     @addressModeW@ /must/ not be
@@ -653,6 +656,18 @@
 -- -   If @compareEnable@ is @VK_TRUE@, @compareOp@ /must/ be a valid
 --     'Graphics.Vulkan.Core10.Pipeline.VkCompareOp' value
 --
+-- -   If either @magFilter@ or @minFilter@ is @VK_FILTER_CUBIC_IMG@,
+--     @anisotropyEnable@ /must/ be @VK_FALSE@
+--
+-- -   If either @magFilter@ or @minFilter@ is @VK_FILTER_CUBIC_IMG@, the
+--     @reductionMode@ member of
+--     'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkSamplerReductionModeCreateInfoEXT'
+--     /must/ be @VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT@
+--
+-- -   If @compareEnable@ is @VK_TRUE@, the @reductionMode@ member of
+--     'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkSamplerReductionModeCreateInfoEXT'
+--     /must/ be @VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT@
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO@
@@ -681,48 +696,47 @@
 -- -   @addressModeW@ /must/ be a valid 'VkSamplerAddressMode' value
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'VkBorderColor',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkCompareOp', 'VkFilter',
 -- 'VkSamplerAddressMode', 'VkSamplerCreateFlags', 'VkSamplerMipmapMode',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateSampler'
 data VkSamplerCreateInfo = VkSamplerCreateInfo
-  { -- No documentation found for Nested "VkSamplerCreateInfo" "vkSType"
+  { -- No documentation found for Nested "VkSamplerCreateInfo" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkPNext"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkFlags"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "flags"
   vkFlags :: VkSamplerCreateFlags
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMagFilter"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "magFilter"
   vkMagFilter :: VkFilter
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMinFilter"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "minFilter"
   vkMinFilter :: VkFilter
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMipmapMode"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "mipmapMode"
   vkMipmapMode :: VkSamplerMipmapMode
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAddressModeU"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "addressModeU"
   vkAddressModeU :: VkSamplerAddressMode
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAddressModeV"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "addressModeV"
   vkAddressModeV :: VkSamplerAddressMode
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAddressModeW"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "addressModeW"
   vkAddressModeW :: VkSamplerAddressMode
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMipLodBias"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "mipLodBias"
   vkMipLodBias :: CFloat
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAnisotropyEnable"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "anisotropyEnable"
   vkAnisotropyEnable :: VkBool32
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMaxAnisotropy"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "maxAnisotropy"
   vkMaxAnisotropy :: CFloat
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkCompareEnable"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "compareEnable"
   vkCompareEnable :: VkBool32
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkCompareOp"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "compareOp"
   vkCompareOp :: VkCompareOp
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMinLod"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "minLod"
   vkMinLod :: CFloat
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMaxLod"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "maxLod"
   vkMaxLod :: CFloat
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkBorderColor"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "borderColor"
   vkBorderColor :: VkBorderColor
-  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkUnnormalizedCoordinates"
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "unnormalizedCoordinates"
   vkUnnormalizedCoordinates :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/Shader.hs b/src/Graphics/Vulkan/Core10/Shader.hs
--- a/src/Graphics/Vulkan/Core10/Shader.hs
+++ b/src/Graphics/Vulkan/Core10/Shader.hs
@@ -69,13 +69,11 @@
 -- | VkShaderModuleCreateFlags - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkShaderModuleCreateFlags@ is a bitmask type for setting a mask, but is
 -- currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkShaderModuleCreateInfo'
 newtype VkShaderModuleCreateFlags = VkShaderModuleCreateFlags VkFlags
@@ -100,11 +98,7 @@
 data VkShaderModule_T
 -- | VkShaderModule - Opaque handle to a shader module object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineShaderStageCreateInfo',
 -- 'vkCreateShaderModule', 'vkDestroyShaderModule'
@@ -112,7 +106,6 @@
 -- | vkCreateShaderModule - Creates a new shader module object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the shader module.
 --
@@ -120,19 +113,25 @@
 --     @VkShaderModuleCreateInfo@ structure.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pShaderModule@ points to a @VkShaderModule@ handle in which the
 --     resulting shader module object is returned.
 --
 -- = Description
--- #_description#
 --
 -- Once a shader module has been created, any entry points it contains
--- /can/ be used in pipeline shader stages as described in
--- <{html_spec_relative}#pipelines-compute Compute Pipelines> and
--- <{html_spec_relative}#pipelines-graphics Graphics Pipelines>.
+-- /can/ be used in pipeline shader stages as described in [Compute
+-- Pipelines](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-compute)
+-- and [Graphics
+-- Pipelines](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#pipelines-graphics).
 --
+-- If the shader stage fails to compile @VK_ERROR_INVALID_SHADER_NV@ will
+-- be generated and the compile log will be reported back to the
+-- application by @{html_spec_relative}#VK_EXT_debug_report@ if enabled.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -148,10 +147,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -159,7 +158,6 @@
 --     -   @VK_ERROR_INVALID_SHADER_NV@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -168,17 +166,17 @@
 -- | vkDestroyShaderModule - Destroy a shader module module
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the shader module.
 --
 -- -   @shaderModule@ is the handle of the shader module to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- = Description
--- #_description#
 --
 -- A shader module /can/ be destroyed while pipelines created using its
 -- shaders are still in use.
@@ -210,7 +208,6 @@
 -- -   Host access to @shaderModule@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkShaderModule'
@@ -218,37 +215,41 @@
 -- | VkShaderModuleCreateInfo - Structure specifying parameters of a newly
 -- created shader module
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @codeSize@ /must/ be greater than 0
 --
--- -   @codeSize@ /must/ be a multiple of 4
+-- -   If @pCode@ points to SPIR-V code, @codeSize@ /must/ be a multiple of
+--     4
 --
--- -   @pCode@ /must/ point to valid SPIR-V code, formatted and packed as
---     described by the
---     <{html_spec_relative}#spirv-spec Khronos SPIR-V Specification>
+-- -   @pCode@ /must/ point to either valid SPIR-V code, formatted and
+--     packed as described by the [Khronos SPIR-V
+--     Specification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#spirv-spec)
+--     or valid GLSL code which /must/ be written to the GL_KHR_vulkan_glsl
+--     extension specification
 --
--- -   @pCode@ /must/ adhere to the validation rules described by the
---     <{html_spec_relative}#spirvenv-module-validation Validation Rules within a Module>
---     section of the
---     <{html_spec_relative}#spirvenv-capabilities SPIR-V Environment>
+-- -   If @pCode@ points to SPIR-V code, that code /must/ adhere to the
+--     validation rules described by the [Validation Rules within a
+--     Module](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#spirvenv-module-validation)
+--     section of the [SPIR-V
+--     Environment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#spirvenv-capabilities)
 --     appendix
 --
+-- -   If @pCode@ points 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
 --
 -- -   @pCode@ /must/ not declare any capability that is not supported by
 --     the API, as described by the
---     <{html_spec_relative}#spirvenv-module-validation Capabilities>
---     section of the
---     <{html_spec_relative}#spirvenv-capabilities SPIR-V Environment>
+--     [Capabilities](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#spirvenv-module-validation)
+--     section of the [SPIR-V
+--     Environment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#spirvenv-capabilities)
 --     appendix
 --
 -- -   If @pCode@ declares any of the capabilities listed as /optional/ in
---     the
---     <{html_spec_relative}#spirvenv-capabilities-table SPIR-V Environment>
+--     the [SPIR-V
+--     Environment](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#spirvenv-capabilities-table)
 --     appendix, the corresponding feature(s) /must/ be enabled.
 --
 -- == Valid Usage (Implicit)
@@ -261,24 +262,24 @@
 -- -   @flags@ /must/ be @0@
 --
 -- -   @pCode@ /must/ be a valid pointer to an array of
---     <<data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAARoAAABCCAYAAACIGRmUAAAABmJLR0QA/wD/AP+gvaeTAAAQE0lEQVR4nO2dabAVxRWAv/vgyQMeIiqLEBWMhpSARiUxatwNGKMmISbErayUS1yiJiJquYFRy7iVIZaaRaMxRdRE44IakxhBIVEQBDcUUYKioj5EHiCKPt7Nj3On7kxPz70zPT0zb+mvqkvfcPvMmZ6Znu7T55wGh8PhCDIG+BvwGVDWlLXAxUBjUQo6HI7OSwNwGdCOdCjvApcC44GDgcmVY16Hc3+ljsPhcMSiB3Av1U7kUaCf5nfDgA98vzs9LwUdDkfn53dUO495QK8av73Q99s3slfN4XB0Bb5HteNoA0bV+f0+BG02w7NUzuFwdH6agHeodhp3xqizI8GO5vB6FZwhx+Ho3hwDDPX9fVOMOupqU1O9Cq6jcTi6N6f4/v9NYG6MOsOUv8v1KvRMopEjE64Ctqnx763A2Tnp4uhebAl81ff3VsCrMeqpq1Hv1KvgOppi2QyYRG3Hp5k56dKR6AGMBHYGBgD9kVWQdYiz2NvAksp/635NLdAfMZj2Be4D3svhnHmwH8FZTTPS7klZbkUbR2bsgd7z0l+uKUy7fNkCOBF4HPiE+u1SBj4GZgFXAocBfTLQa1dgpe+cK5AXsiswmWB7fq1YdRx58SXCL9PEQjXKnt7ARchIJU7nUqt8AjwCHG1Jtwbgdc15vm9JftHcSPC6tsjqRG7q1LHYQ3NsQe5a5MfOwEPAF5Xjr1SOL0SmR2uR6WU/ZGl1LPADxKbgpwkZ2awH7rKg3xiNbgAfWpDd0WgD1hSthCMfriP4hVkDlArVKDv2JzyKeR44KGb9zZC4nE2ERxznWdJxBNW4H6/Mpeus1l5O9bo2Jqh3DnA38OsslHJkzyyCD/UThWqTHTsAqwhe64PINCopFxHuaA62oyYgQYWfIV/8+4BBFmUXzREE263W6qfHSKpR3T/PTjVHVpSQpWz/jb+2UI2y4z8Er/NlzA25jcD7irwBFnT004sYTmmdkGZgNdV2O6X2z+kDPEt1ZOdML50QnSH4R4VqlA2HE77OI1PKvMMn6/WUsrob/pWn94DtIn43DJhd+d2bwLa5aOewztGEX8CdCtUoG/5B8BpbSG/zuMQn756UsrobJcRw7rXfauAKxKj+DcTo/hvEh6mMRHZHdUaOTsD1dH1DcF/gU4LXea8Fuf60BbYMwd2JBuAswnYzf1kM/ATD6ZKbY3Uc1KXt55Ab3JXYm3Cek7csyJ2NjGoAHrAgr7vRjqwg3YyMYkYirgMbkYx6C4DX0pzARkfTiMRLbAcMBDZHli3XIMq9hHhw5oGqSzPi8/A+4pNh46GOS1/kxdoWGAx8jty0+YRvWgnYTTmWl/9MH2BPJIJ3MNKGLZUyD2k7W+imgja8eWdXiiMdbcjK56xi1ahSQmI/ZlCdu0WVTchLczFi8MxClwnAwzF0WYQMEbMcye2DfFU31NBjAfBNX528DcE9gOOAfxGeyvhLO9JBn1apk5apmnMsoWP4pQyi9rPjLcHndS6TksX7VRiHI6MU3YVuJDpzuvfgzsBeTMURdXTROXOVgRcQr0+bDAL+GnG+qLY4s1L3GM2/Z2UInoC83DqdNhB2UPO3mc5LNgkXR8i+MKVcGxxG/Xt2qaVzfSvGuZKWVjqwTS/Jl70X4rn6U+X4DCQr15NUjUlbIl/2Mwl+uUtIR7UUGZabEqXLgz5dPkSubwSyonMeMp0B6WQeR6JXl6TQw2MXxGV+e+X46srxF5G22Qpxn/9ORZdpiC1Gtc+sxf4ybRNwA3Cq79jnwO3IqsM8pKNpRFI5Hk9w9DcGcSDcF/Mp6LKI41ciX+PzsTtVS8p03/8PBg5R/t3WdNZ/v+9COve4DATGaY5fgbx7nZpm4L8Ee9AW9BesciXh3vfYlLqoDl8tBDs0HbsQdohbiriyp2Es4SnbRsQ9PsrJ6wvA05XfziHsETwzpU4q/YBnlHO8isQa1eIgwiPUx1LoMRTp3KK+yhuQpVTVXlUEJxHWb4gl2fdX5K1IWG9LJExD1WuKJb0KpTfhF+F96j+kHg2EpzdfNtSlCfmq+mV9QP1kyh6nE75J5xjqAmJ09qcQ8F6WQ2PUHUR124qNiozrUuik0kT4/r2CPLRxuJZwm+2bQh9/tv1aZTHyAtme4sblFkWfusmdEvBWRWYSm09/ZCFBbadfWtSrUKYTvLB24o1k/Pj9HNZhbvy7U6NLnJfaoy9hI+27hrr0QH/jk4zWvOGuWmylOQD4kyJ7AxIBHZeRGv1uTqFPX8Kjq3plKXA1wWxwWTNP0eEhS3IH+mTGtfnoZhRlZOrdJfgu4Yv7vYEcf/DWU4a6HKnR5TYDOf/WyDH5ap6tkXN3Qhl7aWSUsbd6oGuzCxLK0MVgvZBSr2bENpSks/GPxiaTbfKpRsKrcVMsyT7UJ/PbMX6vm1GUkZFhhzX+JqEP4WnBRszcj/fzybjBUBf/VpxlxHYw3EDWHYRvWtLd9rYm/PK1kWykAMGvm1dsrR7o2qwFM78Vb6jvlU0W9ANJFeHFzyQtLcAZlvRQ+YrmfHE6hTg0I8/tcOrvXd0L+KdGlz9i9oxM1ciyXaYmVeoMjZDpNWtEMxDx2zgOs5ykOtuKaWKjaRpZl9SsEeYCjYykoxmQjGaqnJkGcnTo2uxyQ1lqR1MmvRHdz26IZ6p/q9W45SFq76poQpaG4Lg0Iiu6qh73YO7TNFUjr9COpgHxXlWFHGZ4gWkooff7MP3C3KaRdXWC+g1IMmZVRt1NtDQM0cixYQiOajMTI3wJvW+Ubl/mtPRARjnTkAjhuA+3SSdfiywNwXFQ98H2ygOkczadqpGZS0cTpfRehB3GWpFhXN7sRdhm0YpEAZvQX3PsswT19yXsL2OqzwjNMRu+GnsTbrONJLfPgHxZ1SF+G9mElWxCfKCeRGxgYxFnxqOpPaKYCPwWe6NB1a8pz3SqDciih5qX+DHgh0jbdzqiOhrdqtIcirnI8ZpjaXTRGVqXJ6iv89eZg/iH2NDFxkOtu3+9gBMsyAbx/0jiZGbK/Eo5HwnJuJRoO9ix2OloGhGfKz95dTQlZLHlGOX4E0jIT5IPYqdAt5RWVPi9TV0a0G/lkST1o+doZ0OfGxQ5a7FjCNa1mc1ia+SQlCbgDxE6LbR0Dp0h2GRabMJNmnPPoerR3qUokf5l7Ki6jNbI2kR857US+iDEuAm1VZ5S5MwylOMnqs32tyC7I1BCRhjq9dkK2ThRIzsPQ7Caj6iM+PJsnsO5C2Eo+i+Gut9uZ9RFt5IWZ69hj20j9Blaq1IEPQmHLlxvIEclqs3yXjXJkvMIX5+t6c3Nitw8DMG6MJ2F2M99XBg6G832mmMfk7/lHfS6fIK5LgdqjiUx4u6gObYBM+/isYSdzmy8LLo2W09x27gOQa4VZCUzVQKlCis1x/5nQS7kbwi+hHD0+mLEFvhRxufODV0ogM4noaiNpXS6tBrK6kd4eb4dsfDHRefsttZQH51Reb6hLD8d6f6BRIHPqJQk4SK1UDeOAzuJr3qSryF4EvAL5dhSxDSwKsPz5o5uRLNecyyvDHkqNnWZQHjfoAdJNrfXrSx9aqjP8crf65CHLC26NjPVEWREMtr393ySdVz+EYKtFBC7a4793YLc0YQj7rPqaM4g7DO1HLH3FTX6zJURhOeLpoGHlyE98ypkSXRrC7q0GOhRQuJz/HLakRSWSdhTo4/JCGucRs4sAzk6hmtkm7SZh5fSoIx4CCf1wl3qq//jFHp4eKlG/de3yIJc0BuC42yqlpSTCCcYW4Her0rHnsBRSF6jrGkieA+t5kl6m2AjtFE/LkNlIMF4INNIU1WXMsnjdSZqZJhs59kHfT6VJB1oA9XE47YNwR66kAGT1Yv9CL4QJyWs31+pbxoC4ec0wtd2lAW5kI8h+DjCmR9XkiyQ1ossf966dmFUQ7XVjuZ2wjdTzTZWD396iZXo59WmuiTZcGwI4RiapZj7JuiWVk9IUP8yTf0yYSetNOjCLJLmIB6APFRe/Zkk9/E5UNHhJQMZfnYiuLNiGVk1tBXFPFeRbSs1hMdRyEdbHW3GzacEwchyk+wFSdiZcPiJ1Y5mDOFeN8n+O5N89dpJ5/Ck0yXufLwf4vCkfj2SRln70QUrLiZekOHJROfkNQk2jWIU4Qf6aeIH4/VDwgC8uh9gFrV/LuHrPMtADoj9ZJkiaxX6VTYTehL2P5piSTbIx1F9aVcjDoJJ8DsUJs06kIQS+sh66zuB6jKhnVynTi8kQNFfJ00Gu1q61HtgdyScvChJNr4oeiPGOlWf+4geJQ1EYnG8h0uNyrXlEexHnQaUgV9RP+nYbkiOY69OK3rjaxz8OyB6ZRPyAquG+Sj6I6PAjxU5q0mX6U9lV42utjyCxxN29GzFLEm/346U1MaYhFMq51gDPOI7p1FHU+vh7g08ChygHJ+OvDSLkJWSRiQqeDwyf/Z8TdqQkY2JLSSuLvcgbtsLkdWWzZEHZiJiT/AbLmcj05O3LehzEBJgqo4QViGRxK8gL8ZgJCh0HGLfWYO00zUEPXU/IjhMb0c69TR5X3ohW9CoU96ngRuR+BnPqDoI+DoSLzTBd13LKn+b2gJeI3o3hw+RUfJc5OFtRb74zUjHPBrpSMYRNkAvQQyhaRLLTyKY8Gw7wn5WDxA09k8jeajD/sgIXO1YF2HWrrsjerchI880K4pRDEJySg9AVsd2Rzo4gDdINyPQ0oy8zLqhfplwrluvvIwYEvPUJWqbl1VIUJ6NfYn8nIDe1T+qLEBeOl3GOrXY2JkBpHNTU7H6SxvhKVYZMXjfguTLScMoJOewmoDLtKwCfoadXDgrDM5vsgXOwwbniVNsrbTp+HPlHM8gI+Bbfee1PnXycwjiQRvVsZSRr/BTyAuY5QZtcXRpQ76U55JtysfRyEhL97J65TlkWdebsug2i1OLaYKxKA6o6Flrs7gy8vJdi/2NyHogW61OQUaW6jSoVmkB/oKkTYg73aqHyQZupnuhq1kqbZWsDMGe68XnyOwALHQ0SRuuH5LrZBtkeNuA3IA3SO7IlRZVF++hfA+xzeTpvj0EmSINQ0YB6xHnq2cpJnQjCm+b3qHIy9YDGV2tRKYEb+akRwmZqoys6NKvUsrIdHwtch9fRB9u4MiG3sjK4A6IM+HkyvFbyXjq5HA4ug9XIZ39coILG7lNnRwOR9dmNFU7p7ralrqj6QibqzscjmIpISvJjYibxsPFquNwOLoipyKjlbXocz25qZPD4UjFEGThpAycGfEb19E4HI5U3I10IM8SbUpxHY3D4TDG2563jdphJs4Y7HA4jOiDxMOBhKQ8V6AuDoeji+IFP79Ffe/53D2DHQ5H12AlYgheh0TC12Irqp1RG2Fv9xeokyMqy5gkh8PRcfEGGV74R1x6Es4B1KUSqTscjmJwxmCHw9HxcR2Nw+HIHNfROByOzHEdjcPhyBy3vO1wOFSmE9xhdAiSJB4k894y5fejSJff2uFwdEPULYrqlbpuMv8HtK+/BrL8EjoAAAAASUVORK5CYII= stem 3c191c7a3fc8d91b8c1ec0b877b089a5>>
---     @uint32_t@ values
+--     \(codeSize \over 4\) @uint32_t@ values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkShaderModuleCreateFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateShaderModule'
 data VkShaderModuleCreateInfo = VkShaderModuleCreateInfo
-  { -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkShaderModuleCreateFlags
-  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkCodeSize"
+  , -- | @codeSize@ is the size, in bytes, of the code pointed to by @pCode@.
   vkCodeSize :: CSize
-  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkPCode"
+  , -- | @pCode@ points to code that is used to create the shader module. The
+  -- type and format of the code is determined from the content of the memory
+  -- addressed by @pCode@.
   vkPCode :: Ptr Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs b/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs
--- a/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs
+++ b/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs
@@ -112,7 +112,6 @@
 -- included in a view
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo',
 -- 'VkImageAspectFlags',
@@ -161,7 +160,9 @@
 pattern VK_IMAGE_ASPECT_STENCIL_BIT = VkImageAspectFlagBits 0x00000004
 
 -- | @VK_IMAGE_ASPECT_METADATA_BIT@ specifies the metadata aspect, used for
--- sparse <{html_spec_relative}#sparsememory sparse resource> operations.
+-- sparse [sparse
+-- resource](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#sparsememory)
+-- operations.
 pattern VK_IMAGE_ASPECT_METADATA_BIT :: VkImageAspectFlagBits
 pattern VK_IMAGE_ASPECT_METADATA_BIT = VkImageAspectFlagBits 0x00000008
 -- ** VkSparseMemoryBindFlagBits
@@ -170,7 +171,6 @@
 -- binding operation
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSparseMemoryBindFlags'
 newtype VkSparseMemoryBindFlagBits = VkSparseMemoryBindFlagBits VkFlags
@@ -200,7 +200,6 @@
 -- about a sparse image resource
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSparseImageFormatFlags'
 newtype VkSparseImageFormatFlagBits = VkSparseImageFormatFlagBits VkFlags
@@ -246,7 +245,6 @@
 -- sparse image
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the image.
 --
@@ -260,7 +258,6 @@
 --     array of @VkSparseImageMemoryRequirements@ structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pSparseMemoryRequirements@ is @NULL@, then the number of sparse
 -- memory requirements available is returned in
@@ -305,7 +302,6 @@
 --     @device@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
@@ -315,7 +311,6 @@
 -- an image format applied to sparse images
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device from which to query the
 --     sparse image capabilities.
@@ -338,7 +333,6 @@
 --     'VkSparseImageFormatProperties' structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pProperties@ is @NULL@, then the number of sparse format properties
 -- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
@@ -402,7 +396,6 @@
 --     structures
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkFormat',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling',
@@ -415,7 +408,6 @@
 -- | vkQueueBindSparse - Bind device memory to a sparse resource object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @queue@ is the queue that the sparse binding operations will be
 --     submitted to.
@@ -427,14 +419,13 @@
 --
 -- -   @fence@ is an /optional/ handle to a fence to be signaled. If
 --     @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', it
---     defines a
---     <{html_spec_relative}#synchronization-fences-signaling fence signal operation>.
+--     defines a [fence signal
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-signaling).
 --
 -- = Description
--- #_description#
 --
--- @vkQueueBindSparse@ is a
--- <{html_spec_relative}#devsandqueues-submission queue submission command>,
+-- @vkQueueBindSparse@ is a [queue submission
+-- command](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#devsandqueues-submission),
 -- with each batch defined by an element of @pBindInfo@ as an instance of
 -- the 'VkBindSparseInfo' structure. Batches begin execution in the order
 -- they appear in @pBindInfo@, but /may/ complete out of order.
@@ -451,7 +442,8 @@
 -- effectively only define execution dependencies.
 --
 -- Additional information about fence and semaphore operation is described
--- in <{html_spec_relative}#synchronization the synchronization chapter>.
+-- in [the synchronization
+-- chapter](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization).
 --
 -- == Valid Usage
 --
@@ -472,7 +464,8 @@
 --
 -- -   All elements of the @pWaitSemaphores@ member of all elements of
 --     @pBindInfo@ /must/ be semaphores that are signaled, or have
---     <{html_spec_relative}#synchronization-semaphores-signaling semaphore signal operations>
+--     [semaphore signal
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-signaling)
 --     previously submitted for execution.
 --
 -- == Valid Usage (Implicit)
@@ -513,21 +506,21 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | -               | -               | SPARSE_BINDING  | -               |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | -                                                                                                           | -                                                                                                          | SPARSE_BINDING                                                                                        | -                                                                                                                          |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -535,18 +528,13 @@
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBindSparseInfo', 'Graphics.Vulkan.Core10.Queue.VkFence',
 -- 'Graphics.Vulkan.Core10.Queue.VkQueue'
 foreign import ccall "vkQueueBindSparse" vkQueueBindSparse :: ("queue" ::: VkQueue) -> ("bindInfoCount" ::: Word32) -> ("pBindInfo" ::: Ptr VkBindSparseInfo) -> ("fence" ::: VkFence) -> IO VkResult
 -- | VkOffset3D - Structure specifying a three-dimensional offset
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferImageCopy',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageBlit',
@@ -554,11 +542,11 @@
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageResolve',
 -- 'VkSparseImageMemoryBind'
 data VkOffset3D = VkOffset3D
-  { -- No documentation found for Nested "VkOffset3D" "vkX"
+  { -- | @x@ is the x offset.
   vkX :: Int32
-  , -- No documentation found for Nested "VkOffset3D" "vkY"
+  , -- | @y@ is the y offset.
   vkY :: Int32
-  , -- No documentation found for Nested "VkOffset3D" "vkZ"
+  , -- | @z@ is the z offset.
   vkZ :: Int32
   }
   deriving (Eq, Show)
@@ -575,11 +563,7 @@
 -- | VkSparseImageFormatProperties - Structure specifying sparse image format
 -- properties
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
 -- 'VkImageAspectFlags', 'VkSparseImageFormatFlags',
@@ -587,11 +571,14 @@
 -- 'VkSparseImageMemoryRequirements',
 -- 'vkGetPhysicalDeviceSparseImageFormatProperties'
 data VkSparseImageFormatProperties = VkSparseImageFormatProperties
-  { -- No documentation found for Nested "VkSparseImageFormatProperties" "vkAspectMask"
+  { -- | @aspectMask@ is a bitmask 'VkImageAspectFlagBits' specifying which
+  -- aspects of the image the properties apply to.
   vkAspectMask :: VkImageAspectFlags
-  , -- No documentation found for Nested "VkSparseImageFormatProperties" "vkImageGranularity"
+  , -- | @imageGranularity@ is the width, height, and depth of the sparse image
+  -- block in texels or compressed texel blocks.
   vkImageGranularity :: VkExtent3D
-  , -- No documentation found for Nested "VkSparseImageFormatProperties" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkSparseImageFormatFlagBits' specifying
+  -- additional information about the sparse resource.
   vkFlags :: VkSparseImageFormatFlags
   }
   deriving (Eq, Show)
@@ -609,7 +596,6 @@
 -- memory requirements
 --
 -- = Members
--- #_members#
 --
 -- -   @formatProperties.aspectMask@ is the set of aspects of the image
 --     that this sparse memory requirement applies to. This will usually
@@ -658,25 +644,21 @@
 --     @VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT@ (otherwise the value is
 --     undefined).
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- @VkDeviceSize@, 'VkSparseImageFormatProperties',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkSparseImageMemoryRequirements2',
 -- 'vkGetImageSparseMemoryRequirements'
 data VkSparseImageMemoryRequirements = VkSparseImageMemoryRequirements
-  { -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkFormatProperties"
+  { -- No documentation found for Nested "VkSparseImageMemoryRequirements" "formatProperties"
   vkFormatProperties :: VkSparseImageFormatProperties
-  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailFirstLod"
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "imageMipTailFirstLod"
   vkImageMipTailFirstLod :: Word32
-  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailSize"
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "imageMipTailSize"
   vkImageMipTailSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailOffset"
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "imageMipTailOffset"
   vkImageMipTailOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailStride"
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "imageMipTailStride"
   vkImageMipTailStride :: VkDeviceSize
   }
   deriving (Eq, Show)
@@ -696,9 +678,6 @@
                 *> poke (ptr `plusPtr` 40) (vkImageMipTailStride (poked :: VkSparseImageMemoryRequirements))
 -- | VkImageSubresource - Structure specifying a image subresource
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @aspectMask@ /must/ be a valid combination of
@@ -707,16 +686,15 @@
 -- -   @aspectMask@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkImageAspectFlags', 'VkSparseImageMemoryBind',
 -- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout'
 data VkImageSubresource = VkImageSubresource
-  { -- No documentation found for Nested "VkImageSubresource" "vkAspectMask"
+  { -- | @aspectMask@ is a 'VkImageAspectFlags' selecting the image /aspect/.
   vkAspectMask :: VkImageAspectFlags
-  , -- No documentation found for Nested "VkImageSubresource" "vkMipLevel"
+  , -- | @mipLevel@ selects the mipmap level.
   vkMipLevel :: Word32
-  , -- No documentation found for Nested "VkImageSubresource" "vkArrayLayer"
+  , -- | @arrayLayer@ selects the array layer.
   vkArrayLayer :: Word32
   }
   deriving (Eq, Show)
@@ -733,7 +711,6 @@
 -- | VkSparseMemoryBind - Structure specifying a sparse memory bind operation
 --
 -- = Description
--- #_description#
 --
 -- The /binding range/ [@resourceOffset@, @resourceOffset@ + @size@) has
 -- different constraints based on @flags@. If @flags@ contains
@@ -741,11 +718,9 @@
 -- the mip tail region of the metadata aspect. This metadata region is
 -- defined by:
 --
--- []
---     metadataRegion = [base, base + @imageMipTailSize@)
+-- -   metadataRegion = [base, base + @imageMipTailSize@)
 --
--- []
---     base = @imageMipTailOffset@ + @imageMipTailStride@ × n
+-- -   base = @imageMipTailOffset@ + @imageMipTailStride@ × n
 --
 -- and @imageMipTailOffset@, @imageMipTailSize@, and @imageMipTailStride@
 -- values are from the 'VkSparseImageMemoryRequirements' corresponding to
@@ -766,7 +741,7 @@
 --     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @memory@ and
 --     @memoryOffset@ /must/ match the memory requirements of the resource,
 --     as described in section
---     <{html_spec_relative}#resources-association {html_spec_relative}#resources-association>
+--     [{html_spec_relative}#resources-association](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-association)
 --
 -- -   If @memory@ is not
 --     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @memory@ /must/
@@ -795,21 +770,26 @@
 --     'VkSparseMemoryBindFlagBits' values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory', @VkDeviceSize@,
 -- 'VkSparseBufferMemoryBindInfo', 'VkSparseImageOpaqueMemoryBindInfo',
 -- 'VkSparseMemoryBindFlags'
 data VkSparseMemoryBind = VkSparseMemoryBind
-  { -- No documentation found for Nested "VkSparseMemoryBind" "vkResourceOffset"
+  { -- | @resourceOffset@ is the offset into the resource.
   vkResourceOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkSparseMemoryBind" "vkSize"
+  , -- | @size@ is the size of the memory region to be bound.
   vkSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkSparseMemoryBind" "vkMemory"
+  , -- | @memory@ is the @VkDeviceMemory@ object that the range of the resource
+  -- is bound to. If @memory@ is
+  -- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', the range is unbound.
   vkMemory :: VkDeviceMemory
-  , -- No documentation found for Nested "VkSparseMemoryBind" "vkMemoryOffset"
+  , -- | @memoryOffset@ is the offset into the @VkDeviceMemory@ object to bind
+  -- the resource range to. If @memory@ is
+  -- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', this value is
+  -- ignored.
   vkMemoryOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkSparseMemoryBind" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkSparseMemoryBindFlagBits' specifying usage of
+  -- the binding operation.
   vkFlags :: VkSparseMemoryBindFlags
   }
   deriving (Eq, Show)
@@ -829,23 +809,20 @@
                 *> poke (ptr `plusPtr` 32) (vkFlags (poked :: VkSparseMemoryBind))
 -- | VkSparseImageMemoryBind - Structure specifying sparse image memory bind
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
--- -   If the
---     <{html_spec_relative}#features-features-sparseResidencyAliased sparse aliased residency>
+-- -   If the [sparse aliased
+--     residency](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sparseResidencyAliased)
 --     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
---     <{html_spec_relative}#resources-association {html_spec_relative}#resources-association>
+--     [{html_spec_relative}#resources-association](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-association)
 --
 -- -   @subresource@ /must/ be a valid image subresource for @image@ (see
---     <{html_spec_relative}#resources-image-views {html_spec_relative}#resources-image-views>)
+--     [{html_spec_relative}#resources-image-views](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views))
 --
 -- -   @offset.x@ /must/ be a multiple of the sparse image block width
 --     (@VkSparseImageFormatProperties@::@imageGranularity.width@) of the
@@ -883,24 +860,34 @@
 --     'VkSparseMemoryBindFlagBits' values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory', @VkDeviceSize@,
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
 -- 'VkImageSubresource', 'VkOffset3D', 'VkSparseImageMemoryBindInfo',
 -- 'VkSparseMemoryBindFlags'
 data VkSparseImageMemoryBind = VkSparseImageMemoryBind
-  { -- No documentation found for Nested "VkSparseImageMemoryBind" "vkSubresource"
+  { -- | @subresource@ is the aspectMask and region of interest in the image.
   vkSubresource :: VkImageSubresource
-  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkOffset"
+  , -- | @offset@ are the coordinates of the first texel within the image
+  -- subresource to bind.
   vkOffset :: VkOffset3D
-  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkExtent"
+  , -- | @extent@ is the size in texels of the region within the image
+  -- subresource to bind. The extent /must/ be a multiple of the sparse image
+  -- block dimensions, except when binding sparse image blocks along the edge
+  -- of an image subresource it /can/ instead be such that any coordinate of
+  -- @offset@ + @extent@ equals the corresponding dimensions of the image
+  -- subresource.
   vkExtent :: VkExtent3D
-  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkMemory"
+  , -- | @memory@ is the @VkDeviceMemory@ object that the sparse image blocks of
+  -- the image are bound to. If @memory@ is
+  -- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', the sparse image
+  -- blocks are unbound.
   vkMemory :: VkDeviceMemory
-  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkMemoryOffset"
+  , -- | @memoryOffset@ is an offset into @VkDeviceMemory@ object. If @memory@ is
+  -- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', this value is
+  -- ignored.
   vkMemoryOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkFlags"
+  , -- | @flags@ are sparse memory binding flags.
   vkFlags :: VkSparseMemoryBindFlags
   }
   deriving (Eq, Show)
@@ -923,9 +910,6 @@
 -- | VkSparseBufferMemoryBindInfo - Structure specifying a sparse buffer
 -- memory bind operation
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @buffer@ /must/ be a valid @VkBuffer@ handle
@@ -936,16 +920,16 @@
 -- -   @bindCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBindSparseInfo', 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'VkSparseMemoryBind'
 data VkSparseBufferMemoryBindInfo = VkSparseBufferMemoryBindInfo
-  { -- No documentation found for Nested "VkSparseBufferMemoryBindInfo" "vkBuffer"
+  { -- | @buffer@ is the @VkBuffer@ object to be bound.
   vkBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkSparseBufferMemoryBindInfo" "vkBindCount"
+  , -- | @bindCount@ is the number of @VkSparseMemoryBind@ structures in the
+  -- @pBinds@ array.
   vkBindCount :: Word32
-  , -- No documentation found for Nested "VkSparseBufferMemoryBindInfo" "vkPBinds"
+  , -- | @pBinds@ is a pointer to array of @VkSparseMemoryBind@ structures.
   vkPBinds :: Ptr VkSparseMemoryBind
   }
   deriving (Eq, Show)
@@ -962,9 +946,6 @@
 -- | VkSparseImageOpaqueMemoryBindInfo - Structure specifying sparse image
 -- opaque memory bind info
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If the @flags@ member of any element of @pBinds@ contains
@@ -982,16 +963,16 @@
 -- -   @bindCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBindSparseInfo', 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
 -- 'VkSparseMemoryBind'
 data VkSparseImageOpaqueMemoryBindInfo = VkSparseImageOpaqueMemoryBindInfo
-  { -- No documentation found for Nested "VkSparseImageOpaqueMemoryBindInfo" "vkImage"
+  { -- | @image@ is the @VkImage@ object to be bound.
   vkImage :: VkImage
-  , -- No documentation found for Nested "VkSparseImageOpaqueMemoryBindInfo" "vkBindCount"
+  , -- | @bindCount@ is the number of @VkSparseMemoryBind@ structures in the
+  -- @pBinds@ array.
   vkBindCount :: Word32
-  , -- No documentation found for Nested "VkSparseImageOpaqueMemoryBindInfo" "vkPBinds"
+  , -- | @pBinds@ is a pointer to array of @VkSparseMemoryBind@ structures.
   vkPBinds :: Ptr VkSparseMemoryBind
   }
   deriving (Eq, Show)
@@ -1008,9 +989,6 @@
 -- | VkSparseImageMemoryBindInfo - Structure specifying sparse image memory
 -- bind info
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The @subresource.mipLevel@ member of each element of @pBinds@ /must/
@@ -1033,16 +1011,16 @@
 -- -   @bindCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBindSparseInfo', 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
 -- 'VkSparseImageMemoryBind'
 data VkSparseImageMemoryBindInfo = VkSparseImageMemoryBindInfo
-  { -- No documentation found for Nested "VkSparseImageMemoryBindInfo" "vkImage"
+  { -- | @image@ is the @VkImage@ object to be bound
   vkImage :: VkImage
-  , -- No documentation found for Nested "VkSparseImageMemoryBindInfo" "vkBindCount"
+  , -- | @bindCount@ is the number of @VkSparseImageMemoryBind@ structures in
+  -- pBinds array
   vkBindCount :: Word32
-  , -- No documentation found for Nested "VkSparseImageMemoryBindInfo" "vkPBinds"
+  , -- | @pBinds@ is a pointer to array of @VkSparseImageMemoryBind@ structures
   vkPBinds :: Ptr VkSparseImageMemoryBind
   }
   deriving (Eq, Show)
@@ -1058,9 +1036,6 @@
                 *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageMemoryBindInfo))
 -- | VkBindSparseInfo - Structure specifying a sparse binding operation
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BIND_SPARSE_INFO@
@@ -1093,36 +1068,52 @@
 --     allocated, or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkSemaphore',
 -- 'VkSparseBufferMemoryBindInfo', 'VkSparseImageMemoryBindInfo',
 -- 'VkSparseImageOpaqueMemoryBindInfo',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkQueueBindSparse'
 data VkBindSparseInfo = VkBindSparseInfo
-  { -- No documentation found for Nested "VkBindSparseInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkWaitSemaphoreCount"
+  , -- | @waitSemaphoreCount@ is the number of semaphores upon which to wait
+  -- before executing the sparse binding operations for the batch.
   vkWaitSemaphoreCount :: Word32
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkPWaitSemaphores"
+  , -- | @pWaitSemaphores@ is a pointer to an array of semaphores upon which to
+  -- wait on before the sparse binding operations for this batch begin
+  -- execution. If semaphores to wait on are provided, they define a
+  -- [semaphore wait
+  -- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-waiting).
   vkPWaitSemaphores :: Ptr VkSemaphore
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkBufferBindCount"
+  , -- | @bufferBindCount@ is the number of sparse buffer bindings to perform in
+  -- the batch.
   vkBufferBindCount :: Word32
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkPBufferBinds"
+  , -- | @pBufferBinds@ is a pointer to an array of
+  -- 'VkSparseBufferMemoryBindInfo' structures.
   vkPBufferBinds :: Ptr VkSparseBufferMemoryBindInfo
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkImageOpaqueBindCount"
+  , -- | @imageOpaqueBindCount@ is the number of opaque sparse image bindings to
+  -- perform.
   vkImageOpaqueBindCount :: Word32
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkPImageOpaqueBinds"
+  , -- | @pImageOpaqueBinds@ is a pointer to an array of
+  -- 'VkSparseImageOpaqueMemoryBindInfo' structures, indicating opaque sparse
+  -- image bindings to perform.
   vkPImageOpaqueBinds :: Ptr VkSparseImageOpaqueMemoryBindInfo
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkImageBindCount"
+  , -- | @imageBindCount@ is the number of sparse image bindings to perform.
   vkImageBindCount :: Word32
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkPImageBinds"
+  , -- | @pImageBinds@ is a pointer to an array of 'VkSparseImageMemoryBindInfo'
+  -- structures, indicating sparse image bindings to perform.
   vkPImageBinds :: Ptr VkSparseImageMemoryBindInfo
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkSignalSemaphoreCount"
+  , -- | @signalSemaphoreCount@ is the number of semaphores to be signaled once
+  -- the sparse binding operations specified by the structure have completed
+  -- execution.
   vkSignalSemaphoreCount :: Word32
-  , -- No documentation found for Nested "VkBindSparseInfo" "vkPSignalSemaphores"
+  , -- | @pSignalSemaphores@ is a pointer to an array of semaphores which will be
+  -- signaled when the sparse binding operations for this batch have
+  -- completed execution. If semaphores to be signaled are provided, they
+  -- define a [semaphore signal
+  -- operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-signaling).
   vkPSignalSemaphores :: Ptr VkSemaphore
   }
   deriving (Eq, Show)
@@ -1157,13 +1148,11 @@
 -- | VkImageAspectFlags - Bitmask of VkImageAspectFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkImageAspectFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkImageAspectFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkClearAttachment',
 -- 'VkImageAspectFlagBits', 'VkImageSubresource',
@@ -1175,13 +1164,11 @@
 -- | VkSparseMemoryBindFlags - Bitmask of VkSparseMemoryBindFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkSparseMemoryBindFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkSparseMemoryBindFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSparseImageMemoryBind', 'VkSparseMemoryBind',
 -- 'VkSparseMemoryBindFlagBits'
@@ -1189,13 +1176,11 @@
 -- | VkSparseImageFormatFlags - Bitmask of VkSparseImageFormatFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkSparseImageFormatFlags@ is a bitmask type for setting a mask of zero
 -- or more 'VkSparseImageFormatFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSparseImageFormatFlagBits', 'VkSparseImageFormatProperties'
 type VkSparseImageFormatFlags = VkSparseImageFormatFlagBits
diff --git a/src/Graphics/Vulkan/Core10/Version.hs b/src/Graphics/Vulkan/Core10/Version.hs
--- a/src/Graphics/Vulkan/Core10/Version.hs
+++ b/src/Graphics/Vulkan/Core10/Version.hs
@@ -29,11 +29,7 @@
 
 -- | VK_HEADER_VERSION - Vulkan header file version number
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- No cross-references are available
 pattern VK_HEADER_VERSION :: Integral a => a
@@ -41,7 +37,6 @@
 -- | VK_MAKE_VERSION - Construct an API version number
 --
 -- = Description
--- #_description#
 --
 -- -   @major@ is the major version number.
 --
@@ -55,7 +50,6 @@
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkCreateInstance'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkApplicationInfo',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkCreateInstance'
@@ -66,11 +60,7 @@
 
 -- | VK_API_VERSION_1_0 - Return API version number for Vulkan 1.0
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkCreateInstance',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceProperties'
@@ -79,11 +69,7 @@
 
 -- | VK_API_VERSION_1_1 - Return API version number for Vulkan 1.1
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkCreateInstance',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceProperties'
@@ -92,11 +78,7 @@
 
 -- | VK_VERSION_MAJOR - Extract API major version number
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- No cross-references are available
 _VK_VERSION_MAJOR :: Word32 -> Word32
@@ -104,11 +86,7 @@
 
 -- | VK_VERSION_MINOR - Extract API minor version number
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- No cross-references are available
 _VK_VERSION_MINOR :: Word32 -> Word32
diff --git a/src/Graphics/Vulkan/Core11/DeviceInitialization.hs b/src/Graphics/Vulkan/Core11/DeviceInitialization.hs
--- a/src/Graphics/Vulkan/Core11/DeviceInitialization.hs
+++ b/src/Graphics/Vulkan/Core11/DeviceInitialization.hs
@@ -27,28 +27,23 @@
 -- instance creation
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @pApiVersion@ points to a @uint32_t@, which is the version of Vulkan
 --     supported by instance-level functionality, encoded as described in
---     the
---     <{html_spec_relative}#fundamentals-versionnum API Version Numbers and Semantics>
+--     the [API Version Numbers and
+--     Semantics](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-versionnum)
 --     section.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @pApiVersion@ /must/ be a valid pointer to a @uint32_t@ value
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 -- = See Also
--- #_see_also#
 --
 -- No cross-references are available
 foreign import ccall "vkEnumerateInstanceVersion" vkEnumerateInstanceVersion :: ("pApiVersion" ::: Ptr Word32) -> IO VkResult
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_protected_memory.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_protected_memory.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_protected_memory.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_protected_memory.hs
@@ -100,7 +100,6 @@
 -- | vkGetDeviceQueue2 - Get a queue handle from a device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the queue.
 --
@@ -111,9 +110,6 @@
 -- -   @pQueue@ is a pointer to a @VkQueue@ object that will be filled with
 --     the handle for the requested queue.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -124,7 +120,6 @@
 -- -   @pQueue@ /must/ be a valid pointer to a @VkQueue@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkDeviceQueueInfo2', 'Graphics.Vulkan.Core10.Queue.VkQueue'
@@ -132,9 +127,6 @@
 -- | VkProtectedSubmitInfo - Structure indicating whether the submission is
 -- protected
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If the protected memory feature is not enabled, @protectedSubmit@
@@ -156,15 +148,18 @@
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkProtectedSubmitInfo = VkProtectedSubmitInfo
-  { -- No documentation found for Nested "VkProtectedSubmitInfo" "vkSType"
+  { -- No documentation found for Nested "VkProtectedSubmitInfo" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkProtectedSubmitInfo" "vkPNext"
+  , -- No documentation found for Nested "VkProtectedSubmitInfo" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkProtectedSubmitInfo" "vkProtectedSubmit"
+  , -- | @protectedSubmit@ specifies whether the batch is protected. If
+  -- @protectedSubmit@ is @VK_TRUE@, the batch is protected. If
+  -- @protectedSubmit@ is @VK_FALSE@, the batch is unprotected. If the
+  -- @VkSubmitInfo@::@pNext@ chain does not contain this structure, the batch
+  -- is unprotected.
   vkProtectedSubmit :: VkBool32
   }
   deriving (Eq, Show)
@@ -182,7 +177,6 @@
 -- memory features that can be supported by an implementation
 --
 -- = Description
--- #_description#
 --
 -- If the @VkPhysicalDeviceProtectedMemoryFeatures@ structure is included
 -- in the @pNext@ chain of
@@ -195,15 +189,14 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceProtectedMemoryFeatures = VkPhysicalDeviceProtectedMemoryFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryFeatures" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryFeatures" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryFeatures" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryFeatures" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryFeatures" "vkProtectedMemory"
+  , -- | @protectedMemory@ specifies whether protected memory is supported.
   vkProtectedMemory :: VkBool32
   }
   deriving (Eq, Show)
@@ -221,7 +214,6 @@
 -- protected memory properties that can be supported by an implementation
 --
 -- = Description
--- #_description#
 --
 -- If the @VkPhysicalDeviceProtectedMemoryProperties@ structure is included
 -- in the @pNext@ chain of
@@ -235,15 +227,18 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceProtectedMemoryProperties = VkPhysicalDeviceProtectedMemoryProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryProperties" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryProperties" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryProperties" "vkProtectedNoFault"
+  , -- | @protectedNoFault@ specifies whether the undefined behavior will not
+  -- include process termination or device loss. If @protectedNoFault@ is
+  -- @VK_FALSE@, undefined behavior /may/ include process termination or
+  -- device loss. If @protectedNoFault@ is @VK_TRUE@, undefined behavior will
+  -- not include process termination or device loss.
   vkProtectedNoFault :: VkBool32
   }
   deriving (Eq, Show)
@@ -261,7 +256,6 @@
 -- queue creation
 --
 -- = Description
--- #_description#
 --
 -- The queue returned by @vkGetDeviceQueue2@ /must/ have the same @flags@
 -- value from this structure as that used at device creation time in a
@@ -293,20 +287,24 @@
 -- -   @flags@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Device.VkDeviceQueueCreateFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkGetDeviceQueue2'
 data VkDeviceQueueInfo2 = VkDeviceQueueInfo2
-  { -- No documentation found for Nested "VkDeviceQueueInfo2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. The
+  -- @pNext@ chain of @VkDeviceQueueInfo2@ is used to provide additional
+  -- image parameters to @vkGetDeviceQueue2@.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkFlags"
+  , -- | @flags@ is a 'Graphics.Vulkan.Core10.Device.VkDeviceQueueCreateFlags'
+  -- value indicating the flags used to create the device queue.
   vkFlags :: VkDeviceQueueCreateFlags
-  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkQueueFamilyIndex"
+  , -- | @queueFamilyIndex@ is the index of the queue family to which the queue
+  -- belongs.
   vkQueueFamilyIndex :: Word32
-  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkQueueIndex"
+  , -- | @queueIndex@ is the index within this queue family of the queue to
+  -- retrieve.
   vkQueueIndex :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_subgroup.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_subgroup.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_subgroup.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_subgroup.hs
@@ -68,7 +68,6 @@
 -- supported
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSubgroupFeatureFlags'
 newtype VkSubgroupFeatureFlagBits = VkSubgroupFeatureFlagBits VkFlags
@@ -156,13 +155,11 @@
 -- support for an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceSubgroupProperties@ structure
 -- describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @sType@ is the type of this structure.
 --
@@ -170,7 +167,7 @@
 --
 -- -   @subgroupSize@ is the number of invocations in each subgroup. This
 --     will match any
---     <{html_spec_relative}#interfaces-builtin-variables-sgs SubgroupSize>
+--     [@SubgroupSize@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#interfaces-builtin-variables-sgs)
 --     decorated variable used in any shader module created on this device.
 --     @subgroupSize@ is at least 1 if any of the physical device’s queues
 --     support @VK_QUEUE_GRAPHICS_BIT@ or @VK_QUEUE_COMPUTE_BIT@.
@@ -189,7 +186,8 @@
 --     @VK_QUEUE_GRAPHICS_BIT@ or @VK_QUEUE_COMPUTE_BIT@.
 --
 -- -   @quadOperationsInAllStages@ is a boolean that specifies whether
---     <{html_spec_relative}#features-features-subgroup-quad quad subgroup operations>
+--     [quad subgroup
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-subgroup-quad)
 --     are available in all stages, or are restricted to fragment and
 --     compute stages.
 --
@@ -204,22 +202,21 @@
 -- it is filled with the implementation-dependent limits.
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkSubgroupFeatureFlags'
 data VkPhysicalDeviceSubgroupProperties = VkPhysicalDeviceSubgroupProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSubgroupSize"
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "subgroupSize"
   vkSubgroupSize :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSupportedStages"
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "supportedStages"
   vkSupportedStages :: VkShaderStageFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSupportedOperations"
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "supportedOperations"
   vkSupportedOperations :: VkSubgroupFeatureFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkQuadOperationsInAllStages"
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "quadOperationsInAllStages"
   vkQuadOperationsInAllStages :: VkBool32
   }
   deriving (Eq, Show)
@@ -242,13 +239,11 @@
 -- | VkSubgroupFeatureFlags - Bitmask of VkSubgroupFeatureFlagBits
 --
 -- = Description
--- #_description#
 --
 -- @VkSubgroupFeatureFlags@ is a bitmask type for setting a mask of zero or
 -- more 'VkSubgroupFeatureFlagBits'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPhysicalDeviceSubgroupProperties', 'VkSubgroupFeatureFlagBits'
 type VkSubgroupFeatureFlags = VkSubgroupFeatureFlagBits
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_16bit_storage.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_16bit_storage.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_16bit_storage.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_16bit_storage.hs
@@ -29,18 +29,48 @@
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = VkStructureType 1000083000
 -- | VkPhysicalDevice16BitStorageFeatures - Structure describing features
 -- supported by VK_KHR_16bit_storage
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES@
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDevice16BitStorageFeatures = VkPhysicalDevice16BitStorageFeatures
-  { -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkStorageBuffer16BitAccess"
+  , -- | @storageBuffer16BitAccess@ specifies whether objects in the
+  -- @StorageBuffer@ 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.
   vkStorageBuffer16BitAccess :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkUniformAndStorageBuffer16BitAccess"
+  , -- | @uniformAndStorageBuffer16BitAccess@ specifies whether objects in the
+  -- @Uniform@ storage class with the @Block@ decoration and in the
+  -- @StorageBuffer@ storage class with the same 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 @UniformAndStorageBuffer16BitAccess@ capability.
   vkUniformAndStorageBuffer16BitAccess :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkStoragePushConstant16"
+  , -- | @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.
   vkStoragePushConstant16 :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkStorageInputOutput16"
+  , -- | @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.
   vkStorageInputOutput16 :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_bind_memory2.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_bind_memory2.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_bind_memory2.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_bind_memory2.hs
@@ -59,21 +59,189 @@
 pattern VK_IMAGE_CREATE_ALIAS_BIT :: VkImageCreateFlagBits
 pattern VK_IMAGE_CREATE_ALIAS_BIT = VkImageCreateFlagBits 0x00000400
 -- | vkBindBufferMemory2 - Bind device memory to buffer objects
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the buffers and memory.
+--
+-- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
+--
+-- -   @pBindInfos@ is a pointer to an array of structures of type
+--     'VkBindBufferMemoryInfo', describing buffers and memory to bind.
+--
+-- = Description
+--
+-- On some implementations, it /may/ be more efficient to batch memory
+-- bindings into a single command.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pBindInfos@ /must/ be a valid pointer to an array of
+--     @bindInfoCount@ valid @VkBindBufferMemoryInfo@ structures
+--
+-- -   @bindInfoCount@ /must/ be greater than @0@
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+--
+-- 'VkBindBufferMemoryInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkBindBufferMemory2" vkBindBufferMemory2 :: ("device" ::: VkDevice) -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr VkBindBufferMemoryInfo) -> IO VkResult
 -- | vkBindImageMemory2 - Bind device memory to image objects
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the images and memory.
+--
+-- -   @bindInfoCount@ is the number of elements in @pBindInfos@.
+--
+-- -   @pBindInfos@ is a pointer to an array of structures of type
+--     'VkBindImageMemoryInfo', describing images and memory to bind.
+--
+-- = Description
+--
+-- On some implementations, it /may/ be more efficient to batch memory
+-- bindings into a single command.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pBindInfos@ /must/ be a valid pointer to an array of
+--     @bindInfoCount@ valid @VkBindImageMemoryInfo@ structures
+--
+-- -   @bindInfoCount@ /must/ be greater than @0@
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+--
+-- 'VkBindImageMemoryInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkBindImageMemory2" vkBindImageMemory2 :: ("device" ::: VkDevice) -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr VkBindImageMemoryInfo) -> IO VkResult
 -- | VkBindBufferMemoryInfo - Structure specifying how to bind a buffer to
 -- memory
+--
+-- == Valid Usage
+--
+-- -   @buffer@ /must/ not already be backed by a memory object
+--
+-- -   @buffer@ /must/ not have been created with any sparse memory binding
+--     flags
+--
+-- -   @memoryOffset@ /must/ be less than the size of @memory@
+--
+-- -   If @buffer@ was created with the
+--     @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or
+--     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@, @memoryOffset@ /must/ be
+--     a multiple of
+--     @VkPhysicalDeviceLimits@::@minTexelBufferOffsetAlignment@
+--
+-- -   If @buffer@ was created with the
+--     @VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT@, @memoryOffset@ /must/ be a
+--     multiple of
+--     @VkPhysicalDeviceLimits@::@minUniformBufferOffsetAlignment@
+--
+-- -   If @buffer@ was created with the
+--     @VK_BUFFER_USAGE_STORAGE_BUFFER_BIT@, @memoryOffset@ /must/ be a
+--     multiple of
+--     @VkPhysicalDeviceLimits@::@minStorageBufferOffsetAlignment@
+--
+-- -   @memory@ /must/ have been allocated using one of the memory types
+--     allowed in the @memoryTypeBits@ member of the @VkMemoryRequirements@
+--     structure returned from a call to @vkGetBufferMemoryRequirements@
+--     with @buffer@
+--
+-- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
+--     member of the @VkMemoryRequirements@ structure returned from a call
+--     to @vkGetBufferMemoryRequirements@ with @buffer@
+--
+-- -   The @size@ member of the @VkMemoryRequirements@ structure returned
+--     from a call to @vkGetBufferMemoryRequirements@ with @buffer@ /must/
+--     be less than or equal to the size of @memory@ minus @memoryOffset@
+--
+-- -   If @buffer@ requires a dedicated allocation(as reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2'
+--     in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @buffer@), @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@buffer@
+--     equal to @buffer@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the @VkMemoryAllocateInfo@ provided when @memory@ was allocated
+--     included an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--     in its @pNext@ chain, and
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@buffer@
+--     was not @VK_NULL_HANDLE@, then @buffer@ /must/ equal
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@buffer@
+--     and @memoryOffset@ /must/ be zero.
+--
+-- -   If @buffer@ was created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationBufferCreateInfoNV'::@dedicatedAllocation@
+--     equal to @VK_TRUE@, @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV'::@buffer@
+--     equal to @buffer@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the @pNext@ chain includes
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindBufferMemoryDeviceGroupInfo',
+--     all instances of @memory@ specified by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindBufferMemoryDeviceGroupInfo'::@pDeviceIndices@
+--     /must/ have been allocated
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindBufferMemoryDeviceGroupInfo'
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   Both of @buffer@, and @memory@ /must/ have been created, allocated,
+--     or retrieved from the same @VkDevice@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory', @VkDeviceSize@,
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkBindBufferMemory2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindBufferMemory2KHR'
 data VkBindBufferMemoryInfo = VkBindBufferMemoryInfo
-  { -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkBuffer"
+  , -- | @buffer@ is the buffer to be attached to memory.
   vkBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkMemory"
+  , -- | @memory@ is a @VkDeviceMemory@ object describing the device memory to
+  -- attach.
   vkMemory :: VkDeviceMemory
-  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkMemoryOffset"
+  , -- | @memoryOffset@ is the start offset of the region of @memory@ which is to
+  -- be bound to the buffer. The number of bytes returned in the
+  -- @VkMemoryRequirements@::@size@ member in @memory@, starting from
+  -- @memoryOffset@ bytes, will be bound to the specified buffer.
   vkMemoryOffset :: VkDeviceSize
   }
   deriving (Eq, Show)
@@ -93,16 +261,190 @@
                 *> poke (ptr `plusPtr` 32) (vkMemoryOffset (poked :: VkBindBufferMemoryInfo))
 -- | VkBindImageMemoryInfo - Structure specifying how to bind an image to
 -- memory
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ not already be backed by a memory object
+--
+-- -   @image@ /must/ not have been created with any sparse memory binding
+--     flags
+--
+-- -   @memoryOffset@ /must/ be less than the size of @memory@
+--
+-- -   If the @pNext@ chain does not include an instance of the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--     structure, @memory@ /must/ have been allocated using one of the
+--     memory types allowed in the @memoryTypeBits@ member of the
+--     'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'
+--     structure returned from a call to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     with @image@
+--
+-- -   If the @pNext@ chain does not include an instance of the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--     structure, @memoryOffset@ /must/ be an integer multiple of the
+--     @alignment@ member of the
+--     'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'
+--     structure returned from a call to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     with @image@
+--
+-- -   If the @pNext@ chain does not include an instance of the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--     structure, the difference of the size of @memory@ and @memoryOffset@
+--     /must/ be greater than or equal to the @size@ member of the
+--     'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'
+--     structure returned from a call to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     with the same @image@
+--
+-- -   If the @pNext@ chain includes an instance of the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--     structure, @image@ /must/ have been created with the
+--     @VK_IMAGE_CREATE_DISJOINT_BIT@ bit set.
+--
+-- -   If the @pNext@ chain includes an instance of the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--     structure, @memory@ /must/ have been allocated using one of the
+--     memory types allowed in the @memoryTypeBits@ member of the
+--     'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'
+--     structure returned from a call to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     with @image@ and the correct @planeAspect@ for this plane in the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+--     structure attached to the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkImageMemoryRequirementsInfo2'’s
+--     @pNext@ chain
+--
+-- -   If the @pNext@ chain includes an instance of the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--     structure, @memoryOffset@ /must/ be an integer multiple of the
+--     @alignment@ member of the
+--     'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'
+--     structure returned from a call to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     with @image@ and the correct @planeAspect@ for this plane in the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+--     structure attached to the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkImageMemoryRequirementsInfo2'’s
+--     @pNext@ chain
+--
+-- -   If the @pNext@ chain includes an instance of the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--     structure, the difference of the size of @memory@ and @memoryOffset@
+--     /must/ be greater than or equal to the @size@ member of the
+--     'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'
+--     structure returned from a call to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     with the same @image@ and the correct @planeAspect@ for this plane
+--     in the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+--     structure attached to the
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkImageMemoryRequirementsInfo2'’s
+--     @pNext@ chain
+--
+-- -   If @image@ requires a dedicated allocation (as reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2'
+--     in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedRequirements'::requiresDedicatedAllocation
+--     for @image@), @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@image@
+--     equal to @image@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the @VkMemoryAllocateInfo@ provided when @memory@ was allocated
+--     included an instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--     in its @pNext@ chain, and
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@image@
+--     was not @VK_NULL_HANDLE@, then @image@ /must/ equal
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'::@image@
+--     and @memoryOffset@ /must/ be zero.
+--
+-- -   If @image@ was created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationImageCreateInfoNV'::@dedicatedAllocation@
+--     equal to @VK_TRUE@, @memory@ /must/ have been created with
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV'::@image@
+--     equal to @image@ and @memoryOffset@ /must/ be zero
+--
+-- -   If the @pNext@ chain includes
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
+--     all instances of @memory@ specified by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo'::@pDeviceIndices@
+--     /must/ have been allocated
+--
+-- -   If the @pNext@ chain includes
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
+--     and
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo'::@splitInstanceBindRegionCount@
+--     is not zero, then @image@ /must/ have been created with the
+--     @VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT@ bit set
+--
+-- -   If the @pNext@ chain includes
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
+--     all elements of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@
+--     /must/ be valid rectangles contained within the dimensions of
+--     @image@
+--
+-- -   If the @pNext@ chain includes
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
+--     the union of the areas of all elements of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo'::@pSplitInstanceBindRegions@
+--     that correspond to the same instance of @image@ /must/ cover the
+--     entire image.
+--
+-- -   If @image@ was created with a valid swapchain handle in
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkImageSwapchainCreateInfoKHR'::@swapchain@,
+--     then the @pNext@ chain /must/ include a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkBindImageMemorySwapchainInfoKHR'
+--
+-- -   If the @pNext@ chain includes an instance of
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkBindImageMemorySwapchainInfoKHR',
+--     @memory@ /must/ be 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   If the @pNext@ chain does not include an instance of
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkBindImageMemorySwapchainInfoKHR',
+--     @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_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
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkBindImageMemorySwapchainInfoKHR',
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   Both of @image@, and @memory@ that are valid handles /must/ have
+--     been created, allocated, or retrieved from the same @VkDevice@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory', @VkDeviceSize@,
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkBindImageMemory2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_bind_memory2.vkBindImageMemory2KHR'
 data VkBindImageMemoryInfo = VkBindImageMemoryInfo
-  { -- No documentation found for Nested "VkBindImageMemoryInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkImage"
+  , -- | @image@ is the image to be attached to memory.
   vkImage :: VkImage
-  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkMemory"
+  , -- | @memory@ is a @VkDeviceMemory@ object describing the device memory to
+  -- attach.
   vkMemory :: VkDeviceMemory
-  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkMemoryOffset"
+  , -- | @memoryOffset@ is the start offset of the region of @memory@ which is to
+  -- be bound to the image. The number of bytes returned in the
+  -- @VkMemoryRequirements@::@size@ member in @memory@, starting from
+  -- @memoryOffset@ bytes, will be bound to the specified image.
   vkMemoryOffset :: VkDeviceSize
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_dedicated_allocation.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_dedicated_allocation.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_dedicated_allocation.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_dedicated_allocation.hs
@@ -38,14 +38,90 @@
 pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = VkStructureType 1000127001
 -- | VkMemoryDedicatedRequirements - Structure describing dedicated
 -- allocation requirements of buffer and image resources
+--
+-- = Description
+--
+-- If the @VkMemoryDedicatedRequirements@ structure is included in the
+-- @pNext@ chain of the
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkMemoryRequirements2'
+-- structure passed as the @pMemoryRequirements@ parameter of a
+-- @vkGetBufferMemoryRequirements2@ call, @requiresDedicatedAllocation@
+-- /may/ be @VK_TRUE@ under one of the following conditions:
+--
+-- -   The @pNext@ chain of @VkBufferCreateInfo@ for the call to
+--     @vkCreateBuffer@ used to create the buffer being queried contained
+--     an instance of @VkExternalMemoryBufferCreateInfo@, and any of the
+--     handle types specified in
+--     @VkExternalMemoryBufferCreateInfo@::@handleTypes@ requires dedicated
+--     allocation, as reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferProperties'
+--     in
+--     @VkExternalBufferProperties@::@externalMemoryProperties@::@externalMemoryFeatures@,
+--     the @requiresDedicatedAllocation@ field will be set to @VK_TRUE@.
+--
+-- In all other cases, @requiresDedicatedAllocation@ /must/ be set to
+-- @VK_FALSE@ by the implementation whenever a
+-- @VkMemoryDedicatedRequirements@ structure is included in the @pNext@
+-- chain of the @VkMemoryRequirements2@ structure passed to a call to
+-- @vkGetBufferMemoryRequirements2@.
+--
+-- If the @VkMemoryDedicatedRequirements@ structure is included in the
+-- @pNext@ chain of the @VkMemoryRequirements2@ structure passed as the
+-- @pMemoryRequirements@ parameter of a @vkGetBufferMemoryRequirements2@
+-- call and @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ was set in
+-- @VkBufferCreateInfo@::@flags@ when @buffer@ was created then the
+-- implementation /must/ set both @prefersDedicatedAllocation@ and
+-- @requiresDedicatedAllocation@ to @VK_FALSE@.
+--
+-- If the @VkMemoryDedicatedRequirements@ structure is included in the
+-- @pNext@ chain of the @VkMemoryRequirements2@ structure passed as the
+-- @pMemoryRequirements@ parameter of a @vkGetImageMemoryRequirements2@
+-- call, @requiresDedicatedAllocation@ /may/ be @VK_TRUE@ under one of the
+-- following conditions:
+--
+-- -   The @pNext@ chain of @VkImageCreateInfo@ for the call to
+--     @vkCreateImage@ used to create the image being queried contained an
+--     instance of @VkExternalMemoryImageCreateInfo@, and any of the handle
+--     types specified in @VkExternalMemoryImageCreateInfo@::@handleTypes@
+--     requires dedicated allocation, as reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'
+--     in
+--     @VkExternalImageFormatProperties@::@externalMemoryProperties@::@externalMemoryFeatures@,
+--     the @requiresDedicatedAllocation@ field will be set to @VK_TRUE@.
+--
+-- In all other cases, @requiresDedicatedAllocation@ /must/ be set to
+-- @VK_FALSE@ by the implementation whenever a
+-- @VkMemoryDedicatedRequirements@ structure is included in the @pNext@
+-- chain of the @VkMemoryRequirements2@ structure passed to a call to
+-- @vkGetImageMemoryRequirements2@.
+--
+-- If the @VkMemoryDedicatedRequirements@ structure is included in the
+-- @pNext@ chain of the @VkMemoryRequirements2@ structure passed as the
+-- @pMemoryRequirements@ parameter of a @vkGetImageMemoryRequirements2@
+-- call and @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ was set in
+-- @VkImageCreateInfo@::@flags@ when @image@ was created then the
+-- implementation /must/ set both @prefersDedicatedAllocation@ and
+-- @requiresDedicatedAllocation@ to @VK_FALSE@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS@
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkMemoryDedicatedRequirements = VkMemoryDedicatedRequirements
-  { -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkPrefersDedicatedAllocation"
+  , -- | @prefersDedicatedAllocation@ specifies that the implementation would
+  -- prefer a dedicated allocation for this resource. The application is
+  -- still free to suballocate the resource but it /may/ get better
+  -- performance if a dedicated allocation is used.
   vkPrefersDedicatedAllocation :: VkBool32
-  , -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkRequiresDedicatedAllocation"
+  , -- | @requiresDedicatedAllocation@ specifies that a dedicated allocation is
+  -- required for this resource.
   vkRequiresDedicatedAllocation :: VkBool32
   }
   deriving (Eq, Show)
@@ -63,14 +139,105 @@
                 *> poke (ptr `plusPtr` 20) (vkRequiresDedicatedAllocation (poked :: VkMemoryDedicatedRequirements))
 -- | VkMemoryDedicatedAllocateInfo - Specify a dedicated memory allocation
 -- resource
+--
+-- == Valid Usage
+--
+-- -   At least one of @image@ and @buffer@ /must/ be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   If @image@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @VkMemoryAllocateInfo@::@allocationSize@ /must/ equal the
+--     @VkMemoryRequirements@::@size@ of the image
+--
+-- -   If @image@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @image@ /must/ have been created without
+--     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@ set in
+--     @VkImageCreateInfo@::@flags@
+--
+-- -   If @buffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @VkMemoryAllocateInfo@::@allocationSize@ /must/ equal the
+--     @VkMemoryRequirements@::@size@ of the buffer
+--
+-- -   If @buffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @buffer@ /must/
+--     have been created without @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ set
+--     in 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo'::@flags@
+--
+-- -   If @image@ is not @VK_NULL_HANDLE@ and
+--     'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo' defines a
+--     memory import operation with handle type
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@, or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@, and the
+--     external handle was created by the Vulkan API, then 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 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--     and 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo' defines a
+--     memory import operation with handle type
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@, or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@, and the
+--     external handle was created by the Vulkan API, then the memory being
+--     imported /must/ also be a dedicated buffer allocation and @buffer@
+--     must be identical to the buffer associated with the imported memory.
+--
+-- -   If @image@ is not @VK_NULL_HANDLE@ and
+--     'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo' defines a
+--     memory import operation with handle type
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT@, 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 @VK_NULL_HANDLE@ and
+--     'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo' defines a
+--     memory import operation with handle type
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT@, the memory being
+--     imported /must/ also be a dedicated buffer allocation and @buffer@
+--     must be identical to the buffer associated with the imported memory.
+--
+-- -   If @image@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @image@ /must/ not have been created with
+--     @VK_IMAGE_CREATE_DISJOINT_BIT@ set in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@flags@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO@
+--
+-- -   If @image@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   If @buffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @buffer@ /must/
+--     be a valid @VkBuffer@ handle
+--
+-- -   Both of @buffer@, and @image@ that are valid handles /must/ have
+--     been created, allocated, or retrieved from the same @VkDevice@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkMemoryDedicatedAllocateInfo = VkMemoryDedicatedAllocateInfo
-  { -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkImage"
+  , -- | @image@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or a handle
+  -- of an image which this memory will be bound to.
   vkImage :: VkImage
-  , -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkBuffer"
+  , -- | @buffer@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or a
+  -- handle of a buffer which this memory will be bound to.
   vkBuffer :: VkBuffer
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_descriptor_update_template.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_descriptor_update_template.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_descriptor_update_template.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_descriptor_update_template.hs
@@ -91,6 +91,10 @@
 
 -- | VkDescriptorUpdateTemplateType - Indicates the valid usage of the
 -- descriptor update template
+--
+-- = See Also
+--
+-- 'VkDescriptorUpdateTemplateCreateInfo'
 newtype VkDescriptorUpdateTemplateType = VkDescriptorUpdateTemplateType Int32
   deriving (Eq, Ord, Storable)
 
@@ -113,12 +117,22 @@
                         )
                     )
 
--- No documentation found for Nested "VkDescriptorUpdateTemplateType" "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"
+-- | @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET@ specifies that the
+-- descriptor update template will be used for descriptor set updates only.
 pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET :: VkDescriptorUpdateTemplateType
 pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = VkDescriptorUpdateTemplateType 0
 -- ** VkDescriptorUpdateTemplateCreateFlags
 
 -- | VkDescriptorUpdateTemplateCreateFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkDescriptorUpdateTemplateCreateFlags@ is a bitmask type for setting a
+-- mask, but is currently reserved for future use.
+--
+-- = See Also
+--
+-- 'VkDescriptorUpdateTemplateCreateInfo'
 newtype VkDescriptorUpdateTemplateCreateFlags = VkDescriptorUpdateTemplateCreateFlags VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -147,30 +161,315 @@
 data VkDescriptorUpdateTemplate_T
 -- | VkDescriptorUpdateTemplate - Opaque handle to a descriptor update
 -- template
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetWithTemplateKHR',
+-- 'vkCreateDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR',
+-- 'vkDestroyDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkDestroyDescriptorUpdateTemplateKHR',
+-- 'vkUpdateDescriptorSetWithTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplateKHR'
 type VkDescriptorUpdateTemplate = Ptr VkDescriptorUpdateTemplate_T
 -- | vkCreateDescriptorUpdateTemplate - Create a new descriptor update
 -- template
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the descriptor update
+--     template.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkDescriptorUpdateTemplateCreateInfo' structure specifying the set
+--     of descriptors to update with a single call to
+--     'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetWithTemplateKHR'
+--     or 'vkUpdateDescriptorSetWithTemplate'.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- -   @pDescriptorUpdateTemplate@ points to a @VkDescriptorUpdateTemplate@
+--     handle in which the resulting descriptor update template object is
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDescriptorUpdateTemplateCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pDescriptorUpdateTemplate@ /must/ be a valid pointer to a
+--     @VkDescriptorUpdateTemplate@ handle
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDescriptorUpdateTemplate', 'VkDescriptorUpdateTemplateCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkCreateDescriptorUpdateTemplate" vkCreateDescriptorUpdateTemplate :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkDescriptorUpdateTemplateCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pDescriptorUpdateTemplate" ::: Ptr VkDescriptorUpdateTemplate) -> IO VkResult
 -- | vkDestroyDescriptorUpdateTemplate - Destroy a descriptor update template
 -- object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that has been used to create the
+--     descriptor update template
+--
+-- -   @descriptorUpdateTemplate@ is the descriptor update template to
+--     destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- == Valid Usage
+--
+-- -   If @VkAllocationCallbacks@ were provided when @descriptorSetLayout@
+--     was created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when
+--     @descriptorSetLayout@ was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @descriptorUpdateTemplate@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @descriptorUpdateTemplate@ /must/ be a valid
+--     @VkDescriptorUpdateTemplate@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @descriptorUpdateTemplate@ is a valid handle, it /must/ have been
+--     created, allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorUpdateTemplate@ /must/ be externally
+--     synchronized
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkDestroyDescriptorUpdateTemplate" vkDestroyDescriptorUpdateTemplate :: ("device" ::: VkDevice) -> ("descriptorUpdateTemplate" ::: VkDescriptorUpdateTemplate) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
 -- | vkUpdateDescriptorSetWithTemplate - Update the contents of a descriptor
 -- set object using an update template
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that updates the descriptor sets.
+--
+-- -   @descriptorSet@ is the descriptor set to update
+--
+-- -   @descriptorUpdateTemplate@ is the @VkDescriptorUpdateTemplate@ which
+--     specifies the update mapping between @pData@ and the descriptor set
+--     to update.
+--
+-- -   @pData@ is a pointer to memory which contains one or more structures
+--     of 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorImageInfo',
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo', or
+--     'Graphics.Vulkan.Core10.BufferView.VkBufferView' used to write the
+--     descriptors.
+--
+-- == Valid Usage
+--
+-- -   @pData@ /must/ be a valid pointer to a memory that contains one or
+--     more valid instances of
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorImageInfo',
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo', or
+--     'Graphics.Vulkan.Core10.BufferView.VkBufferView' in a layout defined
+--     by @descriptorUpdateTemplate@ when it was created with
+--     'vkCreateDescriptorUpdateTemplate'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @descriptorSet@ /must/ be a valid @VkDescriptorSet@ handle
+--
+-- -   @descriptorUpdateTemplate@ /must/ be a valid
+--     @VkDescriptorUpdateTemplate@ handle
+--
+-- -   @descriptorUpdateTemplate@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorSet@ /must/ be externally synchronized
+--
+-- __API example.__
+--
+-- > struct AppBufferView {
+-- >     VkBufferView bufferView;
+-- >     uint32_t     applicationRelatedInformation;
+-- > };
+-- >
+-- > struct AppDataStructure
+-- > {
+-- >     VkDescriptorImageInfo  imageInfo;          // a single image info
+-- >     VkDescriptorBufferInfo bufferInfoArray[3]; // 3 buffer infos in an array
+-- >     AppBufferView          bufferView[2];      // An application defined structure containing a bufferView
+-- >     // ... some more application related data
+-- > };
+-- >
+-- > const VkDescriptorUpdateTemplateEntry descriptorUpdateTemplateEntries[] =
+-- > {
+-- >     // binding to a single image descriptor
+-- >     {
+-- >         0,                                           // binding
+-- >         0,                                           // dstArrayElement
+-- >         1,                                           // descriptorCount
+-- >         VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER,   // descriptorType
+-- >         offsetof(AppDataStructure, imageInfo),       // offset
+-- >         0                                            // stride is not required if descriptorCount is 1.
+-- >     },
+-- >
+-- >     // binding to an array of buffer descriptors
+-- >     {
+-- >         0,                                           // binding
+-- >         0,                                           // dstArrayElement
+-- >         3,                                           // descriptorCount
+-- >         VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER,           // descriptorType
+-- >         offsetof(AppDataStructure, bufferInfoArray), // offset
+-- >         sizeof(VkDescriptorBufferInfo)               // stride, descriptor buffer infos are compact
+-- >     },
+-- >
+-- >     // binding to an array of buffer views
+-- >     {
+-- >         0,                                           // binding
+-- >         3,                                           // dstArrayElement
+-- >         1,                                           // descriptorCount
+-- >         VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER,     // descriptorType
+-- >         offsetof(AppDataStructure, bufferView),      // offset
+-- >         sizeof(AppBufferView)                        // stride, bufferViews do not have to be compact
+-- >     },
+-- > };
+-- >
+-- > // create an descriptor update template for descriptor set updates
+-- > const VkDescriptorUpdateTemplateCreateInfo createInfo =
+-- > {
+-- >     VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO,  // sType
+-- >     NULL,                                                          // pNext
+-- >     0,                                                             // flags
+-- >     3,                                                             // descriptorUpdateEntryCount
+-- >     descriptorUpdateTemplateEntries,                               // pDescriptorUpdateEntries
+-- >     VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET,         // templateType
+-- >     myLayout,                                                      // descriptorSetLayout
+-- >     0,                                                             // pipelineBindPoint, ignored by given templateType
+-- >     0,                                                             // pipelineLayout, ignored by given templateType
+-- >     0,                                                             // set, ignored by given templateType
+-- > };
+-- >
+-- > VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
+-- > myResult = vkCreateDescriptorUpdateTemplate(
+-- >     myDevice,
+-- >     &createInfo,
+-- >     NULL,
+-- >     &myDescriptorUpdateTemplate);
+-- > }
+-- >
+-- >
+-- > AppDataStructure appData;
+-- >
+-- > // fill appData here or cache it in your engine
+-- > vkUpdateDescriptorSetWithTemplate(myDevice, myDescriptorSet, myDescriptorUpdateTemplate, &appData);
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSet',
+-- 'VkDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkUpdateDescriptorSetWithTemplate" vkUpdateDescriptorSetWithTemplate :: ("device" ::: VkDevice) -> ("descriptorSet" ::: VkDescriptorSet) -> ("descriptorUpdateTemplate" ::: VkDescriptorUpdateTemplate) -> ("pData" ::: Ptr ()) -> IO ()
 -- | VkDescriptorUpdateTemplateEntry - Describes a single descriptor update
 -- of the descriptor update template
+--
+-- = Members
+--
+-- -   @dstBinding@ is the descriptor binding to update when using this
+--     descriptor update template.
+--
+-- -   @dstArrayElement@ is the starting element in the array belonging to
+--     @dstBinding@.
+--
+-- -   @descriptorCount@ is the number of descriptors to update. If
+--     @descriptorCount@ is greater than the number of remaining array
+--     elements in the destination binding, those affect consecutive
+--     bindings in a manner similar to
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet' above.
+--
+-- -   @descriptorType@ is a
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorType' specifying
+--     the type of the descriptor.
+--
+-- -   @offset@ is the offset in bytes of the first binding in the raw data
+--     structure.
+--
+-- -   @stride@ is the stride in bytes between two consecutive array
+--     elements of the descriptor update informations in the raw data
+--     structure. The actual pointer ptr for each array element j of update
+--     entry i is computed using the following formula:
+--
+--     >     const char *ptr = (const char *)pData + pDescriptorUpdateEntries[i].offset + j * pDescriptorUpdateEntries[i].stride
+--
+--     The stride is useful in case the bindings are stored in structs
+--     along with other data.
+--
+-- == Valid Usage
+--
+-- -   @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
+--     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
+--     [{html_spec_relative}#descriptorsets-updates-consecutive](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-updates-consecutive)
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @descriptorType@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorType' value
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorType',
+-- 'VkDescriptorUpdateTemplateCreateInfo'
 data VkDescriptorUpdateTemplateEntry = VkDescriptorUpdateTemplateEntry
-  { -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDstBinding"
+  { -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "dstBinding"
   vkDstBinding :: Word32
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDstArrayElement"
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "dstArrayElement"
   vkDstArrayElement :: Word32
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDescriptorCount"
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "descriptorCount"
   vkDescriptorCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDescriptorType"
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "descriptorType"
   vkDescriptorType :: VkDescriptorType
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkOffset"
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "offset"
   vkOffset :: CSize
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkStride"
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "stride"
   vkStride :: CSize
   }
   deriving (Eq, Show)
@@ -192,26 +491,111 @@
                 *> poke (ptr `plusPtr` 24) (vkStride (poked :: VkDescriptorUpdateTemplateEntry))
 -- | VkDescriptorUpdateTemplateCreateInfo - Structure specifying parameters
 -- of a newly created descriptor update template
+--
+-- == Valid Usage
+--
+-- -   If @templateType@ is
+--     @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET@,
+--     @descriptorSetLayout@ /must/ be a valid @VkDescriptorSetLayout@
+--     handle
+--
+-- -   If @templateType@ is
+--     @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR@,
+--     @pipelineBindPoint@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
+--
+-- -   If @templateType@ is
+--     @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR@,
+--     @pipelineLayout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   If @templateType@ is
+--     @VK_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
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @pDescriptorUpdateEntries@ /must/ be a valid pointer to an array of
+--     @descriptorUpdateEntryCount@ valid @VkDescriptorUpdateTemplateEntry@
+--     structures
+--
+-- -   @templateType@ /must/ be a valid 'VkDescriptorUpdateTemplateType'
+--     value
+--
+-- -   If @descriptorSetLayout@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @descriptorSetLayout@ /must/ be a valid @VkDescriptorSetLayout@
+--     handle
+--
+-- -   @descriptorUpdateEntryCount@ /must/ be greater than @0@
+--
+-- -   Both of @descriptorSetLayout@, and @pipelineLayout@ that are valid
+--     handles /must/ have been created, allocated, or retrieved from the
+--     same @VkDevice@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.PipelineLayout.VkDescriptorSetLayout',
+-- 'VkDescriptorUpdateTemplateCreateFlags',
+-- 'VkDescriptorUpdateTemplateEntry', 'VkDescriptorUpdateTemplateType',
+-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateDescriptorUpdateTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR'
 data VkDescriptorUpdateTemplateCreateInfo = VkDescriptorUpdateTemplateCreateInfo
-  { -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkDescriptorUpdateTemplateCreateFlags
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkDescriptorUpdateEntryCount"
+  , -- | @descriptorUpdateEntryCount@ is the number of elements in the
+  -- @pDescriptorUpdateEntries@ array.
   vkDescriptorUpdateEntryCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPDescriptorUpdateEntries"
+  , -- | @pDescriptorUpdateEntries@ is a pointer to an array of
+  -- 'VkDescriptorUpdateTemplateEntry' structures describing the descriptors
+  -- to be updated by the descriptor update template.
   vkPDescriptorUpdateEntries :: Ptr VkDescriptorUpdateTemplateEntry
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkTemplateType"
+  , -- | @templateType@ Specifies the type of the descriptor update template. If
+  -- set to @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET@ it /can/ only
+  -- be used to update descriptor sets with a fixed @descriptorSetLayout@. If
+  -- set to @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR@ it
+  -- /can/ only be used to push descriptor sets using the provided
+  -- @pipelineBindPoint@, @pipelineLayout@, and @set@ number.
   vkTemplateType :: VkDescriptorUpdateTemplateType
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkDescriptorSetLayout"
+  , -- | @descriptorSetLayout@ is the descriptor set layout the parameter update
+  -- template will be used with. All descriptor sets which are going to be
+  -- updated through the newly created descriptor update template /must/ be
+  -- created with this layout. @descriptorSetLayout@ is the descriptor set
+  -- layout used to build the descriptor update template. All descriptor sets
+  -- which are going to be updated through the newly created descriptor
+  -- update template /must/ be created with a layout that matches (is the
+  -- same as, or defined identically to) this layout. This parameter is
+  -- ignored if @templateType@ is not
+  -- @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET@.
   vkDescriptorSetLayout :: VkDescriptorSetLayout
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPipelineBindPoint"
+  , -- | @pipelineBindPoint@ is a
+  -- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' indicating whether the
+  -- descriptors will be used by graphics pipelines or compute pipelines.
+  -- This parameter is ignored if @templateType@ is not
+  -- @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR@
   vkPipelineBindPoint :: VkPipelineBindPoint
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPipelineLayout"
+  , -- | @pipelineLayout@ is a @VkPipelineLayout@ object used to program the
+  -- bindings. This parameter is ignored if @templateType@ is not
+  -- @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR@
   vkPipelineLayout :: VkPipelineLayout
-  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkSet"
+  , -- | @set@ is the set number of the descriptor set in the pipeline layout
+  -- that will be updated. This parameter is ignored if @templateType@ is not
+  -- @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR@
   vkSet :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group.hs
@@ -93,6 +93,46 @@
 
 -- | VkPeerMemoryFeatureFlagBits - Bitmask specifying supported peer memory
 -- features
+--
+-- = Description
+--
+-- -   @VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT@ specifies that the memory
+--     /can/ be accessed as the source of a @vkCmdCopyBuffer@,
+--     @vkCmdCopyImage@, @vkCmdCopyBufferToImage@, or
+--     @vkCmdCopyImageToBuffer@ command.
+--
+-- -   @VK_PEER_MEMORY_FEATURE_COPY_DST_BIT@ specifies that the memory
+--     /can/ be accessed as the destination of a @vkCmdCopyBuffer@,
+--     @vkCmdCopyImage@, @vkCmdCopyBufferToImage@, or
+--     @vkCmdCopyImageToBuffer@ command.
+--
+-- -   @VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT@ specifies that the memory
+--     /can/ be read as any memory access type.
+--
+-- -   @VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT@ specifies that the memory
+--     /can/ be written as any memory access type. Shader atomics are
+--     considered to be writes.
+--
+-- __Note__
+--
+-- The peer memory features of a memory heap also apply to any accesses
+-- that /may/ be performed during [image layout
+-- transitions](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-image-layout-transitions).
+--
+-- @VK_PEER_MEMORY_FEATURE_COPY_DST_BIT@ /must/ be supported for all host
+-- local heaps and for at least one device local heap.
+--
+-- If a device does not support a peer memory feature, it is still valid to
+-- use a resource that includes both local and peer memory bindings with
+-- the corresponding access type as long as only the local bindings are
+-- actually accessed. For example, an application doing split-frame
+-- rendering would use framebuffer attachments that include both local and
+-- peer memory bindings, but would scissor the rendering to only update
+-- local memory.
+--
+-- = See Also
+--
+-- 'VkPeerMemoryFeatureFlags'
 newtype VkPeerMemoryFeatureFlagBits = VkPeerMemoryFeatureFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -135,6 +175,10 @@
 
 -- | VkMemoryAllocateFlagBits - Bitmask specifying flags for a device memory
 -- allocation
+--
+-- = See Also
+--
+-- 'VkMemoryAllocateFlags'
 newtype VkMemoryAllocateFlagBits = VkMemoryAllocateFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -152,7 +196,8 @@
                         )
                     )
 
--- No documentation found for Nested "VkMemoryAllocateFlagBits" "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"
+-- | @VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT@ specifies that memory will be
+-- allocated for the devices in 'VkMemoryAllocateFlagsInfo'::@deviceMask@.
 pattern VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT :: VkMemoryAllocateFlagBits
 pattern VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = VkMemoryAllocateFlagBits 0x00000001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"
@@ -176,26 +221,275 @@
 -- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_DISPATCH_BASE"
 pattern VK_PIPELINE_CREATE_DISPATCH_BASE :: VkPipelineCreateFlagBits
 pattern VK_PIPELINE_CREATE_DISPATCH_BASE = VkPipelineCreateFlagBits 0x00000010
--- No documentation found for Nested "VkDependencyFlagBits" "VK_DEPENDENCY_DEVICE_GROUP_BIT"
+-- | @VK_DEPENDENCY_DEVICE_GROUP_BIT@ specifies that dependencies are
+-- [non-device-local
+-- dependency](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-device-local-dependencies).
 pattern VK_DEPENDENCY_DEVICE_GROUP_BIT :: VkDependencyFlagBits
 pattern VK_DEPENDENCY_DEVICE_GROUP_BIT = VkDependencyFlagBits 0x00000004
 -- | vkGetDeviceGroupPeerMemoryFeatures - Query supported peer memory
 -- features of a device
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @heapIndex@ is the index of the memory heap from which the memory is
+--     allocated.
+--
+-- -   @localDeviceIndex@ is the device index of the physical device that
+--     performs the memory access.
+--
+-- -   @remoteDeviceIndex@ is the device index of the physical device that
+--     the memory is allocated for.
+--
+-- -   @pPeerMemoryFeatures@ is a pointer to a bitmask of
+--     'VkPeerMemoryFeatureFlagBits' indicating which types of memory
+--     accesses are supported for the combination of heap, local, and
+--     remote devices.
+--
+-- == Valid Usage
+--
+-- -   @heapIndex@ /must/ be less than @memoryHeapCount@
+--
+-- -   @localDeviceIndex@ /must/ be a valid device index
+--
+-- -   @remoteDeviceIndex@ /must/ be a valid device index
+--
+-- -   @localDeviceIndex@ /must/ not equal remoteDeviceIndex
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pPeerMemoryFeatures@ /must/ be a valid pointer to a
+--     'VkPeerMemoryFeatureFlags' value
+--
+-- -   @pPeerMemoryFeatures@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkPeerMemoryFeatureFlags'
 foreign import ccall "vkGetDeviceGroupPeerMemoryFeatures" vkGetDeviceGroupPeerMemoryFeatures :: ("device" ::: VkDevice) -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> ("pPeerMemoryFeatures" ::: Ptr VkPeerMemoryFeatureFlags) -> IO ()
 -- | vkCmdSetDeviceMask - Modify device mask of a command buffer
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is command buffer whose current device mask is
+--     modified.
+--
+-- -   @deviceMask@ is the new value of the current device mask.
+--
+-- = Description
+--
+-- @deviceMask@ is used to filter out subsequent commands from executing on
+-- all physical devices whose bit indices are not set in the mask.
+--
+-- == Valid Usage
+--
+-- -   @deviceMask@ /must/ be a valid device mask value
+--
+-- -   @deviceMask@ /must/ not be zero
+--
+-- -   @deviceMask@ /must/ not include any set bits that were not in the
+--     'VkDeviceGroupCommandBufferBeginInfo'::@deviceMask@ value when the
+--     command buffer began recording.
+--
+-- -   If @vkCmdSetDeviceMask@ is called inside a render pass instance,
+--     @deviceMask@ /must/ not include any set bits that were not in the
+--     'VkDeviceGroupRenderPassBeginInfo'::@deviceMask@ value when the
+--     render pass instance began recording.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics, compute, or transfer operations
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Transfer                                                                                              |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
 foreign import ccall "vkCmdSetDeviceMask" vkCmdSetDeviceMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("deviceMask" ::: Word32) -> IO ()
 -- | vkCmdDispatchBase - Dispatch compute work items
+--
+-- = Parameters
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @baseGroupX@ is the start value for the X component of
+--     @WorkgroupId@.
+--
+-- -   @baseGroupY@ is the start value for the Y component of
+--     @WorkgroupId@.
+--
+-- -   @baseGroupZ@ is the start value for the Z component of
+--     @WorkgroupId@.
+--
+-- -   @groupCountX@ is the number of local workgroups to dispatch in the X
+--     dimension.
+--
+-- -   @groupCountY@ is the number of local workgroups to dispatch in the Y
+--     dimension.
+--
+-- -   @groupCountZ@ is the number of local workgroups to dispatch in the Z
+--     dimension.
+--
+-- = Description
+--
+-- When the command is executed, a global workgroup consisting of
+-- groupCountX × groupCountY × groupCountZ local workgroups is assembled,
+-- with @WorkgroupId@ values ranging from [baseGroup, baseGroup +
+-- groupCount) in each component.
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDispatch' is
+-- equivalent to
+-- vkCmdDispatchBase(0,0,0,groupCountX,groupCountY,groupCountZ).
+--
+-- == Valid Usage
+--
+-- -   All valid usage rules from
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDispatch' apply
+--
+-- -   @baseGroupX@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0]
+--
+-- -   @baseGroupX@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1]
+--
+-- -   @baseGroupZ@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[2]
+--
+-- -   @groupCountX@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[0] minus
+--     @baseGroupX@
+--
+-- -   @groupCountY@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxComputeWorkGroupCount@[1] minus
+--     @baseGroupY@
+--
+-- -   @groupCountZ@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@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
+--     @VK_PIPELINE_CREATE_DISPATCH_BASE@ flag.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
+--
+-- -   The @VkCommandPool@ 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 @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Command Properties
+--
+-- \'
+--
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Outside                                                                                                    | Compute                                                                                               |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
 foreign import ccall "vkCmdDispatchBase" vkCmdDispatchBase :: ("commandBuffer" ::: VkCommandBuffer) -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()
 -- | VkMemoryAllocateFlagsInfo - Structure controlling how many instances of
 -- memory will be allocated
+--
+-- = Description
+--
+-- If @VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT@ is not set, the number of
+-- instances allocated depends on whether
+-- @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ is set in the memory heap. If
+-- @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ is set, then memory is allocated for
+-- every physical device in the logical device (as if @deviceMask@ has bits
+-- set for all device indices). If @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ is
+-- not set, then a single instance of memory is allocated (as if
+-- @deviceMask@ is set to one).
+--
+-- On some implementations, allocations from a multi-instance heap /may/
+-- consume memory on all physical devices even if the @deviceMask@ excludes
+-- some devices. If
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkPhysicalDeviceGroupProperties'::@subsetAllocation@
+-- is @VK_TRUE@, then memory is only consumed for the devices in the device
+-- mask.
+--
+-- __Note__
+--
+-- In practice, most allocations on a multi-instance heap will be allocated
+-- across all physical devices. Unicast allocation support is an optional
+-- optimization for a minority of allocations.
+--
+-- == Valid Usage
+--
+-- -   If @VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT@ is set, @deviceMask@ /must/
+--     be a valid device mask.
+--
+-- -   If @VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT@ is set, @deviceMask@ /must/
+--     not be zero
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO@
+--
+-- -   @flags@ /must/ be a valid combination of 'VkMemoryAllocateFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'VkMemoryAllocateFlags', 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkMemoryAllocateFlagsInfo = VkMemoryAllocateFlagsInfo
-  { -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkMemoryAllocateFlagBits' controlling the
+  -- allocation.
   vkFlags :: VkMemoryAllocateFlags
-  , -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkDeviceMask"
+  , -- | @deviceMask@ is a mask of physical devices in the logical device,
+  -- indicating that memory /must/ be allocated on each device in the mask,
+  -- if @VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT@ is set in @flags@.
   vkDeviceMask :: Word32
   }
   deriving (Eq, Show)
@@ -213,16 +507,70 @@
                 *> poke (ptr `plusPtr` 20) (vkDeviceMask (poked :: VkMemoryAllocateFlagsInfo))
 -- | VkDeviceGroupRenderPassBeginInfo - Set the initial device mask and
 -- render areas for a render pass instance
+--
+-- = Description
+--
+-- The @deviceMask@ serves several purposes. It is an upper bound on the
+-- set of physical devices that /can/ be used during the render pass
+-- instance, and the initial device mask when the render pass instance
+-- begins. Render pass attachment load, store, and resolve operations only
+-- apply to physical devices included in the device mask. Subpass
+-- dependencies only apply to the physical devices in the device mask.
+--
+-- If @deviceRenderAreaCount@ is not zero, then the elements of
+-- @pDeviceRenderAreas@ override the value of
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo'::@renderArea@,
+-- and provide a render area specific to each physical device. These render
+-- areas serve the same purpose as
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo'::@renderArea@,
+-- including controlling the region of attachments that are cleared by
+-- @VK_ATTACHMENT_LOAD_OP_CLEAR@ and that are resolved into resolve
+-- attachments.
+--
+-- If this structure is not present, the render pass instance’s device mask
+-- is the value of 'VkDeviceGroupCommandBufferBeginInfo'::@deviceMask@. If
+-- this structure is not present or if @deviceRenderAreaCount@ is zero,
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo'::@renderArea@
+-- is used for all physical devices.
+--
+-- == Valid Usage
+--
+-- -   @deviceMask@ /must/ be a valid device mask value
+--
+-- -   @deviceMask@ /must/ not be zero
+--
+-- -   @deviceMask@ /must/ be a subset of the command buffer’s initial
+--     device mask
+--
+-- -   @deviceRenderAreaCount@ /must/ either be zero or equal to the number
+--     of physical devices in the logical device.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO@
+--
+-- -   If @deviceRenderAreaCount@ is not @0@, @pDeviceRenderAreas@ /must/
+--     be a valid pointer to an array of @deviceRenderAreaCount@ @VkRect2D@
+--     structures
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceGroupRenderPassBeginInfo = VkDeviceGroupRenderPassBeginInfo
-  { -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkDeviceMask"
+  , -- | @deviceMask@ is the device mask for the render pass instance.
   vkDeviceMask :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkDeviceRenderAreaCount"
+  , -- | @deviceRenderAreaCount@ is the number of elements in the
+  -- @pDeviceRenderAreas@ array.
   vkDeviceRenderAreaCount :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkPDeviceRenderAreas"
+  , -- | @pDeviceRenderAreas@ is an array of structures of type
+  -- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D' defining the render area for
+  -- each physical device.
   vkPDeviceRenderAreas :: Ptr VkRect2D
   }
   deriving (Eq, Show)
@@ -242,12 +590,36 @@
                 *> poke (ptr `plusPtr` 24) (vkPDeviceRenderAreas (poked :: VkDeviceGroupRenderPassBeginInfo))
 -- | VkDeviceGroupCommandBufferBeginInfo - Set the initial device mask for a
 -- command buffer
+--
+-- = Description
+--
+-- The initial device mask also acts as an upper bound on the set of
+-- devices that /can/ ever be in the device mask in the command buffer.
+--
+-- If this structure is not present, the initial value of a command
+-- buffer’s device mask is set to include all physical devices in the
+-- logical device when the command buffer begins recording.
+--
+-- == Valid Usage
+--
+-- -   @deviceMask@ /must/ be a valid device mask value
+--
+-- -   @deviceMask@ /must/ not be zero
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceGroupCommandBufferBeginInfo = VkDeviceGroupCommandBufferBeginInfo
-  { -- No documentation found for Nested "VkDeviceGroupCommandBufferBeginInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupCommandBufferBeginInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupCommandBufferBeginInfo" "vkDeviceMask"
+  , -- | @deviceMask@ is the initial value of the command buffer’s device mask.
   vkDeviceMask :: Word32
   }
   deriving (Eq, Show)
@@ -263,22 +635,77 @@
                 *> poke (ptr `plusPtr` 16) (vkDeviceMask (poked :: VkDeviceGroupCommandBufferBeginInfo))
 -- | VkDeviceGroupSubmitInfo - Structure indicating which physical devices
 -- execute semaphore operations and command buffers
+--
+-- = Description
+--
+-- If this structure is not present, semaphore operations and command
+-- buffers execute on device index zero.
+--
+-- == Valid Usage
+--
+-- -   @waitSemaphoreCount@ /must/ equal
+--     'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@waitSemaphoreCount@
+--
+-- -   @commandBufferCount@ /must/ equal
+--     'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@commandBufferCount@
+--
+-- -   @signalSemaphoreCount@ /must/ equal
+--     'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@signalSemaphoreCount@
+--
+-- -   All elements of @pWaitSemaphoreDeviceIndices@ and
+--     @pSignalSemaphoreDeviceIndices@ /must/ be valid device indices
+--
+-- -   All elements of @pCommandBufferDeviceMasks@ /must/ be valid device
+--     masks
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO@
+--
+-- -   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@
+--     /must/ be a valid pointer to an array of @commandBufferCount@
+--     @uint32_t@ values
+--
+-- -   If @signalSemaphoreCount@ is not @0@,
+--     @pSignalSemaphoreDeviceIndices@ /must/ be a valid pointer to an
+--     array of @signalSemaphoreCount@ @uint32_t@ values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceGroupSubmitInfo = VkDeviceGroupSubmitInfo
-  { -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkWaitSemaphoreCount"
+  , -- | @waitSemaphoreCount@ is the number of elements in the
+  -- @pWaitSemaphoreDeviceIndices@ array.
   vkWaitSemaphoreCount :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPWaitSemaphoreDeviceIndices"
+  , -- | @pWaitSemaphoreDeviceIndices@ is an array of device indices indicating
+  -- which physical device executes the semaphore wait operation in the
+  -- corresponding element of
+  -- 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@pWaitSemaphores@.
   vkPWaitSemaphoreDeviceIndices :: Ptr Word32
-  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkCommandBufferCount"
+  , -- | @commandBufferCount@ is the number of elements in the
+  -- @pCommandBufferDeviceMasks@ array.
   vkCommandBufferCount :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPCommandBufferDeviceMasks"
+  , -- | @pCommandBufferDeviceMasks@ is an array of device masks indicating which
+  -- physical devices execute the command buffer in the corresponding element
+  -- of 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@pCommandBuffers@. A
+  -- physical device executes the command buffer if the corresponding bit is
+  -- set in the mask.
   vkPCommandBufferDeviceMasks :: Ptr Word32
-  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkSignalSemaphoreCount"
+  , -- | @signalSemaphoreCount@ is the number of elements in the
+  -- @pSignalSemaphoreDeviceIndices@ array.
   vkSignalSemaphoreCount :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPSignalSemaphoreDeviceIndices"
+  , -- | @pSignalSemaphoreDeviceIndices@ is an array of device indices indicating
+  -- which physical device executes the semaphore signal operation in the
+  -- corresponding element of
+  -- 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@pSignalSemaphores@.
   vkPSignalSemaphoreDeviceIndices :: Ptr Word32
   }
   deriving (Eq, Show)
@@ -304,14 +731,42 @@
                 *> poke (ptr `plusPtr` 56) (vkPSignalSemaphoreDeviceIndices (poked :: VkDeviceGroupSubmitInfo))
 -- | VkDeviceGroupBindSparseInfo - Structure indicating which instances are
 -- bound
+--
+-- = Description
+--
+-- These device indices apply to all buffer and image memory binds included
+-- in the batch that points to this structure. The semaphore waits and
+-- signals for the batch are executed only by the physical device specified
+-- by the @resourceDeviceIndex@.
+--
+-- If this structure is not present, @resourceDeviceIndex@ and
+-- @memoryDeviceIndex@ are assumed to be zero.
+--
+-- == Valid Usage
+--
+-- -   @resourceDeviceIndex@ and @memoryDeviceIndex@ /must/ both be valid
+--     device indices.
+--
+-- -   Each memory allocation bound in this batch /must/ have allocated an
+--     instance for @memoryDeviceIndex@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceGroupBindSparseInfo = VkDeviceGroupBindSparseInfo
-  { -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkResourceDeviceIndex"
+  , -- | @resourceDeviceIndex@ is a device index indicating which instance of the
+  -- resource is bound.
   vkResourceDeviceIndex :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkMemoryDeviceIndex"
+  , -- | @memoryDeviceIndex@ is a device index indicating which instance of the
+  -- memory the resource instance is bound to.
   vkMemoryDeviceIndex :: Word32
   }
   deriving (Eq, Show)
@@ -328,6 +783,25 @@
                 *> poke (ptr `plusPtr` 16) (vkResourceDeviceIndex (poked :: VkDeviceGroupBindSparseInfo))
                 *> poke (ptr `plusPtr` 20) (vkMemoryDeviceIndex (poked :: VkDeviceGroupBindSparseInfo))
 -- | VkPeerMemoryFeatureFlags - Bitmask of VkPeerMemoryFeatureFlagBits
+--
+-- = Description
+--
+-- @VkPeerMemoryFeatureFlags@ is a bitmask type for setting a mask of zero
+-- or more 'VkPeerMemoryFeatureFlagBits'.
+--
+-- = See Also
+--
+-- 'VkPeerMemoryFeatureFlagBits', 'vkGetDeviceGroupPeerMemoryFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.vkGetDeviceGroupPeerMemoryFeaturesKHR'
 type VkPeerMemoryFeatureFlags = VkPeerMemoryFeatureFlagBits
 -- | VkMemoryAllocateFlags - Bitmask of VkMemoryAllocateFlagBits
+--
+-- = Description
+--
+-- @VkMemoryAllocateFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkMemoryAllocateFlagBits'.
+--
+-- = See Also
+--
+-- 'VkMemoryAllocateFlagBits', 'VkMemoryAllocateFlagsInfo'
 type VkMemoryAllocateFlags = VkMemoryAllocateFlagBits
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.hs
@@ -46,14 +46,68 @@
 pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = VkImageCreateFlagBits 0x00000040
 -- | VkBindBufferMemoryDeviceGroupInfo - Structure specifying device within a
 -- group to bind to
+--
+-- = Members
+--
+-- If the @pNext@ list of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo'
+-- includes a @VkBindBufferMemoryDeviceGroupInfo@ structure, then that
+-- structure determines how memory is bound to buffers across multiple
+-- devices in a device group.
+--
+-- = Description
+--
+-- The @VkBindBufferMemoryDeviceGroupInfo@ structure is defined as:
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @deviceIndexCount@ is the number of elements in @pDeviceIndices@.
+--
+-- -   @pDeviceIndices@ is a pointer to an array of device indices.
+--
+-- If @deviceIndexCount@ is greater than zero, then on device index i the
+-- buffer is attached to the instance of @memory@ on the physical device
+-- with device index pDeviceIndices[i].
+--
+-- If @deviceIndexCount@ is zero and @memory@ comes from a memory heap with
+-- the @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ bit set, then it is as if
+-- @pDeviceIndices@ contains consecutive indices from zero to the number of
+-- physical devices in the logical device, minus one. In other words, by
+-- default each physical device attaches to its own instance of @memory@.
+--
+-- If @deviceIndexCount@ is zero and @memory@ comes from a memory heap
+-- without the @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ bit set, then it is as
+-- if @pDeviceIndices@ contains an array of zeros. In other words, by
+-- default each physical device attaches to instance zero.
+--
+-- == Valid Usage
+--
+-- -   @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
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO@
+--
+-- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
+--     pointer to an array of @deviceIndexCount@ @uint32_t@ values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkBindBufferMemoryDeviceGroupInfo = VkBindBufferMemoryDeviceGroupInfo
-  { -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkSType"
+  { -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkPNext"
+  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkDeviceIndexCount"
+  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "deviceIndexCount"
   vkDeviceIndexCount :: Word32
-  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkPDeviceIndices"
+  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "pDeviceIndices"
   vkPDeviceIndices :: Ptr Word32
   }
   deriving (Eq, Show)
@@ -71,18 +125,130 @@
                 *> poke (ptr `plusPtr` 24) (vkPDeviceIndices (poked :: VkBindBufferMemoryDeviceGroupInfo))
 -- | VkBindImageMemoryDeviceGroupInfo - Structure specifying device within a
 -- group to bind to
+--
+-- = Members
+--
+-- If the @pNext@ list of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindImageMemoryInfo'
+-- includes a @VkBindImageMemoryDeviceGroupInfo@ structure, then that
+-- structure determines how memory is bound to images across multiple
+-- devices in a device group.
+--
+-- = Description
+--
+-- The @VkBindImageMemoryDeviceGroupInfo@ structure is defined as:
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @deviceIndexCount@ is the number of elements in @pDeviceIndices@.
+--
+-- -   @pDeviceIndices@ is a pointer to an array of device indices.
+--
+-- -   @splitInstanceBindRegionCount@ is the number of elements in
+--     @pSplitInstanceBindRegions@.
+--
+-- -   @pSplitInstanceBindRegions@ is a pointer to an array of rectangles
+--     describing which regions of the image are attached to each instance
+--     of memory.
+--
+-- If @deviceIndexCount@ is greater than zero, then on device index i
+-- @image@ is attached to the instance of the memory on the physical device
+-- with device index pDeviceIndices[i].
+--
+-- Let N be the number of physical devices in the logical device. If
+-- @splitInstanceBindRegionCount@ is greater than zero, then
+-- @pSplitInstanceBindRegions@ is an array of N2 rectangles, where the
+-- image region specified by the rectangle at element i*N+j in resource
+-- instance i is bound to the memory instance j. The blocks of the memory
+-- that are bound to each sparse image block region use an offset in
+-- memory, relative to @memoryOffset@, computed as if the whole image were
+-- being bound to a contiguous range of memory. In other words,
+-- horizontally adjacent image blocks use consecutive blocks of memory,
+-- vertically adjacent image blocks are separated by the number of bytes
+-- per block multiplied by the width in blocks of @image@, and the block at
+-- (0,0) corresponds to memory starting at @memoryOffset@.
+--
+-- If @splitInstanceBindRegionCount@ and @deviceIndexCount@ are zero and
+-- the memory comes from a memory heap with the
+-- @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ bit set, then it is as if
+-- @pDeviceIndices@ contains consecutive indices from zero to the number of
+-- physical devices in the logical device, minus one. In other words, by
+-- default each physical device attaches to its own instance of the memory.
+--
+-- If @splitInstanceBindRegionCount@ and @deviceIndexCount@ are zero and
+-- the memory comes from a memory heap without the
+-- @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ bit set, then it is as if
+-- @pDeviceIndices@ contains an array of zeros. In other words, by default
+-- each physical device attaches to instance zero.
+--
+-- == Valid Usage
+--
+-- -   At least one of @deviceIndexCount@ and
+--     @splitInstanceBindRegionCount@ /must/ be zero.
+--
+-- -   @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.
+--
+-- -   @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
+--     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
+--     (@VkSparseImageFormatProperties@::@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
+--     (@VkSparseImageFormatProperties@::@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
+--
+-- -   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
+--     @VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO@
+--
+-- -   If @deviceIndexCount@ is not @0@, @pDeviceIndices@ /must/ be a valid
+--     pointer to an array of @deviceIndexCount@ @uint32_t@ values
+--
+-- -   If @splitInstanceBindRegionCount@ is not @0@,
+--     @pSplitInstanceBindRegions@ /must/ be a valid pointer to an array of
+--     @splitInstanceBindRegionCount@ @VkRect2D@ structures
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkBindImageMemoryDeviceGroupInfo = VkBindImageMemoryDeviceGroupInfo
-  { -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkSType"
+  { -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkPNext"
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkDeviceIndexCount"
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "deviceIndexCount"
   vkDeviceIndexCount :: Word32
-  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkPDeviceIndices"
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "pDeviceIndices"
   vkPDeviceIndices :: Ptr Word32
-  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkSplitInstanceBindRegionCount"
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "splitInstanceBindRegionCount"
   vkSplitInstanceBindRegionCount :: Word32
-  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkPSplitInstanceBindRegions"
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "pSplitInstanceBindRegions"
   vkPSplitInstanceBindRegions :: Ptr VkRect2D
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_creation.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_creation.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_creation.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_creation.hs
@@ -53,7 +53,11 @@
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"
 pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO :: VkStructureType
 pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO = VkStructureType 1000070001
--- No documentation found for Nested "VkMemoryHeapFlagBits" "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT"
+-- | @VK_MEMORY_HEAP_MULTI_INSTANCE_BIT@ specifies that in a logical device
+-- representing more than one physical device, there is a per-physical
+-- device instance of the heap memory. By default, an allocation from such
+-- a heap will be replicated to each physical device’s instance of the
+-- heap.
 pattern VK_MEMORY_HEAP_MULTI_INSTANCE_BIT :: VkMemoryHeapFlagBits
 pattern VK_MEMORY_HEAP_MULTI_INSTANCE_BIT = VkMemoryHeapFlagBits 0x00000002
 -- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE"
@@ -63,19 +67,96 @@
 pattern VK_MAX_DEVICE_GROUP_SIZE = 32
 -- | vkEnumeratePhysicalDeviceGroups - Enumerates groups of physical devices
 -- that can be used to create a single logical device
+--
+-- = Parameters
+--
+-- -   @instance@ is a handle to a Vulkan instance previously created with
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkCreateInstance'.
+--
+-- -   @pPhysicalDeviceGroupCount@ is a pointer to an integer related to
+--     the number of device groups available or queried, as described
+--     below.
+--
+-- -   @pPhysicalDeviceGroupProperties@ is either @NULL@ or a pointer to an
+--     array of 'VkPhysicalDeviceGroupProperties' structures.
+--
+-- = Description
+--
+-- If @pPhysicalDeviceGroupProperties@ is @NULL@, then the number of device
+-- groups available is returned in @pPhysicalDeviceGroupCount@. Otherwise,
+-- @pPhysicalDeviceGroupCount@ /must/ point to a variable set by the user
+-- to the number of elements in the @pPhysicalDeviceGroupProperties@ array,
+-- and on return the variable is overwritten with the number of structures
+-- actually written to @pPhysicalDeviceGroupProperties@. If
+-- @pPhysicalDeviceGroupCount@ is less than the number of device groups
+-- available, at most @pPhysicalDeviceGroupCount@ structures will be
+-- written. If @pPhysicalDeviceGroupCount@ is smaller than the number of
+-- device groups available, @VK_INCOMPLETE@ will be returned instead of
+-- @VK_SUCCESS@, to indicate that not all the available device groups were
+-- returned.
+--
+-- Every physical device /must/ be in exactly one device group.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @pPhysicalDeviceGroupCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   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@
+--     @VkPhysicalDeviceGroupProperties@ structures
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_INITIALIZATION_FAILED@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
+-- 'VkPhysicalDeviceGroupProperties'
 foreign import ccall "vkEnumeratePhysicalDeviceGroups" vkEnumeratePhysicalDeviceGroups :: ("instance" ::: VkInstance) -> ("pPhysicalDeviceGroupCount" ::: Ptr Word32) -> ("pPhysicalDeviceGroupProperties" ::: Ptr VkPhysicalDeviceGroupProperties) -> IO VkResult
 -- | VkPhysicalDeviceGroupProperties - Structure specifying physical device
 -- group properties
+--
+-- = See Also
+--
+-- @VkBool32@,
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkEnumeratePhysicalDeviceGroups',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_device_group_creation.vkEnumeratePhysicalDeviceGroupsKHR'
 data VkPhysicalDeviceGroupProperties = VkPhysicalDeviceGroupProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkPhysicalDeviceCount"
+  , -- | @physicalDeviceCount@ is the number of physical devices in the group.
   vkPhysicalDeviceCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkPhysicalDevices"
+  , -- | @physicalDevices@ is an array of physical device handles representing
+  -- all physical devices in the group. The first @physicalDeviceCount@
+  -- elements of the array will be valid.
   vkPhysicalDevices :: Vector VK_MAX_DEVICE_GROUP_SIZE VkPhysicalDevice
-  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkSubsetAllocation"
+  , -- | @subsetAllocation@ specifies whether logical devices created from the
+  -- group support allocating device memory on a subset of devices, via the
+  -- @deviceMask@ member of the
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkMemoryAllocateFlagsInfo'.
+  -- If this is @VK_FALSE@, then all device memory allocations are made
+  -- across all physical devices in the group. If @physicalDeviceCount@ is
+  -- @1@, then @subsetAllocation@ /must/ be @VK_FALSE@.
   vkSubsetAllocation :: VkBool32
   }
   deriving (Eq, Show)
@@ -95,14 +176,59 @@
                 *> poke (ptr `plusPtr` 280) (vkSubsetAllocation (poked :: VkPhysicalDeviceGroupProperties))
 -- | VkDeviceGroupDeviceCreateInfo - Create a logical device from multiple
 -- physical devices
+--
+-- = Description
+--
+-- The elements of the @pPhysicalDevices@ array are an ordered list of the
+-- physical devices that the logical device represents. These /must/ be a
+-- subset of a single device group, and need not be in the same order as
+-- they were enumerated. The order of the physical devices in the
+-- @pPhysicalDevices@ array determines the /device index/ of each physical
+-- device, with element i being assigned a device index of i. Certain
+-- commands and structures refer to one or more physical devices by using
+-- device indices or /device masks/ formed using device indices.
+--
+-- A logical device created without using @VkDeviceGroupDeviceCreateInfo@,
+-- or with @physicalDeviceCount@ equal to zero, is equivalent to a
+-- @physicalDeviceCount@ of one and @pPhysicalDevices@ pointing to the
+-- @physicalDevice@ parameter to
+-- 'Graphics.Vulkan.Core10.Device.vkCreateDevice'. In particular, the
+-- device index of that physical device is zero.
+--
+-- == Valid Usage
+--
+-- -   Each element of @pPhysicalDevices@ /must/ be unique
+--
+-- -   All elements of @pPhysicalDevices@ /must/ be in the same device
+--     group as enumerated by 'vkEnumeratePhysicalDeviceGroups'
+--
+-- -   If @physicalDeviceCount@ is not @0@, the @physicalDevice@ parameter
+--     of 'Graphics.Vulkan.Core10.Device.vkCreateDevice' /must/ be an
+--     element of @pPhysicalDevices@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO@
+--
+-- -   If @physicalDeviceCount@ is not @0@, @pPhysicalDevices@ /must/ be a
+--     valid pointer to an array of @physicalDeviceCount@ valid
+--     @VkPhysicalDevice@ handles
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceGroupDeviceCreateInfo = VkDeviceGroupDeviceCreateInfo
-  { -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkPhysicalDeviceCount"
+  , -- | @physicalDeviceCount@ is the number of elements in the
+  -- @pPhysicalDevices@ array.
   vkPhysicalDeviceCount :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkPPhysicalDevices"
+  , -- | @pPhysicalDevices@ is an array of physical device handles belonging to
+  -- the same device group.
   vkPPhysicalDevices :: Ptr VkPhysicalDevice
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence.hs
@@ -55,6 +55,10 @@
 
 -- | VkFenceImportFlagBits - Bitmask specifying additional parameters of
 -- fence payload import
+--
+-- = See Also
+--
+-- 'VkFenceImportFlags'
 newtype VkFenceImportFlagBits = VkFenceImportFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -72,7 +76,10 @@
                         )
                     )
 
--- No documentation found for Nested "VkFenceImportFlagBits" "VK_FENCE_IMPORT_TEMPORARY_BIT"
+-- | @VK_FENCE_IMPORT_TEMPORARY_BIT@ specifies that the fence payload will be
+-- imported only temporarily, as described in [Importing Fence
+-- Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-importing),
+-- regardless of the permanence of @handleType@.
 pattern VK_FENCE_IMPORT_TEMPORARY_BIT :: VkFenceImportFlagBits
 pattern VK_FENCE_IMPORT_TEMPORARY_BIT = VkFenceImportFlagBits 0x00000001
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"
@@ -80,12 +87,35 @@
 pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = VkStructureType 1000113000
 -- | VkExportFenceCreateInfo - Structure specifying handle types that can be
 -- exported from a fence
+--
+-- == Valid Usage
+--
+-- -   The bits in @handleTypes@ must be supported and compatible, as
+--     reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceProperties'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO@
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportFenceCreateInfo = VkExportFenceCreateInfo
-  { -- No documentation found for Nested "VkExportFenceCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportFenceCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportFenceCreateInfo" "vkHandleTypes"
+  , -- | @handleTypes@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+  -- specifying one or more fence handle types the application /can/ export
+  -- from the resulting fence. The application /can/ request multiple handle
+  -- types for the same fence.
   vkHandleTypes :: VkExternalFenceHandleTypeFlags
   }
   deriving (Eq, Show)
@@ -100,4 +130,15 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportFenceCreateInfo))
                 *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExportFenceCreateInfo))
 -- | VkFenceImportFlags - Bitmask of VkFenceImportFlagBits
+--
+-- = Description
+--
+-- @VkFenceImportFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkFenceImportFlagBits'.
+--
+-- = See Also
+--
+-- 'VkFenceImportFlagBits',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.VkImportFenceFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.VkImportFenceWin32HandleInfoKHR'
 type VkFenceImportFlags = VkFenceImportFlagBits
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence_capabilities.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence_capabilities.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence_capabilities.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence_capabilities.hs
@@ -70,6 +70,68 @@
 
 -- | VkExternalFenceHandleTypeFlagBits - Bitmask of valid external fence
 -- handle types
+--
+-- = Description
+--
+-- -   @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT@ specifies a POSIX file
+--     descriptor handle that has only limited valid usage outside of
+--     Vulkan and other compatible APIs. It /must/ be compatible with the
+--     POSIX system calls @dup@, @dup2@, @close@, and the non-standard
+--     system call @dup3@. Additionally, it /must/ be transportable over a
+--     socket using an @SCM_RIGHTS@ control message. It owns a reference to
+--     the underlying synchronization primitive represented by its Vulkan
+--     fence object.
+--
+-- -   @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT@ specifies an NT
+--     handle that has only limited valid usage outside of Vulkan and other
+--     compatible APIs. It /must/ be compatible with the functions
+--     @DuplicateHandle@, @CloseHandle@, @CompareObjectHandles@,
+--     @GetHandleInformation@, and @SetHandleInformation@. It owns a
+--     reference to the underlying synchronization primitive represented by
+--     its Vulkan fence object.
+--
+-- -   @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@ specifies a
+--     global share handle that has only limited valid usage outside of
+--     Vulkan and other compatible APIs. It is not compatible with any
+--     native APIs. It does not own a reference to the underlying
+--     synchronization primitive represented by its Vulkan fence object,
+--     and will therefore become invalid when all Vulkan fence objects
+--     associated with it are destroyed.
+--
+-- -   @VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT@ specifies a POSIX file
+--     descriptor handle to a Linux Sync File or Android Fence. It can be
+--     used with any native API accepting a valid sync file or fence as
+--     input. It owns a reference to the underlying synchronization
+--     primitive associated with the file descriptor. Implementations which
+--     support importing this handle type /must/ accept any type of sync or
+--     fence FD supported by the native system they are running on.
+--
+-- Some external fence handle types can only be shared within the same
+-- underlying physical device and\/or the same driver version, as defined
+-- in the following table:
+--
+-- +------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | Handle type                                          | @VkPhysicalDeviceIDProperties@::@driverUUID@ | @VkPhysicalDeviceIDProperties@::@deviceUUID@ |
+-- +------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT@        | Must match                                   | Must match                                   |
+-- +------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT@     | Must match                                   | Must match                                   |
+-- +------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@ | Must match                                   | Must match                                   |
+-- +------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT@          | No restriction                               | No restriction                               |
+-- +------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+--
+-- External fence handle types compatibility
+--
+-- = See Also
+--
+-- 'VkExternalFenceHandleTypeFlags',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.VkFenceGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.VkFenceGetWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.VkImportFenceFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.VkImportFenceWin32HandleInfoKHR',
+-- 'VkPhysicalDeviceExternalFenceInfo'
 newtype VkExternalFenceHandleTypeFlagBits = VkExternalFenceHandleTypeFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -112,6 +174,10 @@
 
 -- | VkExternalFenceFeatureFlagBits - Bitfield describing features of an
 -- external fence handle type
+--
+-- = See Also
+--
+-- 'VkExternalFenceFeatureFlags'
 newtype VkExternalFenceFeatureFlagBits = VkExternalFenceFeatureFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -131,11 +197,13 @@
                         )
                     )
 
--- No documentation found for Nested "VkExternalFenceFeatureFlagBits" "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"
+-- | @VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT@ specifies handles of this
+-- type /can/ be exported from Vulkan fence objects.
 pattern VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT :: VkExternalFenceFeatureFlagBits
 pattern VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = VkExternalFenceFeatureFlagBits 0x00000001
 
--- No documentation found for Nested "VkExternalFenceFeatureFlagBits" "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"
+-- | @VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT@ specifies handles of this
+-- type /can/ be imported to Vulkan fence objects.
 pattern VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT :: VkExternalFenceFeatureFlagBits
 pattern VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = VkExternalFenceFeatureFlagBits 0x00000002
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"
@@ -146,15 +214,75 @@
 pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = VkStructureType 1000112001
 -- | vkGetPhysicalDeviceExternalFenceProperties - Function for querying
 -- external fence handle capabilities.
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     fence capabilities.
+--
+-- -   @pExternalFenceInfo@ points to an instance of the
+--     'VkPhysicalDeviceExternalFenceInfo' structure, describing the
+--     parameters that would be consumed by
+--     'Graphics.Vulkan.Core10.Fence.vkCreateFence'.
+--
+-- -   @pExternalFenceProperties@ points to an instance of the
+--     'VkExternalFenceProperties' structure in which capabilities are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pExternalFenceInfo@ /must/ be a valid pointer to a valid
+--     @VkPhysicalDeviceExternalFenceInfo@ structure
+--
+-- -   @pExternalFenceProperties@ /must/ be a valid pointer to a
+--     @VkExternalFenceProperties@ structure
+--
+-- = See Also
+--
+-- 'VkExternalFenceProperties',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceExternalFenceInfo'
 foreign import ccall "vkGetPhysicalDeviceExternalFenceProperties" vkGetPhysicalDeviceExternalFenceProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalFenceInfo" ::: Ptr VkPhysicalDeviceExternalFenceInfo) -> ("pExternalFenceProperties" ::: Ptr VkExternalFenceProperties) -> IO ()
 -- | VkPhysicalDeviceExternalFenceInfo - Structure specifying fence creation
 -- parameters.
+--
+-- = Description
+--
+-- __Note__
+--
+-- Handles of type @VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT@ generated by
+-- the implementation may represent either Linux Sync Files or Android
+-- Fences at the implementation’s discretion. Applications /should/ only
+-- use operations defined for both types of file descriptors, unless they
+-- know via means external to Vulkan the type of the file descriptor, or
+-- are prepared to deal with the system-defined operation failures
+-- resulting from using the wrong type.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @handleType@ /must/ be a valid 'VkExternalFenceHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'VkExternalFenceHandleTypeFlagBits',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceExternalFenceProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFencePropertiesKHR'
 data VkPhysicalDeviceExternalFenceInfo = VkPhysicalDeviceExternalFenceInfo
-  { -- No documentation found for Nested "VkPhysicalDeviceExternalFenceInfo" "vkSType"
+  { -- | @sType@ is the type of this structure
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalFenceInfo" "vkPNext"
+  , -- | @pNext@ is NULL or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalFenceInfo" "vkHandleType"
+  , -- | @handleType@ is a 'VkExternalFenceHandleTypeFlagBits' value indicating
+  -- an external fence handle type for which capabilities will be returned.
   vkHandleType :: VkExternalFenceHandleTypeFlagBits
   }
   deriving (Eq, Show)
@@ -170,16 +298,40 @@
                 *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkPhysicalDeviceExternalFenceInfo))
 -- | VkExternalFenceProperties - Structure describing supported external
 -- fence handle features
+--
+-- = Description
+--
+-- If @handleType@ is not supported by the implementation, then
+-- 'VkExternalFenceProperties'::@externalFenceFeatures@ will be set to
+-- zero.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'VkExternalFenceFeatureFlags', 'VkExternalFenceHandleTypeFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceExternalFenceProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities.vkGetPhysicalDeviceExternalFencePropertiesKHR'
 data VkExternalFenceProperties = VkExternalFenceProperties
-  { -- No documentation found for Nested "VkExternalFenceProperties" "vkSType"
+  { -- No documentation found for Nested "VkExternalFenceProperties" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalFenceProperties" "vkPNext"
+  , -- No documentation found for Nested "VkExternalFenceProperties" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalFenceProperties" "vkExportFromImportedHandleTypes"
+  , -- | @exportFromImportedHandleTypes@ is a bitmask of
+  -- 'VkExternalFenceHandleTypeFlagBits' indicating which types of imported
+  -- handle @handleType@ /can/ be exported from.
   vkExportFromImportedHandleTypes :: VkExternalFenceHandleTypeFlags
-  , -- No documentation found for Nested "VkExternalFenceProperties" "vkCompatibleHandleTypes"
+  , -- | @compatibleHandleTypes@ is a bitmask of
+  -- 'VkExternalFenceHandleTypeFlagBits' specifying handle types which /can/
+  -- be specified at the same time as @handleType@ when creating a fence.
   vkCompatibleHandleTypes :: VkExternalFenceHandleTypeFlags
-  , -- No documentation found for Nested "VkExternalFenceProperties" "vkExternalFenceFeatures"
+  , -- | @externalFenceFeatures@ is a bitmask of 'VkExternalFenceFeatureFlagBits'
+  -- indicating the features of @handleType@.
   vkExternalFenceFeatures :: VkExternalFenceFeatureFlags
   }
   deriving (Eq, Show)
@@ -199,6 +351,25 @@
                 *> poke (ptr `plusPtr` 24) (vkExternalFenceFeatures (poked :: VkExternalFenceProperties))
 -- | VkExternalFenceHandleTypeFlags - Bitmask of
 -- VkExternalFenceHandleTypeFlagBits
+--
+-- = Description
+--
+-- @VkExternalFenceHandleTypeFlags@ is a bitmask type for setting a mask of
+-- zero or more 'VkExternalFenceHandleTypeFlagBits'.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkExportFenceCreateInfo',
+-- 'VkExternalFenceHandleTypeFlagBits', 'VkExternalFenceProperties'
 type VkExternalFenceHandleTypeFlags = VkExternalFenceHandleTypeFlagBits
 -- | VkExternalFenceFeatureFlags - Bitmask of VkExternalFenceFeatureFlagBits
+--
+-- = Description
+--
+-- @VkExternalFenceFeatureFlags@ is a bitmask type for setting a mask of
+-- zero or more 'VkExternalFenceFeatureFlagBits'.
+--
+-- = See Also
+--
+-- 'VkExternalFenceFeatureFlagBits', 'VkExternalFenceProperties'
 type VkExternalFenceFeatureFlags = VkExternalFenceFeatureFlagBits
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory.hs
@@ -53,12 +53,30 @@
 pattern VK_QUEUE_FAMILY_EXTERNAL = 0xfffffffe
 -- | VkExternalMemoryImageCreateInfo - Specify that an image may be backed by
 -- external memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO@
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     values
+--
+-- -   @handleTypes@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExternalMemoryImageCreateInfo = VkExternalMemoryImageCreateInfo
-  { -- No documentation found for Nested "VkExternalMemoryImageCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfo" "vkHandleTypes"
+  , -- | @handleTypes@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+  -- specifying one or more external memory handle types.
   vkHandleTypes :: VkExternalMemoryHandleTypeFlags
   }
   deriving (Eq, Show)
@@ -74,12 +92,28 @@
                 *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExternalMemoryImageCreateInfo))
 -- | VkExternalMemoryBufferCreateInfo - Specify that a buffer may be backed
 -- by external memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO@
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExternalMemoryBufferCreateInfo = VkExternalMemoryBufferCreateInfo
-  { -- No documentation found for Nested "VkExternalMemoryBufferCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalMemoryBufferCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalMemoryBufferCreateInfo" "vkHandleTypes"
+  , -- | @handleTypes@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+  -- specifying one or more external memory handle types.
   vkHandleTypes :: VkExternalMemoryHandleTypeFlags
   }
   deriving (Eq, Show)
@@ -95,12 +129,37 @@
                 *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExternalMemoryBufferCreateInfo))
 -- | VkExportMemoryAllocateInfo - Specify exportable handle types for a
 -- device memory object
+--
+-- == Valid Usage
+--
+-- -   The bits in @handleTypes@ /must/ be supported and compatible, as
+--     reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalImageFormatProperties'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalBufferProperties'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO@
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportMemoryAllocateInfo = VkExportMemoryAllocateInfo
-  { -- No documentation found for Nested "VkExportMemoryAllocateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportMemoryAllocateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportMemoryAllocateInfo" "vkHandleTypes"
+  , -- | @handleTypes@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+  -- specifying one or more memory handle types the application /can/ export
+  -- from the resulting allocation. The application /can/ request multiple
+  -- handle types for the same allocation.
   vkHandleTypes :: VkExternalMemoryHandleTypeFlags
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory_capabilities.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory_capabilities.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory_capabilities.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory_capabilities.hs
@@ -96,6 +96,143 @@
 
 -- | VkExternalMemoryHandleTypeFlagBits - Bit specifying external memory
 -- handle types
+--
+-- = Description
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT@ specifies a POSIX
+--     file descriptor handle that has only limited valid usage outside of
+--     Vulkan and other compatible APIs. It /must/ be compatible with the
+--     POSIX system calls @dup@, @dup2@, @close@, and the non-standard
+--     system call @dup3@. Additionally, it /must/ be transportable over a
+--     socket using an @SCM_RIGHTS@ control message. It owns a reference to
+--     the underlying memory resource represented by its Vulkan memory
+--     object.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT@ specifies an NT
+--     handle that has only limited valid usage outside of Vulkan and other
+--     compatible APIs. It /must/ be compatible with the functions
+--     @DuplicateHandle@, @CloseHandle@, @CompareObjectHandles@,
+--     @GetHandleInformation@, and @SetHandleInformation@. It owns a
+--     reference to the underlying memory resource represented by its
+--     Vulkan memory object.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@ specifies a
+--     global share handle that has only limited valid usage outside of
+--     Vulkan and other compatible APIs. It is not compatible with any
+--     native APIs. It does not own a reference to the underlying memory
+--     resource represented its Vulkan memory object, and will therefore
+--     become invalid when all Vulkan memory objects associated with it are
+--     destroyed.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@ specifies an NT
+--     handle returned by @IDXGIResource1@::@CreateSharedHandle@ referring
+--     to a Direct3D 10 or 11 texture resource. It owns a reference to the
+--     memory used by the Direct3D resource.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT@ specifies a
+--     global share handle returned by @IDXGIResource@::@GetSharedHandle@
+--     referring to a Direct3D 10 or 11 texture resource. It does not own a
+--     reference to the underlying Direct3D resource, and will therefore
+--     become invalid when all Vulkan memory objects and Direct3D resources
+--     associated with it are destroyed.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@ specifies an NT
+--     handle returned by @ID3D12Device@::@CreateSharedHandle@ referring to
+--     a Direct3D 12 heap resource. It owns a reference to the resources
+--     used by the Direct3D heap.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@ specifies an NT
+--     handle returned by @ID3D12Device@::@CreateSharedHandle@ referring to
+--     a Direct3D 12 committed resource. It owns a reference to the memory
+--     used by the Direct3D resource.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT@ specifies a
+--     host pointer returned by a host memory allocation command. It does
+--     not own a reference to the underlying memory resource, and will
+--     therefore become invalid if the host memory is freed.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT@
+--     specifies a host pointer to /host mapped foreign memory/. It does
+--     not own a reference to the underlying memory resource, and will
+--     therefore become invalid if the foreign memory is unmapped or
+--     otherwise becomes no longer available.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT@ is a file
+--     descriptor for a Linux dma_buf. It owns a reference to the
+--     underlying memory resource represented by its Vulkan memory object.
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@
+--     specifies an @AHardwareBuffer@ object defined by the Android NDK.
+--     See [Android Hardware
+--     Buffers](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer)
+--     for more details of this handle type.
+--
+-- Some external memory handle types can only be shared within the same
+-- underlying physical device and\/or the same driver version, as defined
+-- in the following table:
+--
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | Handle type                                                          | @VkPhysicalDeviceIDProperties@::@driverUUID@ | @VkPhysicalDeviceIDProperties@::@deviceUUID@ |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT@                       | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT@                    | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@                | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@                   | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT@               | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@                      | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@                  | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT@             | No restriction                               | No restriction                               |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT@  | No restriction                               | No restriction                               |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT@                     | No restriction                               | No restriction                               |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@ | No restriction                               | No restriction                               |
+-- +----------------------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+--
+-- External memory handle types compatibility
+--
+-- __Note__
+--
+-- The above table does not restrict the drivers and devices with which
+-- @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT@ and
+-- @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT@
+-- /may/ be shared, as these handle types inherently mean memory that does
+-- not come from the same device, as they import memory from the host or a
+-- foreign device, respectively.
+--
+-- __Note__
+--
+-- Even though the above table does not restrict the drivers and devices
+-- with which @VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT@ /may/ be
+-- shared, query mechanisms exist in the Vulkan API that prevent the import
+-- of incompatible dma-bufs (such as
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdPropertiesKHR')
+-- and that prevent incompatible usage of dma-bufs (such as
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalBufferInfoKHR'
+-- and
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalImageFormatInfoKHR').
+--
+-- = See Also
+--
+-- 'VkExternalMemoryHandleTypeFlags',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.VkImportMemoryFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.VkImportMemoryHostPointerInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkImportMemoryWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.VkMemoryGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkMemoryGetWin32HandleInfoKHR',
+-- 'VkPhysicalDeviceExternalBufferInfo',
+-- 'VkPhysicalDeviceExternalImageFormatInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.vkGetMemoryFdPropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.vkGetMemoryHostPointerPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.vkGetMemoryWin32HandlePropertiesKHR'
 newtype VkExternalMemoryHandleTypeFlagBits = VkExternalMemoryHandleTypeFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -166,6 +303,43 @@
 
 -- | VkExternalMemoryFeatureFlagBits - Bitmask specifying features of an
 -- external memory handle type
+--
+-- = Description
+--
+-- -   @VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT@ specifies that
+--     images or buffers created with the specified parameters and handle
+--     type /must/ use the mechanisms defined in the
+--     @{html_spec_relative}#VK_NV_dedicated_allocation@ extension to
+--     create (or import) a dedicated allocation for the image or buffer.
+--
+-- -   @VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT@ specifies that handles
+--     of this type /can/ be exported from Vulkan memory objects.
+--
+-- -   @VK_INTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT@ specifies that handles
+--     of this type /can/ be imported as Vulkan memory objects.
+--
+-- Because their semantics in external APIs roughly align with that of an
+-- image or buffer with a dedicated allocation in Vulkan, implementations
+-- are /required/ to report @VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT@
+-- for the following external handle types:
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT@
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@
+--     for images only
+--
+-- Implementations /must/ not report
+-- @VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT@ for buffers with
+-- external handle type
+-- @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@.
+--
+-- = See Also
+--
+-- 'VkExternalMemoryFeatureFlags'
 newtype VkExternalMemoryFeatureFlagBits = VkExternalMemoryFeatureFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -220,15 +394,69 @@
 pattern VK_LUID_SIZE = 8
 -- | vkGetPhysicalDeviceExternalBufferProperties - Query external handle
 -- types supported by buffers
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     buffer capabilities.
+--
+-- -   @pExternalBufferInfo@ points to an instance of the
+--     'VkPhysicalDeviceExternalBufferInfo' structure, describing the
+--     parameters that would be consumed by
+--     'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer'.
+--
+-- -   @pExternalBufferProperties@ points to an instance of the
+--     'VkExternalBufferProperties' structure in which capabilities are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pExternalBufferInfo@ /must/ be a valid pointer to a valid
+--     @VkPhysicalDeviceExternalBufferInfo@ structure
+--
+-- -   @pExternalBufferProperties@ /must/ be a valid pointer to a
+--     @VkExternalBufferProperties@ structure
+--
+-- = See Also
+--
+-- 'VkExternalBufferProperties',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceExternalBufferInfo'
 foreign import ccall "vkGetPhysicalDeviceExternalBufferProperties" vkGetPhysicalDeviceExternalBufferProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalBufferInfo" ::: Ptr VkPhysicalDeviceExternalBufferInfo) -> ("pExternalBufferProperties" ::: Ptr VkExternalBufferProperties) -> IO ()
 -- | VkExternalMemoryProperties - Structure specifying external memory handle
 -- type capabilities
+--
+-- = Description
+--
+-- @compatibleHandleTypes@ /must/ include at least @handleType@. Inclusion
+-- of a handle type in @compatibleHandleTypes@ does not imply the values
+-- returned in
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkImageFormatProperties2'
+-- will be the same when
+-- 'VkPhysicalDeviceExternalImageFormatInfo'::@handleType@ is set to that
+-- type. The application is responsible for querying the capabilities of
+-- all handle types intended for concurrent use in a single image and
+-- intersecting them to obtain the compatible set of capabilities.
+--
+-- = See Also
+--
+-- 'VkExternalBufferProperties', 'VkExternalImageFormatProperties',
+-- 'VkExternalMemoryFeatureFlags', 'VkExternalMemoryHandleTypeFlags'
 data VkExternalMemoryProperties = VkExternalMemoryProperties
-  { -- No documentation found for Nested "VkExternalMemoryProperties" "vkExternalMemoryFeatures"
+  { -- | @externalMemoryFeatures@ is a bitmask of
+  -- 'VkExternalMemoryFeatureFlagBits' specifying the features of
+  -- @handleType@.
   vkExternalMemoryFeatures :: VkExternalMemoryFeatureFlags
-  , -- No documentation found for Nested "VkExternalMemoryProperties" "vkExportFromImportedHandleTypes"
+  , -- | @exportFromImportedHandleTypes@ is a bitmask of
+  -- 'VkExternalMemoryHandleTypeFlagBits' specifying which types of imported
+  -- handle @handleType@ /can/ be exported from.
   vkExportFromImportedHandleTypes :: VkExternalMemoryHandleTypeFlags
-  , -- No documentation found for Nested "VkExternalMemoryProperties" "vkCompatibleHandleTypes"
+  , -- | @compatibleHandleTypes@ is a bitmask of
+  -- 'VkExternalMemoryHandleTypeFlagBits' specifying handle types which /can/
+  -- be specified at the same time as @handleType@ when creating an image
+  -- compatible with external memory.
   vkCompatibleHandleTypes :: VkExternalMemoryHandleTypeFlags
   }
   deriving (Eq, Show)
@@ -244,12 +472,41 @@
                 *> poke (ptr `plusPtr` 8) (vkCompatibleHandleTypes (poked :: VkExternalMemoryProperties))
 -- | VkPhysicalDeviceExternalImageFormatInfo - Structure specifying external
 -- image creation parameters
+--
+-- = Description
+--
+-- If @handleType@ is 0,
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'
+-- will behave as if 'VkPhysicalDeviceExternalImageFormatInfo' was not
+-- present, and 'VkExternalImageFormatProperties' will be ignored.
+--
+-- If @handleType@ is not compatible with the @format@, @type@, @tiling@,
+-- @usage@, and @flags@ specified in
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
+-- then
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2'
+-- returns @VK_ERROR_FORMAT_NOT_SUPPORTED@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO@
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'VkExternalMemoryHandleTypeFlagBits' value
+--
+-- = See Also
+--
+-- 'VkExternalMemoryHandleTypeFlagBits',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceExternalImageFormatInfo = VkPhysicalDeviceExternalImageFormatInfo
-  { -- No documentation found for Nested "VkPhysicalDeviceExternalImageFormatInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalImageFormatInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalImageFormatInfo" "vkHandleType"
+  , -- | @handleType@ is a 'VkExternalMemoryHandleTypeFlagBits' value specifying
+  -- the memory handle type that will be used with the memory associated with
+  -- the image.
   vkHandleType :: VkExternalMemoryHandleTypeFlagBits
   }
   deriving (Eq, Show)
@@ -265,12 +522,25 @@
                 *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkPhysicalDeviceExternalImageFormatInfo))
 -- | VkExternalImageFormatProperties - Structure specifying supported
 -- external handle properties
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES@
+--
+-- = See Also
+--
+-- 'VkExternalMemoryProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExternalImageFormatProperties = VkExternalImageFormatProperties
-  { -- No documentation found for Nested "VkExternalImageFormatProperties" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalImageFormatProperties" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalImageFormatProperties" "vkExternalMemoryProperties"
+  , -- | @externalMemoryProperties@ is an instance of the
+  -- 'VkExternalMemoryProperties' structure specifying various capabilities
+  -- of the external handle type when used with the specified image creation
+  -- parameters.
   vkExternalMemoryProperties :: VkExternalMemoryProperties
   }
   deriving (Eq, Show)
@@ -286,16 +556,51 @@
                 *> poke (ptr `plusPtr` 16) (vkExternalMemoryProperties (poked :: VkExternalImageFormatProperties))
 -- | VkPhysicalDeviceExternalBufferInfo - Structure specifying buffer
 -- creation parameters
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Buffer.VkBufferCreateFlagBits' values
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Buffer.VkBufferUsageFlagBits' values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @handleType@ /must/ be a valid 'VkExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateFlags',
+-- 'Graphics.Vulkan.Core10.Buffer.VkBufferUsageFlags',
+-- 'VkExternalMemoryHandleTypeFlagBits',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceExternalBufferProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferPropertiesKHR'
 data VkPhysicalDeviceExternalBufferInfo = VkPhysicalDeviceExternalBufferInfo
-  { -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkSType"
+  { -- | @sType@ is the type of this structure
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkPNext"
+  , -- | @pNext@ is NULL or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkFlags"
+  , -- | @flags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateFlagBits' describing
+  -- additional parameters of the buffer, corresponding to
+  -- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo'::@flags@.
   vkFlags :: VkBufferCreateFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkUsage"
+  , -- | @usage@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.Buffer.VkBufferUsageFlagBits' describing the
+  -- intended usage of the buffer, corresponding to
+  -- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo'::@usage@.
   vkUsage :: VkBufferUsageFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkHandleType"
+  , -- | @handleType@ is a 'VkExternalMemoryHandleTypeFlagBits' value specifying
+  -- the memory handle type that will be used with the memory associated with
+  -- the buffer.
   vkHandleType :: VkExternalMemoryHandleTypeFlagBits
   }
   deriving (Eq, Show)
@@ -315,12 +620,28 @@
                 *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkPhysicalDeviceExternalBufferInfo))
 -- | VkExternalBufferProperties - Structure specifying supported external
 -- handle capabilities
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'VkExternalMemoryProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceExternalBufferProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.vkGetPhysicalDeviceExternalBufferPropertiesKHR'
 data VkExternalBufferProperties = VkExternalBufferProperties
-  { -- No documentation found for Nested "VkExternalBufferProperties" "vkSType"
+  { -- | @sType@ is the type of this structure
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalBufferProperties" "vkPNext"
+  , -- | @pNext@ is NULL or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalBufferProperties" "vkExternalMemoryProperties"
+  , -- | @externalMemoryProperties@ is an instance of the
+  -- 'VkExternalMemoryProperties' structure specifying various capabilities
+  -- of the external handle type when used with the specified buffer creation
+  -- parameters.
   vkExternalMemoryProperties :: VkExternalMemoryProperties
   }
   deriving (Eq, Show)
@@ -336,20 +657,96 @@
                 *> poke (ptr `plusPtr` 16) (vkExternalMemoryProperties (poked :: VkExternalBufferProperties))
 -- | VkPhysicalDeviceIDProperties - Structure specifying IDs related to the
 -- physical device
+--
+-- = Description
+--
+-- @deviceUUID@ /must/ be immutable for a given device across instances,
+-- processes, driver APIs, driver versions, and system reboots.
+--
+-- Applications /can/ compare the @driverUUID@ value across instance and
+-- process boundaries, and /can/ make similar queries in external APIs to
+-- determine whether they are capable of sharing memory objects and
+-- resources using them with the device.
+--
+-- @deviceUUID@ and\/or @driverUUID@ /must/ be used to determine whether a
+-- particular external object can be shared between driver components,
+-- where such a restriction exists as defined in the compatibility table
+-- for the particular object type:
+--
+-- -   [External memory handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-memory-handle-types-compatibility)
+--
+-- -   [External semaphore handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility)
+--
+-- -   [External fence handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-fence-handle-types-compatibility)
+--
+-- If @deviceLUIDValid@ is @VK_FALSE@, the contents of @deviceLUID@ and
+-- @deviceNodeMask@ are undefined. If @deviceLUIDValid@ is @VK_TRUE@ and
+-- Vulkan is running on the Windows operating system, the contents of
+-- @deviceLUID@ /can/ be cast to an @LUID@ object and /must/ be equal to
+-- the locally unique identifier of a @IDXGIAdapter1@ object that
+-- corresponds to @physicalDevice@. If @deviceLUIDValid@ is @VK_TRUE@,
+-- @deviceNodeMask@ /must/ contain exactly one bit. If Vulkan is running on
+-- an operating system that supports the Direct3D 12 API and
+-- @physicalDevice@ corresponds to an individual device in a linked device
+-- adapter, @deviceNodeMask@ identifies the Direct3D 12 node corresponding
+-- to @physicalDevice@. Otherwise, @deviceNodeMask@ /must/ be @1@.
+--
+-- __Note__
+--
+-- Although they have identical descriptions,
+-- 'VkPhysicalDeviceIDProperties'::@deviceUUID@ may differ from
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2'::@pipelineCacheUUID@.
+-- The former is intended to identify and correlate devices across API and
+-- driver boundaries, while the latter is used to identify a compatible
+-- device and driver combination to use when serializing and de-serializing
+-- pipeline state.
+--
+-- __Note__
+--
+-- While 'VkPhysicalDeviceIDProperties'::@deviceUUID@ is specified to
+-- remain consistent across driver versions and system reboots, it is not
+-- intended to be usable as a serializable persistent identifier for a
+-- device. It may change when a device is physically added to, removed
+-- from, or moved to a different connector in a system while that system is
+-- powered down. Further, there is no reasonable way to verify with
+-- conformance testing that a given device retains the same UUID in a given
+-- system across all driver versions supported in that system. While
+-- implementations should make every effort to report consistent device
+-- UUIDs across driver versions, applications should avoid relying on the
+-- persistence of this value for uses other than identifying compatible
+-- devices for external object sharing purposes.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES@
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceIDProperties = VkPhysicalDeviceIDProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceUUID"
+  , -- | @deviceUUID@ is an array of size @VK_UUID_SIZE@, containing 8-bit values
+  -- that represent a universally unique identifier for the device.
   vkDeviceUUID :: Vector VK_UUID_SIZE Word8
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDriverUUID"
+  , -- | @driverUUID@ is an array of size @VK_UUID_SIZE@, containing 8-bit values
+  -- that represent a universally unique identifier for the driver build in
+  -- use by the device.
   vkDriverUUID :: Vector VK_UUID_SIZE Word8
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceLUID"
+  , -- | @deviceLUID@ is an array of size @VK_LUID_SIZE@, containing 8-bit values
+  -- that represent a locally unique identifier for the device.
   vkDeviceLUID :: Vector VK_LUID_SIZE Word8
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceNodeMask"
+  , -- | @deviceNodeMask@ is a bitfield identifying the node within a linked
+  -- device adapter corresponding to the device.
   vkDeviceNodeMask :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceLUIDValid"
+  , -- | @deviceLUIDValid@ is a boolean value that will be @VK_TRUE@ if
+  -- @deviceLUID@ contains a valid LUID and @deviceNodeMask@ contains a valid
+  -- node mask, and @VK_FALSE@ if they do not.
   vkDeviceLUIDValid :: VkBool32
   }
   deriving (Eq, Show)
@@ -373,7 +770,29 @@
                 *> poke (ptr `plusPtr` 60) (vkDeviceLUIDValid (poked :: VkPhysicalDeviceIDProperties))
 -- | VkExternalMemoryHandleTypeFlags - Bitmask of
 -- VkExternalMemoryHandleTypeFlagBits
+--
+-- = Description
+--
+-- @VkExternalMemoryHandleTypeFlags@ is a bitmask type for setting a mask
+-- of zero or more 'VkExternalMemoryHandleTypeFlagBits'.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExportMemoryAllocateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryBufferCreateInfo',
+-- 'VkExternalMemoryHandleTypeFlagBits',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo',
+-- 'VkExternalMemoryProperties'
 type VkExternalMemoryHandleTypeFlags = VkExternalMemoryHandleTypeFlagBits
 -- | VkExternalMemoryFeatureFlags - Bitmask of
 -- VkExternalMemoryFeatureFlagBits
+--
+-- = Description
+--
+-- @VkExternalMemoryFeatureFlags@ is a bitmask type for setting a mask of
+-- zero or more 'VkExternalMemoryFeatureFlagBits'.
+--
+-- = See Also
+--
+-- 'VkExternalMemoryFeatureFlagBits', 'VkExternalMemoryProperties'
 type VkExternalMemoryFeatureFlags = VkExternalMemoryFeatureFlagBits
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore.hs
@@ -55,6 +55,20 @@
 
 -- | VkSemaphoreImportFlagBits - Bitmask specifying additional parameters of
 -- semaphore payload import
+--
+-- = Description
+--
+-- These bits have the following meanings:
+--
+-- -   @VK_SEMAPHORE_IMPORT_TEMPORARY_BIT@ specifies that the semaphore
+--     payload will be imported only temporarily, as described in
+--     [Importing Semaphore
+--     Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-importing),
+--     regardless of the permanence of @handleType@.
+--
+-- = See Also
+--
+-- 'VkSemaphoreImportFlags'
 newtype VkSemaphoreImportFlagBits = VkSemaphoreImportFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -80,12 +94,35 @@
 pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = VkStructureType 1000077000
 -- | VkExportSemaphoreCreateInfo - Structure specifying handle types that can
 -- be exported from a semaphore
+--
+-- == Valid Usage
+--
+-- -   The bits in @handleTypes@ /must/ be supported and compatible, as
+--     reported by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreProperties'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO@
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportSemaphoreCreateInfo = VkExportSemaphoreCreateInfo
-  { -- No documentation found for Nested "VkExportSemaphoreCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportSemaphoreCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportSemaphoreCreateInfo" "vkHandleTypes"
+  , -- | @handleTypes@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+  -- specifying one or more semaphore handle types the application /can/
+  -- export from the resulting semaphore. The application /can/ request
+  -- multiple handle types for the same semaphore.
   vkHandleTypes :: VkExternalSemaphoreHandleTypeFlags
   }
   deriving (Eq, Show)
@@ -100,4 +137,15 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportSemaphoreCreateInfo))
                 *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExportSemaphoreCreateInfo))
 -- | VkSemaphoreImportFlags - Bitmask of VkSemaphoreImportFlagBits
+--
+-- = Description
+--
+-- @VkSemaphoreImportFlags@ is a bitmask type for setting a mask of zero or
+-- more 'VkSemaphoreImportFlagBits'.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.VkImportSemaphoreFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkImportSemaphoreWin32HandleInfoKHR',
+-- 'VkSemaphoreImportFlagBits'
 type VkSemaphoreImportFlags = VkSemaphoreImportFlagBits
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore_capabilities.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore_capabilities.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore_capabilities.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore_capabilities.hs
@@ -71,6 +71,86 @@
 
 -- | VkExternalSemaphoreHandleTypeFlagBits - Bitmask of valid external
 -- semaphore handle types
+--
+-- = Description
+--
+-- -   @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT@ specifies a POSIX
+--     file descriptor handle that has only limited valid usage outside of
+--     Vulkan and other compatible APIs. It /must/ be compatible with the
+--     POSIX system calls @dup@, @dup2@, @close@, and the non-standard
+--     system call @dup3@. Additionally, it /must/ be transportable over a
+--     socket using an @SCM_RIGHTS@ control message. It owns a reference to
+--     the underlying synchronization primitive represented by its Vulkan
+--     semaphore object.
+--
+-- -   @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT@ specifies an NT
+--     handle that has only limited valid usage outside of Vulkan and other
+--     compatible APIs. It /must/ be compatible with the functions
+--     @DuplicateHandle@, @CloseHandle@, @CompareObjectHandles@,
+--     @GetHandleInformation@, and @SetHandleInformation@. It owns a
+--     reference to the underlying synchronization primitive represented by
+--     its Vulkan semaphore object.
+--
+-- -   @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@ specifies a
+--     global share handle that has only limited valid usage outside of
+--     Vulkan and other compatible APIs. It is not compatible with any
+--     native APIs. It does not own a reference to the underlying
+--     synchronization primitive represented its Vulkan semaphore object,
+--     and will therefore become invalid when all Vulkan semaphore objects
+--     associated with it are destroyed.
+--
+-- -   @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT@ specifies an NT
+--     handle returned by @ID3D12Device@::@CreateSharedHandle@ referring to
+--     a Direct3D 12 fence. It owns a reference to the underlying
+--     synchronization primitive associated with the Direct3D fence.
+--
+-- -   @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT@ specifies a POSIX
+--     file descriptor handle to a Linux Sync File or Android Fence object.
+--     It can be used with any native API accepting a valid sync file or
+--     fence as input. It owns a reference to the underlying
+--     synchronization primitive associated with the file descriptor.
+--     Implementations which support importing this handle type /must/
+--     accept any type of sync or fence FD supported by the native system
+--     they are running on.
+--
+-- __Note__
+--
+-- Handles of type @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT@
+-- generated by the implementation may represent either Linux Sync Files or
+-- Android Fences at the implementation’s discretion. Applications /should/
+-- only use operations defined for both types of file descriptors, unless
+-- they know via means external to Vulkan the type of the file descriptor,
+-- or are prepared to deal with the system-defined operation failures
+-- resulting from using the wrong type.
+--
+-- Some external semaphore handle types can only be shared within the same
+-- underlying physical device and\/or the same driver version, as defined
+-- in the following table:
+--
+-- +----------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | Handle type                                              | @VkPhysicalDeviceIDProperties@::@driverUUID@ | @VkPhysicalDeviceIDProperties@::@deviceUUID@ |
+-- +----------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT@        | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT@     | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@ | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT@      | Must match                                   | Must match                                   |
+-- +----------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT@          | No restriction                               | No restriction                               |
+-- +----------------------------------------------------------+----------------------------------------------+----------------------------------------------+
+--
+-- External semaphore handle types compatibility
+--
+-- = See Also
+--
+-- 'VkExternalSemaphoreHandleTypeFlags',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.VkImportSemaphoreFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkImportSemaphoreWin32HandleInfoKHR',
+-- 'VkPhysicalDeviceExternalSemaphoreInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.VkSemaphoreGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkSemaphoreGetWin32HandleInfoKHR'
 newtype VkExternalSemaphoreHandleTypeFlagBits = VkExternalSemaphoreHandleTypeFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -119,6 +199,10 @@
 
 -- | VkExternalSemaphoreFeatureFlagBits - Bitfield describing features of an
 -- external semaphore handle type
+--
+-- = See Also
+--
+-- 'VkExternalSemaphoreFeatureFlags'
 newtype VkExternalSemaphoreFeatureFlagBits = VkExternalSemaphoreFeatureFlagBits VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -138,11 +222,13 @@
                         )
                     )
 
--- No documentation found for Nested "VkExternalSemaphoreFeatureFlagBits" "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"
+-- | @VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT@ specifies that handles of
+-- this type /can/ be exported from Vulkan semaphore objects.
 pattern VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT :: VkExternalSemaphoreFeatureFlagBits
 pattern VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = VkExternalSemaphoreFeatureFlagBits 0x00000001
 
--- No documentation found for Nested "VkExternalSemaphoreFeatureFlagBits" "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"
+-- | @VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT@ specifies that handles of
+-- this type /can/ be imported as Vulkan semaphore objects.
 pattern VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT :: VkExternalSemaphoreFeatureFlagBits
 pattern VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = VkExternalSemaphoreFeatureFlagBits 0x00000002
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"
@@ -153,15 +239,64 @@
 pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = VkStructureType 1000076001
 -- | vkGetPhysicalDeviceExternalSemaphoreProperties - Function for querying
 -- external semaphore handle capabilities.
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     semaphore capabilities.
+--
+-- -   @pExternalSemaphoreInfo@ points to an instance of the
+--     'VkPhysicalDeviceExternalSemaphoreInfo' structure, describing the
+--     parameters that would be consumed by
+--     'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore'.
+--
+-- -   @pExternalSemaphoreProperties@ points to an instance of the
+--     'VkExternalSemaphoreProperties' structure in which capabilities are
+--     returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pExternalSemaphoreInfo@ /must/ be a valid pointer to a valid
+--     @VkPhysicalDeviceExternalSemaphoreInfo@ structure
+--
+-- -   @pExternalSemaphoreProperties@ /must/ be a valid pointer to a
+--     @VkExternalSemaphoreProperties@ structure
+--
+-- = See Also
+--
+-- 'VkExternalSemaphoreProperties',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceExternalSemaphoreInfo'
 foreign import ccall "vkGetPhysicalDeviceExternalSemaphoreProperties" vkGetPhysicalDeviceExternalSemaphoreProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalSemaphoreInfo" ::: Ptr VkPhysicalDeviceExternalSemaphoreInfo) -> ("pExternalSemaphoreProperties" ::: Ptr VkExternalSemaphoreProperties) -> IO ()
 -- | VkPhysicalDeviceExternalSemaphoreInfo - Structure specifying semaphore
 -- creation parameters.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @handleType@ /must/ be a valid
+--     'VkExternalSemaphoreHandleTypeFlagBits' value
+--
+-- = See Also
+--
+-- 'VkExternalSemaphoreHandleTypeFlagBits',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceExternalSemaphoreProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR'
 data VkPhysicalDeviceExternalSemaphoreInfo = VkPhysicalDeviceExternalSemaphoreInfo
-  { -- No documentation found for Nested "VkPhysicalDeviceExternalSemaphoreInfo" "vkSType"
+  { -- | @sType@ is the type of this structure
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalSemaphoreInfo" "vkPNext"
+  , -- | @pNext@ is NULL or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalSemaphoreInfo" "vkHandleType"
+  , -- | @handleType@ is a 'VkExternalSemaphoreHandleTypeFlagBits' value
+  -- specifying the external semaphore handle type for which capabilities
+  -- will be returned.
   vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
   }
   deriving (Eq, Show)
@@ -177,16 +312,42 @@
                 *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkPhysicalDeviceExternalSemaphoreInfo))
 -- | VkExternalSemaphoreProperties - Structure describing supported external
 -- semaphore handle features
+--
+-- = Description
+--
+-- If @handleType@ is not supported by the implementation, then
+-- 'VkExternalSemaphoreProperties'::@externalSemaphoreFeatures@ will be set
+-- to zero.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'VkExternalSemaphoreFeatureFlags', 'VkExternalSemaphoreHandleTypeFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceExternalSemaphoreProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities.vkGetPhysicalDeviceExternalSemaphorePropertiesKHR'
 data VkExternalSemaphoreProperties = VkExternalSemaphoreProperties
-  { -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkSType"
+  { -- No documentation found for Nested "VkExternalSemaphoreProperties" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkPNext"
+  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkExportFromImportedHandleTypes"
+  , -- | @exportFromImportedHandleTypes@ is a bitmask of
+  -- 'VkExternalSemaphoreHandleTypeFlagBits' specifying which types of
+  -- imported handle @handleType@ /can/ be exported from.
   vkExportFromImportedHandleTypes :: VkExternalSemaphoreHandleTypeFlags
-  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkCompatibleHandleTypes"
+  , -- | @compatibleHandleTypes@ is a bitmask of
+  -- 'VkExternalSemaphoreHandleTypeFlagBits' specifying handle types which
+  -- /can/ be specified at the same time as @handleType@ when creating a
+  -- semaphore.
   vkCompatibleHandleTypes :: VkExternalSemaphoreHandleTypeFlags
-  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkExternalSemaphoreFeatures"
+  , -- | @externalSemaphoreFeatures@ is a bitmask of
+  -- 'VkExternalSemaphoreFeatureFlagBits' describing the features of
+  -- @handleType@.
   vkExternalSemaphoreFeatures :: VkExternalSemaphoreFeatureFlags
   }
   deriving (Eq, Show)
@@ -206,7 +367,26 @@
                 *> poke (ptr `plusPtr` 24) (vkExternalSemaphoreFeatures (poked :: VkExternalSemaphoreProperties))
 -- | VkExternalSemaphoreHandleTypeFlags - Bitmask of
 -- VkExternalSemaphoreHandleTypeFlagBits
+--
+-- = Description
+--
+-- @VkExternalSemaphoreHandleTypeFlags@ is a bitmask type for setting a
+-- mask of zero or more 'VkExternalSemaphoreHandleTypeFlagBits'.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkExportSemaphoreCreateInfo',
+-- 'VkExternalSemaphoreHandleTypeFlagBits', 'VkExternalSemaphoreProperties'
 type VkExternalSemaphoreHandleTypeFlags = VkExternalSemaphoreHandleTypeFlagBits
 -- | VkExternalSemaphoreFeatureFlags - Bitmask of
 -- VkExternalSemaphoreFeatureFlagBitsKHR
+--
+-- = Description
+--
+-- @VkExternalSemaphoreFeatureFlags@ is a bitmask type for setting a mask
+-- of zero or more 'VkExternalSemaphoreFeatureFlagBits'.
+--
+-- = See Also
+--
+-- 'VkExternalSemaphoreFeatureFlagBits', 'VkExternalSemaphoreProperties'
 type VkExternalSemaphoreFeatureFlags = VkExternalSemaphoreFeatureFlagBits
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_memory_requirements2.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_memory_requirements2.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_memory_requirements2.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_memory_requirements2.hs
@@ -70,20 +70,128 @@
 pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = VkStructureType 1000146004
 -- | vkGetBufferMemoryRequirements2 - Returns the memory requirements for
 -- specified Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the buffer.
+--
+-- -   @pInfo@ is a pointer to an instance of the
+--     @VkBufferMemoryRequirementsInfo2@ structure containing parameters
+--     required for the memory requirements query.
+--
+-- -   @pMemoryRequirements@ points to an instance of the
+--     'VkMemoryRequirements2' structure in which the memory requirements
+--     of the buffer object are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     @VkBufferMemoryRequirementsInfo2@ structure
+--
+-- -   @pMemoryRequirements@ /must/ be a valid pointer to a
+--     @VkMemoryRequirements2@ structure
+--
+-- = See Also
+--
+-- 'VkBufferMemoryRequirementsInfo2',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkMemoryRequirements2'
 foreign import ccall "vkGetBufferMemoryRequirements2" vkGetBufferMemoryRequirements2 :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkBufferMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements2) -> IO ()
 -- | vkGetImageMemoryRequirements2 - Returns the memory requirements for
 -- specified Vulkan object
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @pInfo@ is a pointer to an instance of the
+--     @VkImageMemoryRequirementsInfo2@ structure containing parameters
+--     required for the memory requirements query.
+--
+-- -   @pMemoryRequirements@ points to an instance of the
+--     'VkMemoryRequirements2' structure in which the memory requirements
+--     of the image object are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     @VkImageMemoryRequirementsInfo2@ structure
+--
+-- -   @pMemoryRequirements@ /must/ be a valid pointer to a
+--     @VkMemoryRequirements2@ structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkImageMemoryRequirementsInfo2', 'VkMemoryRequirements2'
 foreign import ccall "vkGetImageMemoryRequirements2" vkGetImageMemoryRequirements2 :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkImageMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements2) -> IO ()
 -- | vkGetImageSparseMemoryRequirements2 - Query the memory requirements for
 -- a sparse image
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @pInfo@ is a pointer to an instance of the
+--     @VkImageSparseMemoryRequirementsInfo2@ structure containing
+--     parameters required for the memory requirements query.
+--
+-- -   @pSparseMemoryRequirementCount@ is a pointer to an integer related
+--     to the number of sparse memory requirements available or queried, as
+--     described below.
+--
+-- -   @pSparseMemoryRequirements@ is either @NULL@ or a pointer to an
+--     array of @VkSparseImageMemoryRequirements2@ structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     @VkImageSparseMemoryRequirementsInfo2@ structure
+--
+-- -   @pSparseMemoryRequirementCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   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@ @VkSparseImageMemoryRequirements2@
+--     structures
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkImageSparseMemoryRequirementsInfo2',
+-- 'VkSparseImageMemoryRequirements2'
 foreign import ccall "vkGetImageSparseMemoryRequirements2" vkGetImageSparseMemoryRequirements2 :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkImageSparseMemoryRequirementsInfo2) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr VkSparseImageMemoryRequirements2) -> IO ()
 -- | VkBufferMemoryRequirementsInfo2 - (None)
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetBufferMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2KHR'
 data VkBufferMemoryRequirementsInfo2 = VkBufferMemoryRequirementsInfo2
-  { -- No documentation found for Nested "VkBufferMemoryRequirementsInfo2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBufferMemoryRequirementsInfo2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBufferMemoryRequirementsInfo2" "vkBuffer"
+  , -- | @buffer@ is the buffer to query.
   vkBuffer :: VkBuffer
   }
   deriving (Eq, Show)
@@ -98,12 +206,53 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferMemoryRequirementsInfo2))
                 *> poke (ptr `plusPtr` 16) (vkBuffer (poked :: VkBufferMemoryRequirementsInfo2))
 -- | VkImageMemoryRequirementsInfo2 - (None)
+--
+-- == Valid Usage
+--
+-- -   If @image@ was created with a /multi-planar/ format and the
+--     @VK_IMAGE_CREATE_DISJOINT_BIT@ flag, there /must/ be a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+--     in the @pNext@ chain of the 'VkImageMemoryRequirementsInfo2'
+--     structure
+--
+-- -   If @image@ was not created with the @VK_IMAGE_CREATE_DISJOINT_BIT@
+--     flag, there /must/ not be a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+--     in the @pNext@ chain of the 'VkImageMemoryRequirementsInfo2'
+--     structure
+--
+-- -   If @image@ was created with a single-plane format, there /must/ not
+--     be a
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+--     in the @pNext@ chain of the 'VkImageMemoryRequirementsInfo2'
+--     structure
+--
+-- -   If @image@ was created with the
+--     VK_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
+--     @VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetImageMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2KHR'
 data VkImageMemoryRequirementsInfo2 = VkImageMemoryRequirementsInfo2
-  { -- No documentation found for Nested "VkImageMemoryRequirementsInfo2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageMemoryRequirementsInfo2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageMemoryRequirementsInfo2" "vkImage"
+  , -- | @image@ is the image to query.
   vkImage :: VkImage
   }
   deriving (Eq, Show)
@@ -118,12 +267,28 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageMemoryRequirementsInfo2))
                 *> poke (ptr `plusPtr` 16) (vkImage (poked :: VkImageMemoryRequirementsInfo2))
 -- | VkImageSparseMemoryRequirementsInfo2 - (None)
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetImageSparseMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2KHR'
 data VkImageSparseMemoryRequirementsInfo2 = VkImageSparseMemoryRequirementsInfo2
-  { -- No documentation found for Nested "VkImageSparseMemoryRequirementsInfo2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageSparseMemoryRequirementsInfo2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageSparseMemoryRequirementsInfo2" "vkImage"
+  , -- | @image@ is the image to query.
   vkImage :: VkImage
   }
   deriving (Eq, Show)
@@ -138,12 +303,30 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageSparseMemoryRequirementsInfo2))
                 *> poke (ptr `plusPtr` 16) (vkImage (poked :: VkImageSparseMemoryRequirementsInfo2))
 -- | VkMemoryRequirements2 - Structure specifying memory requirements
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedRequirements'
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetBufferMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetBufferMemoryRequirements2KHR',
+-- 'vkGetImageMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageMemoryRequirements2KHR'
 data VkMemoryRequirements2 = VkMemoryRequirements2
-  { -- No documentation found for Nested "VkMemoryRequirements2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryRequirements2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryRequirements2" "vkMemoryRequirements"
+  , -- | @memoryRequirements@ is a structure of type
+  -- 'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'
+  -- describing the memory requirements of the resource.
   vkMemoryRequirements :: VkMemoryRequirements
   }
   deriving (Eq, Show)
@@ -158,12 +341,28 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryRequirements2))
                 *> poke (ptr `plusPtr` 16) (vkMemoryRequirements (poked :: VkMemoryRequirements2))
 -- | VkSparseImageMemoryRequirements2 - (None)
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryRequirements',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetImageSparseMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2.vkGetImageSparseMemoryRequirements2KHR'
 data VkSparseImageMemoryRequirements2 = VkSparseImageMemoryRequirements2
-  { -- No documentation found for Nested "VkSparseImageMemoryRequirements2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSparseImageMemoryRequirements2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSparseImageMemoryRequirements2" "vkMemoryRequirements"
+  , -- | @memoryRequirements@ is a structure of type
+  -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryRequirements'
+  -- describing the memory requirements of the sparse image.
   vkMemoryRequirements :: VkSparseImageMemoryRequirements
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_physical_device_properties2.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_physical_device_properties2.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_physical_device_properties2.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_physical_device_properties2.hs
@@ -101,32 +101,317 @@
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 :: VkStructureType
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2 = VkStructureType 1000059008
 -- | vkGetPhysicalDeviceFeatures2 - Reports capabilities of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     supported features.
+--
+-- -   @pFeatures@ is a pointer to a 'VkPhysicalDeviceFeatures2' structure
+--     in which the physical device features are returned.
+--
+-- = Description
+--
+-- Each structure in @pFeatures@ and its @pNext@ chain contain members
+-- corresponding to fine-grained features. @vkGetPhysicalDeviceFeatures2@
+-- writes each member to a boolean value indicating whether that feature is
+-- supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pFeatures@ /must/ be a valid pointer to a
+--     @VkPhysicalDeviceFeatures2@ structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceFeatures2'
 foreign import ccall "vkGetPhysicalDeviceFeatures2" vkGetPhysicalDeviceFeatures2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFeatures" ::: Ptr VkPhysicalDeviceFeatures2) -> IO ()
 -- | vkGetPhysicalDeviceProperties2 - Returns properties of a physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pProperties@ points to an instance of the
+--     'VkPhysicalDeviceProperties2' structure, that will be filled with
+--     returned information.
+--
+-- = Description
+--
+-- Each structure in @pProperties@ and its @pNext@ chain contain members
+-- corresponding to properties or implementation-dependent limits.
+-- @vkGetPhysicalDeviceProperties2@ writes each member to a value
+-- indicating the value of that property or limit.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pProperties@ /must/ be a valid pointer to a
+--     @VkPhysicalDeviceProperties2@ structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceProperties2'
 foreign import ccall "vkGetPhysicalDeviceProperties2" vkGetPhysicalDeviceProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pProperties" ::: Ptr VkPhysicalDeviceProperties2) -> IO ()
 -- | vkGetPhysicalDeviceFormatProperties2 - Lists physical device’s format
 -- capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     format properties.
+--
+-- -   @format@ is the format whose properties are queried.
+--
+-- -   @pFormatProperties@ is a pointer to a 'VkFormatProperties2'
+--     structure in which physical device properties for @format@ are
+--     returned.
+--
+-- = Description
+--
+-- @vkGetPhysicalDeviceFormatProperties2@ behaves similarly to
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFormatProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @pFormatProperties@ /must/ be a valid pointer to a
+--     @VkFormatProperties2@ structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkFormatProperties2',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkGetPhysicalDeviceFormatProperties2" vkGetPhysicalDeviceFormatProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("pFormatProperties" ::: Ptr VkFormatProperties2) -> IO ()
 -- | vkGetPhysicalDeviceImageFormatProperties2 - Lists physical device’s
 -- image format capabilities
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     image capabilities.
+--
+-- -   @pImageFormatInfo@ points to an instance of the
+--     'VkPhysicalDeviceImageFormatInfo2' structure, describing the
+--     parameters that would be consumed by
+--     'Graphics.Vulkan.Core10.Image.vkCreateImage'.
+--
+-- -   @pImageFormatProperties@ points to an instance of the
+--     'VkImageFormatProperties2' structure in which capabilities are
+--     returned.
+--
+-- = Description
+--
+-- @vkGetPhysicalDeviceImageFormatProperties2@ behaves similarly to
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage
+--
+-- -   If the @pNext@ chain of @pImageFormatProperties@ contains an
+--     instance of
+--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferUsageANDROID',
+--     the @pNext@ chain of @pImageFormatInfo@ /must/ contain an instance
+--     of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalImageFormatInfo'
+--     with @handleType@ set to
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pImageFormatInfo@ /must/ be a valid pointer to a valid
+--     @VkPhysicalDeviceImageFormatInfo2@ structure
+--
+-- -   @pImageFormatProperties@ /must/ be a valid pointer to a
+--     @VkImageFormatProperties2@ structure
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_FORMAT_NOT_SUPPORTED@
+--
+-- = See Also
+--
+-- 'VkImageFormatProperties2',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceImageFormatInfo2'
 foreign import ccall "vkGetPhysicalDeviceImageFormatProperties2" vkGetPhysicalDeviceImageFormatProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pImageFormatInfo" ::: Ptr VkPhysicalDeviceImageFormatInfo2) -> ("pImageFormatProperties" ::: Ptr VkImageFormatProperties2) -> IO VkResult
 -- | vkGetPhysicalDeviceQueueFamilyProperties2 - Reports properties of the
 -- queues of the specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pQueueFamilyPropertyCount@ is a pointer to an integer related to
+--     the number of queue families available or queried, as described in
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'.
+--
+-- -   @pQueueFamilyProperties@ is either @NULL@ or a pointer to an array
+--     of 'VkQueueFamilyProperties2' structures.
+--
+-- = Description
+--
+-- @vkGetPhysicalDeviceQueueFamilyProperties2@ behaves similarly to
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pQueueFamilyPropertyCount@ /must/ be a valid pointer to a
+--     @uint32_t@ value
+--
+-- -   If the value referenced by @pQueueFamilyPropertyCount@ is not @0@,
+--     and @pQueueFamilyProperties@ is not @NULL@, @pQueueFamilyProperties@
+--     /must/ be a valid pointer to an array of @pQueueFamilyPropertyCount@
+--     @VkQueueFamilyProperties2@ structures
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkQueueFamilyProperties2'
 foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties2" vkGetPhysicalDeviceQueueFamilyProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr VkQueueFamilyProperties2) -> IO ()
 -- | vkGetPhysicalDeviceMemoryProperties2 - Reports memory information for
 -- the specified physical device
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the handle to the device to query.
+--
+-- -   @pMemoryProperties@ points to an instance of
+--     @VkPhysicalDeviceMemoryProperties2@ structure in which the
+--     properties are returned.
+--
+-- = Description
+--
+-- @vkGetPhysicalDeviceMemoryProperties2@ behaves similarly to
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceMemoryProperties',
+-- with the ability to return extended information in a @pNext@ chain of
+-- output structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pMemoryProperties@ /must/ be a valid pointer to a
+--     @VkPhysicalDeviceMemoryProperties2@ structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceMemoryProperties2'
 foreign import ccall "vkGetPhysicalDeviceMemoryProperties2" vkGetPhysicalDeviceMemoryProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pMemoryProperties" ::: Ptr VkPhysicalDeviceMemoryProperties2) -> IO ()
 -- | vkGetPhysicalDeviceSparseImageFormatProperties2 - Retrieve properties of
 -- an image format applied to sparse images
+--
+-- = Parameters
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     sparse image capabilities.
+--
+-- -   @pFormatInfo@ is a pointer to a structure of type
+--     'VkPhysicalDeviceSparseImageFormatInfo2' containing input parameters
+--     to the command.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     sparse format properties available or queried, as described below.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'VkSparseImageFormatProperties2' structures.
+--
+-- = Description
+--
+-- @vkGetPhysicalDeviceSparseImageFormatProperties2@ behaves identically to
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties',
+-- with the ability to return extended information by adding extension
+-- structures to the @pNext@ chain of its @pProperties@ parameter.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pFormatInfo@ /must/ be a valid pointer to a valid
+--     @VkPhysicalDeviceSparseImageFormatInfo2@ structure
+--
+-- -   @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@ @VkSparseImageFormatProperties2@
+--     structures
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceSparseImageFormatInfo2',
+-- 'VkSparseImageFormatProperties2'
 foreign import ccall "vkGetPhysicalDeviceSparseImageFormatProperties2" vkGetPhysicalDeviceSparseImageFormatProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFormatInfo" ::: Ptr VkPhysicalDeviceSparseImageFormatInfo2) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkSparseImageFormatProperties2) -> IO ()
 -- | VkPhysicalDeviceFeatures2 - Structure describing the fine-grained
 -- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The @VkPhysicalDeviceFeatures2@ structure is defined as:
+--
+-- = Description
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @features@ is a structure of type
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceFeatures'
+--     describing the fine-grained features of the Vulkan 1.0 API.
+--
+-- The @pNext@ chain of this structure is used to extend the structure with
+-- features defined by extensions. This structure /can/ be used in
+-- 'vkGetPhysicalDeviceFeatures2' or /can/ be in the @pNext@ chain of a
+-- 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo' structure, in which
+-- case it controls which features are enabled in the device in lieu of
+-- @pEnabledFeatures@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceFeatures',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceFeatures2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFeatures2KHR'
 data VkPhysicalDeviceFeatures2 = VkPhysicalDeviceFeatures2
-  { -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "vkFeatures"
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "features"
   vkFeatures :: VkPhysicalDeviceFeatures
   }
   deriving (Eq, Show)
@@ -142,12 +427,55 @@
                 *> poke (ptr `plusPtr` 16) (vkFeatures (poked :: VkPhysicalDeviceFeatures2))
 -- | VkPhysicalDeviceProperties2 - Structure specifying physical device
 -- properties
+--
+-- = Description
+--
+-- The @pNext@ chain of this structure is used to extend the structure with
+-- properties defined by extensions.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_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
+--     'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',
+--     'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.VkPhysicalDeviceConservativeRasterizationPropertiesEXT',
+--     'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPhysicalDeviceDiscardRectanglePropertiesEXT',
+--     'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.VkPhysicalDeviceExternalMemoryHostPropertiesEXT',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceIDProperties',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.VkPhysicalDeviceMaintenance3Properties',
+--     'Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPhysicalDevicePointClippingProperties',
+--     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkPhysicalDeviceProtectedMemoryProperties',
+--     'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.VkPhysicalDevicePushDescriptorPropertiesKHR',
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT',
+--     'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT',
+--     'Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties.VkPhysicalDeviceShaderCorePropertiesAMD',
+--     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup.VkPhysicalDeviceSubgroupProperties',
+--     or
+--     'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceProperties2KHR'
 data VkPhysicalDeviceProperties2 = VkPhysicalDeviceProperties2
-  { -- No documentation found for Nested "VkPhysicalDeviceProperties2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceProperties2" "vkProperties"
+  , -- | @properties@ is a structure of type
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceProperties'
+  -- describing the properties of the physical device. This structure is
+  -- written with the same values as if it were written by
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceProperties'.
   vkProperties :: VkPhysicalDeviceProperties
   }
   deriving (Eq, Show)
@@ -162,12 +490,27 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceProperties2))
                 *> poke (ptr `plusPtr` 16) (vkProperties (poked :: VkPhysicalDeviceProperties2))
 -- | VkFormatProperties2 - Structure specifying image format properties
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkFormatProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceFormatProperties2KHR'
 data VkFormatProperties2 = VkFormatProperties2
-  { -- No documentation found for Nested "VkFormatProperties2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkFormatProperties2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkFormatProperties2" "vkFormatProperties"
+  , -- | @formatProperties@ is a structure of type
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkFormatProperties'
+  -- describing features supported by the requested format.
   vkFormatProperties :: VkFormatProperties
   }
   deriving (Eq, Show)
@@ -183,12 +526,55 @@
                 *> poke (ptr `plusPtr` 16) (vkFormatProperties (poked :: VkFormatProperties2))
 -- | VkImageFormatProperties2 - Structure specifying a image format
 -- properties
+--
+-- = Description
+--
+-- If the combination of parameters to
+-- @vkGetPhysicalDeviceImageFormatProperties2@ is not supported by the
+-- implementation for use in 'Graphics.Vulkan.Core10.Image.vkCreateImage',
+-- 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. This exeption only applies to
+-- @imageFormatProperties@, not @sType@, @pNext@, or any structures chained
+-- from @pNext@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_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
+--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferUsageANDROID',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalImageFormatProperties',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionImageFormatProperties',
+--     or
+--     'Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.VkTextureLODGatherFormatPropertiesAMD'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceImageFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2KHR'
 data VkImageFormatProperties2 = VkImageFormatProperties2
-  { -- No documentation found for Nested "VkImageFormatProperties2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageFormatProperties2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. The
+  -- @pNext@ chain of @VkImageFormatProperties2@ is used to allow the
+  -- specification of additional capabilities to be returned from
+  -- @vkGetPhysicalDeviceImageFormatProperties2@.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageFormatProperties2" "vkImageFormatProperties"
+  , -- | @imageFormatProperties@ is an instance of a
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageFormatProperties'
+  -- structure in which capabilities are returned.
   vkImageFormatProperties :: VkImageFormatProperties
   }
   deriving (Eq, Show)
@@ -204,20 +590,81 @@
                 *> poke (ptr `plusPtr` 16) (vkImageFormatProperties (poked :: VkImageFormatProperties2))
 -- | VkPhysicalDeviceImageFormatInfo2 - Structure specifying image creation
 -- parameters
+--
+-- = Description
+--
+-- The members of @VkPhysicalDeviceImageFormatInfo2@ correspond to the
+-- arguments to
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties',
+-- with @sType@ and @pNext@ added for extensibility.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalImageFormatInfo'
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @type@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType' value
+--
+-- -   @tiling@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling' value
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+--     values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageCreateFlagBits'
+--     values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkFormat',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageCreateFlags',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceImageFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceImageFormatProperties2KHR'
 data VkPhysicalDeviceImageFormatInfo2 = VkPhysicalDeviceImageFormatInfo2
-  { -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure. The
+  -- @pNext@ chain of @VkPhysicalDeviceImageFormatInfo2@ is used to provide
+  -- additional image parameters to
+  -- @vkGetPhysicalDeviceImageFormatProperties2@.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkFormat"
+  , -- | @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' value indicating
+  -- the image format, corresponding to
+  -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@format@.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkType"
+  , -- | @type@ is a 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType'
+  -- value indicating the image type, corresponding to
+  -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@imageType@.
   vkType :: VkImageType
-  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkTiling"
+  , -- | @tiling@ is a
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling' value
+  -- indicating the image tiling, corresponding to
+  -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@tiling@.
   vkTiling :: VkImageTiling
-  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkUsage"
+  , -- | @usage@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+  -- indicating the intended usage of the image, corresponding to
+  -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@usage@.
   vkUsage :: VkImageUsageFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkFlags"
+  , -- | @flags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageCreateFlagBits'
+  -- indicating additional parameters of the image, corresponding to
+  -- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@flags@.
   vkFlags :: VkImageCreateFlags
   }
   deriving (Eq, Show)
@@ -241,12 +688,28 @@
                 *> poke (ptr `plusPtr` 32) (vkFlags (poked :: VkPhysicalDeviceImageFormatInfo2))
 -- | VkQueueFamilyProperties2 - Structure providing information about a queue
 -- family
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceQueueFamilyProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2KHR'
 data VkQueueFamilyProperties2 = VkQueueFamilyProperties2
-  { -- No documentation found for Nested "VkQueueFamilyProperties2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkQueueFamilyProperties2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkQueueFamilyProperties2" "vkQueueFamilyProperties"
+  , -- | @queueFamilyProperties@ is a structure of type
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkQueueFamilyProperties'
+  -- which is populated with the same values as in
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'.
   vkQueueFamilyProperties :: VkQueueFamilyProperties
   }
   deriving (Eq, Show)
@@ -262,12 +725,29 @@
                 *> poke (ptr `plusPtr` 16) (vkQueueFamilyProperties (poked :: VkQueueFamilyProperties2))
 -- | VkPhysicalDeviceMemoryProperties2 - Structure specifying physical device
 -- memory properties
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceMemoryProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceMemoryProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceMemoryProperties2KHR'
 data VkPhysicalDeviceMemoryProperties2 = VkPhysicalDeviceMemoryProperties2
-  { -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties2" "vkMemoryProperties"
+  , -- | @memoryProperties@ is a structure of type
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceMemoryProperties'
+  -- which is populated with the same values as in
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceMemoryProperties'.
   vkMemoryProperties :: VkPhysicalDeviceMemoryProperties
   }
   deriving (Eq, Show)
@@ -283,12 +763,29 @@
                 *> poke (ptr `plusPtr` 16) (vkMemoryProperties (poked :: VkPhysicalDeviceMemoryProperties2))
 -- | VkSparseImageFormatProperties2 - Structure specifying sparse image
 -- format properties
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceSparseImageFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2KHR'
 data VkSparseImageFormatProperties2 = VkSparseImageFormatProperties2
-  { -- No documentation found for Nested "VkSparseImageFormatProperties2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSparseImageFormatProperties2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSparseImageFormatProperties2" "vkProperties"
+  , -- | @properties@ is a structure of type
+  -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageFormatProperties'
+  -- which is populated with the same values as in
+  -- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'.
   vkProperties :: VkSparseImageFormatProperties
   }
   deriving (Eq, Show)
@@ -304,20 +801,67 @@
                 *> poke (ptr `plusPtr` 16) (vkProperties (poked :: VkSparseImageFormatProperties2))
 -- | VkPhysicalDeviceSparseImageFormatInfo2 - Structure specifying sparse
 -- image format inputs
+--
+-- == Valid Usage
+--
+-- -   @samples@ /must/ be a bit value that is set in
+--     @VkImageFormatProperties@::@sampleCounts@ returned by
+--     @vkGetPhysicalDeviceImageFormatProperties@ with @format@, @type@,
+--     @tiling@, and @usage@ equal to those in this command and @flags@
+--     equal to the value that is set in @VkImageCreateInfo@::@flags@ when
+--     the image is created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @type@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType' value
+--
+-- -   @samples@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+--     value
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+--     values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @tiling@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling' value
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkFormat',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceSparseImageFormatProperties2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceSparseImageFormatProperties2KHR'
 data VkPhysicalDeviceSparseImageFormatInfo2 = VkPhysicalDeviceSparseImageFormatInfo2
-  { -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkFormat"
+  , -- | @format@ is the image format.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkType"
+  , -- | @type@ is the dimensionality of image.
   vkType :: VkImageType
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkSamples"
+  , -- | @samples@ is the number of samples per texel as defined in
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'.
   vkSamples :: VkSampleCountFlagBits
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkUsage"
+  , -- | @usage@ is a bitmask describing the intended usage of the image.
   vkUsage :: VkImageUsageFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkTiling"
+  , -- | @tiling@ is the tiling arrangement of the data elements in memory.
   vkTiling :: VkImageTiling
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance1.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance1.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance1.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance1.hs
@@ -59,6 +59,16 @@
 -- ** VkCommandPoolTrimFlags
 
 -- | VkCommandPoolTrimFlags - Reserved for future use
+--
+-- = Description
+--
+-- @VkCommandPoolTrimFlags@ is a bitmask type for setting a mask, but is
+-- currently reserved for future use.
+--
+-- = See Also
+--
+-- 'vkTrimCommandPool',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.vkTrimCommandPoolKHR'
 newtype VkCommandPoolTrimFlags = VkCommandPoolTrimFlags VkFlags
   deriving (Eq, Ord, Storable, Bits, FiniteBits)
 
@@ -90,4 +100,75 @@
 pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT :: VkFormatFeatureFlagBits
 pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT = VkFormatFeatureFlagBits 0x00008000
 -- | vkTrimCommandPool - Trim a command pool
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that owns the command pool.
+--
+-- -   @commandPool@ is the command pool to trim.
+--
+-- -   @flags@ is reserved for future use.
+--
+-- = Description
+--
+-- Trimming a command pool recycles unused memory from the command pool
+-- back to the system. Command buffers allocated from the pool are not
+-- affected by the command.
+--
+-- __Note__
+--
+-- This command provides applications with some control over the internal
+-- memory allocations used by command pools.
+--
+-- Unused memory normally arises from command buffers that have been
+-- recorded and later reset, such that they are no longer using the memory.
+-- On reset, a command buffer can return memory to its command pool, but
+-- the only way to release memory from a command pool to the system
+-- requires calling
+-- 'Graphics.Vulkan.Core10.CommandPool.vkResetCommandPool', which cannot be
+-- executed while any command buffers from that pool are still in use.
+-- Subsequent recording operations into command buffers will re-use this
+-- memory but since total memory requirements fluctuate over time, unused
+-- memory can accumulate.
+--
+-- In this situation, trimming a command pool /may/ be useful to return
+-- unused memory back to the system, returning the total outstanding memory
+-- allocated by the pool back to a more “average” value.
+--
+-- Implementations utilize many internal allocation strategies that make it
+-- impossible to guarantee that all unused memory is released back to the
+-- system. For instance, an implementation of a command pool /may/ involve
+-- allocating memory in bulk from the system and sub-allocating from that
+-- memory. In such an implementation any live command buffer that holds a
+-- reference to a bulk allocation would prevent that allocation from being
+-- freed, even if only a small proportion of the bulk allocation is in use.
+--
+-- In most cases trimming will result in a reduction in allocated but
+-- unused memory, but it does not guarantee the “ideal” behaviour.
+--
+-- Trimming /may/ be an expensive operation, and /should/ not be called
+-- frequently. Trimming /should/ be treated as a way to relieve memory
+-- pressure after application-known points when there exists enough unused
+-- memory that the cost of trimming is “worth” it.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @commandPool@ /must/ be a valid @VkCommandPool@ handle
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @commandPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandPool@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPool',
+-- 'VkCommandPoolTrimFlags',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkTrimCommandPool" vkTrimCommandPool :: ("device" ::: VkDevice) -> ("commandPool" ::: VkCommandPool) -> ("flags" ::: VkCommandPoolTrimFlags) -> IO ()
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance2.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance2.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance2.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance2.hs
@@ -76,6 +76,10 @@
 -- ** VkPointClippingBehavior
 
 -- | VkPointClippingBehavior - Enum specifying the point clipping behaviour
+--
+-- = See Also
+--
+-- 'VkPhysicalDevicePointClippingProperties'
 newtype VkPointClippingBehavior = VkPointClippingBehavior Int32
   deriving (Eq, Ord, Storable)
 
@@ -95,16 +99,38 @@
                         )
                     )
 
--- No documentation found for Nested "VkPointClippingBehavior" "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"
+-- | @VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES@ specifies that the
+-- primitive is discarded if the vertex lies outside any clip plane,
+-- including the planes bounding the view volume.
 pattern VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES :: VkPointClippingBehavior
 pattern VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = VkPointClippingBehavior 0
 
--- No documentation found for Nested "VkPointClippingBehavior" "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"
+-- | @VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY@ specifies that the
+-- primitive is discarded only if the vertex lies outside any user clip
+-- plane.
 pattern VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY :: VkPointClippingBehavior
 pattern VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = VkPointClippingBehavior 1
 -- ** VkTessellationDomainOrigin
 
 -- | VkTessellationDomainOrigin - Enum describing tessellation domain origin
+--
+-- = Description
+--
+-- -   @VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT@ specifies that the origin
+--     of the domain space is in the upper left corner, as shown in figure
+--     [{html_spec_relative}#img-tessellation-topology-ul](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#img-tessellation-topology-ul).
+--
+-- -   @VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT@ specifies that the origin
+--     of the domain space is in the lower left corner, as shown in figure
+--     [{html_spec_relative}#img-tessellation-topology-ll](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#img-tessellation-topology-ll).
+--
+-- This enum affects how the @VertexOrderCw@ and @VertexOrderCcw@
+-- tessellation execution modes are interpreted, since the winding is
+-- defined relative to the orientation of the domain.
+--
+-- = See Also
+--
+-- 'VkPipelineTessellationDomainOriginStateCreateInfo'
 newtype VkTessellationDomainOrigin = VkTessellationDomainOrigin Int32
   deriving (Eq, Ord, Storable)
 
@@ -157,12 +183,39 @@
 pattern VK_IMAGE_CREATE_EXTENDED_USAGE_BIT = VkImageCreateFlagBits 0x00000100
 -- | VkInputAttachmentAspectReference - Structure specifying a subpass\/input
 -- attachment pair and an aspect mask that /can/ be read.
+--
+-- == Valid Usage
+--
+-- -   There /must/ be an input attachment at
+--     @pCreateInfo@::@pSubpasses@[@subpass@].@pInputAttachments@[@inputAttachmentIndex@].
+--
+-- -   The specified input attachment /must/ have more than one aspect
+--     mask.
+--
+-- -   @aspectMask@ /must/ be a subset of the aspect masks in the specified
+--     input attachment.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @aspectMask@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
+--     values
+--
+-- -   @aspectMask@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
+-- 'VkRenderPassInputAttachmentAspectCreateInfo'
 data VkInputAttachmentAspectReference = VkInputAttachmentAspectReference
-  { -- No documentation found for Nested "VkInputAttachmentAspectReference" "vkSubpass"
+  { -- | @subpass@ is an index into the @pSubpasses@ array of the parent
+  -- @VkRenderPassCreateInfo@ structure.
   vkSubpass :: Word32
-  , -- No documentation found for Nested "VkInputAttachmentAspectReference" "vkInputAttachmentIndex"
+  , -- | @inputAttachmentIndex@ is an index into the @pInputAttachments@ of the
+  -- specified subpass.
   vkInputAttachmentIndex :: Word32
-  , -- No documentation found for Nested "VkInputAttachmentAspectReference" "vkAspectMask"
+  , -- | @aspectMask@ is a mask of which aspect(s) /can/ be accessed within the
+  -- specified subpass.
   vkAspectMask :: VkImageAspectFlags
   }
   deriving (Eq, Show)
@@ -178,14 +231,34 @@
                 *> poke (ptr `plusPtr` 8) (vkAspectMask (poked :: VkInputAttachmentAspectReference))
 -- | VkRenderPassInputAttachmentAspectCreateInfo - Structure specifying, for
 -- a given subpass\/input attachment pair, which aspect /can/ be read.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO@
+--
+-- -   @pAspectReferences@ /must/ be a valid pointer to an array of
+--     @aspectReferenceCount@ valid @VkInputAttachmentAspectReference@
+--     structures
+--
+-- -   @aspectReferenceCount@ /must/ be greater than @0@
+--
+-- = See Also
+--
+-- 'VkInputAttachmentAspectReference',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkRenderPassInputAttachmentAspectCreateInfo = VkRenderPassInputAttachmentAspectCreateInfo
-  { -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkAspectReferenceCount"
+  , -- | @aspectReferenceCount@ is the number of elements in the
+  -- pAspectReferences array.
   vkAspectReferenceCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkPAspectReferences"
+  , -- | @pAspectReferences@ points to an array of @aspectReferenceCount@ number
+  -- of 'VkInputAttachmentAspectReference' structures describing which
+  -- aspect(s) /can/ be accessed for a given input attachment within a given
+  -- subpass.
   vkPAspectReferences :: Ptr VkInputAttachmentAspectReference
   }
   deriving (Eq, Show)
@@ -203,12 +276,40 @@
                 *> poke (ptr `plusPtr` 24) (vkPAspectReferences (poked :: VkRenderPassInputAttachmentAspectCreateInfo))
 -- | VkPhysicalDevicePointClippingProperties - Structure describing the point
 -- clipping behavior supported by an implementation
+--
+-- = Members
+--
+-- The members of the @VkPhysicalDevicePointClippingProperties@ structure
+-- describe the following implementation-dependent limit:
+--
+-- = Description
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @pointClippingBehavior@ is the point clipping behavior supported by
+--     the implementation, and is of type 'VkPointClippingBehavior'.
+--
+-- If the @VkPhysicalDevicePointClippingProperties@ structure is included
+-- in the @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES@
+--
+-- = See Also
+--
+-- 'VkPointClippingBehavior', 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDevicePointClippingProperties = VkPhysicalDevicePointClippingProperties
-  { -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "vkPointClippingBehavior"
+  , -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "pointClippingBehavior"
   vkPointClippingBehavior :: VkPointClippingBehavior
   }
   deriving (Eq, Show)
@@ -223,12 +324,44 @@
                 *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDevicePointClippingProperties))
                 *> poke (ptr `plusPtr` 16) (vkPointClippingBehavior (poked :: VkPhysicalDevicePointClippingProperties))
 -- | VkImageViewUsageCreateInfo - Specify the intended usage of an image view
+--
+-- = Description
+--
+-- When this structure is chained to @VkImageViewCreateInfo@ the @usage@
+-- field overrides the implicit @usage@ parameter inherited from image
+-- creation time and its value is used instead for the purposes of
+-- determining the valid usage conditions of
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageViewCreateInfo'.
+--
+-- == Valid Usage
+--
+-- -   @usage@ /must/ not include any set bits that were not set in the
+--     @usage@ member of the
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' structure used to
+--     create the image this image view is created from.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO@
+--
+-- -   @usage@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+--     values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImageViewUsageCreateInfo = VkImageViewUsageCreateInfo
-  { -- No documentation found for Nested "VkImageViewUsageCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageViewUsageCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageViewUsageCreateInfo" "vkUsage"
+  , -- | @usage@ is a bitmask describing the allowed usages of the image view.
+  -- See 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+  -- for a description of the supported bits.
   vkUsage :: VkImageUsageFlags
   }
   deriving (Eq, Show)
@@ -244,12 +377,34 @@
                 *> poke (ptr `plusPtr` 16) (vkUsage (poked :: VkImageViewUsageCreateInfo))
 -- | VkPipelineTessellationDomainOriginStateCreateInfo - Structure specifying
 -- the orientation of the tessellation domain
+--
+-- = Description
+--
+-- If the @VkPipelineTessellationDomainOriginStateCreateInfo@ structure is
+-- included in the @pNext@ chain of
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineTessellationStateCreateInfo',
+-- it controls the origin of the tessellation domain. If this structure is
+-- not present, it is as if @domainOrigin@ were
+-- @VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO@
+--
+-- -   @domainOrigin@ /must/ be a valid 'VkTessellationDomainOrigin' value
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'VkTessellationDomainOrigin'
 data VkPipelineTessellationDomainOriginStateCreateInfo = VkPipelineTessellationDomainOriginStateCreateInfo
-  { -- No documentation found for Nested "VkPipelineTessellationDomainOriginStateCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineTessellationDomainOriginStateCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineTessellationDomainOriginStateCreateInfo" "vkDomainOrigin"
+  , -- | @domainOrigin@ controls the origin of the tessellation domain space, and
+  -- is of type 'VkTessellationDomainOrigin'.
   vkDomainOrigin :: VkTessellationDomainOrigin
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance3.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance3.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance3.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance3.hs
@@ -50,17 +50,106 @@
 pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = VkStructureType 1000168001
 -- | vkGetDescriptorSetLayoutSupport - Query whether a descriptor set layout
 -- can be created
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that would create the descriptor set
+--     layout.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo'
+--     structure specifying the state of the descriptor set layout object.
+--
+-- -   @pSupport@ points to a 'VkDescriptorSetLayoutSupport' structure in
+--     which information about support for the descriptor set layout object
+--     is returned.
+--
+-- = Description
+--
+-- Some implementations have limitations on what fits in a descriptor set
+-- which are not easily expressible in terms of existing limits like
+-- @maxDescriptorSet@*, for example if all descriptor types share a limited
+-- space in memory but each descriptor is a different size or alignment.
+-- This command returns information about whether a descriptor set
+-- satisfies this limit. If the descriptor set layout satisfies the
+-- 'VkPhysicalDeviceMaintenance3Properties'::@maxPerSetDescriptors@ limit,
+-- this command is guaranteed to return @VK_TRUE@ in
+-- 'VkDescriptorSetLayoutSupport'::@supported@. If the descriptor set
+-- layout exceeds the
+-- 'VkPhysicalDeviceMaintenance3Properties'::@maxPerSetDescriptors@ limit,
+-- whether the descriptor set layout is supported is
+-- implementation-dependent and /may/ depend on whether the descriptor
+-- sizes and alignments cause the layout to exceed an internal limit.
+--
+-- This command does not consider other limits such as
+-- @maxPerStageDescriptor@*, and so a descriptor set layout that is
+-- supported according to this command /must/ still satisfy the pipeline
+-- layout limits such as @maxPerStageDescriptor@* in order to be used in a
+-- pipeline layout.
+--
+-- __Note__
+--
+-- This is a @VkDevice@ query rather than @VkPhysicalDevice@ because the
+-- answer /may/ depend on enabled features.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDescriptorSetLayoutCreateInfo@ structure
+--
+-- -   @pSupport@ /must/ be a valid pointer to a
+--     @VkDescriptorSetLayoutSupport@ structure
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo',
+-- 'VkDescriptorSetLayoutSupport',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
 foreign import ccall "vkGetDescriptorSetLayoutSupport" vkGetDescriptorSetLayoutSupport :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkDescriptorSetLayoutCreateInfo) -> ("pSupport" ::: Ptr VkDescriptorSetLayoutSupport) -> IO ()
 -- | VkPhysicalDeviceMaintenance3Properties - Structure describing descriptor
 -- set properties
+--
+-- = Members
+--
+-- The members of the @VkPhysicalDeviceMaintenance3Properties@ structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- -   @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 'vkGetDescriptorSetLayoutSupport'.
+--
+-- -   @maxMemoryAllocationSize@ is the maximum size of a memory allocation
+--     that /can/ be created, even if there is more space available in the
+--     heap.
+--
+-- If the @VkPhysicalDeviceMaintenance3Properties@ structure is included in
+-- the @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES@
+--
+-- = See Also
+--
+-- @VkDeviceSize@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceMaintenance3Properties = VkPhysicalDeviceMaintenance3Properties
-  { -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkMaxPerSetDescriptors"
+  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "maxPerSetDescriptors"
   vkMaxPerSetDescriptors :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkMaxMemoryAllocationSize"
+  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "maxMemoryAllocationSize"
   vkMaxMemoryAllocationSize :: VkDeviceSize
   }
   deriving (Eq, Show)
@@ -78,12 +167,31 @@
                 *> poke (ptr `plusPtr` 24) (vkMaxMemoryAllocationSize (poked :: VkPhysicalDeviceMaintenance3Properties))
 -- | VkDescriptorSetLayoutSupport - Structure returning information about
 -- whether a descriptor set layout can be supported
+--
+-- = Description
+--
+-- @supported@ is set to @VK_TRUE@ if the descriptor set /can/ be created,
+-- or else is set to @VK_FALSE@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkDescriptorSetVariableDescriptorCountLayoutSupportEXT'
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetDescriptorSetLayoutSupport',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance3.vkGetDescriptorSetLayoutSupportKHR'
 data VkDescriptorSetLayoutSupport = VkDescriptorSetLayoutSupport
-  { -- No documentation found for Nested "VkDescriptorSetLayoutSupport" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorSetLayoutSupport" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorSetLayoutSupport" "vkSupported"
+  , -- | @supported@ specifies whether the descriptor set layout /can/ be
+  -- created.
   vkSupported :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_multiview.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_multiview.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_multiview.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_multiview.hs
@@ -47,21 +47,74 @@
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES :: VkStructureType
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES = VkStructureType 1000053002
--- No documentation found for Nested "VkDependencyFlagBits" "VK_DEPENDENCY_VIEW_LOCAL_BIT"
+-- | @VK_DEPENDENCY_VIEW_LOCAL_BIT@ specifies that a [subpass has more than
+-- one
+-- view](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-barriers-subpass-self-dependencies).
 pattern VK_DEPENDENCY_VIEW_LOCAL_BIT :: VkDependencyFlagBits
 pattern VK_DEPENDENCY_VIEW_LOCAL_BIT = VkDependencyFlagBits 0x00000002
 -- | VkPhysicalDeviceMultiviewFeatures - Structure describing multiview
 -- features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the @VkPhysicalDeviceMultiviewFeatures@ structure
+-- describe the following features:
+--
+-- = 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.
+--
+-- -   @multiviewGeometryShader@ specifies whether the implementation
+--     supports multiview rendering within a render pass, with [geometry
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#geometry).
+--     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
+--     [tessellation
+--     shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#tessellation).
+--     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.
+--
+-- If the @VkPhysicalDeviceMultiviewFeatures@ structure is included in the
+-- @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- @VkPhysicalDeviceMultiviewFeatures@ /can/ also be used in the @pNext@
+-- chain of 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo' to enable
+-- the features.
+--
+-- == Valid Usage
+--
+-- -   If @multiviewGeometryShader@ is enabled then @multiview@ /must/ also
+--     be enabled.
+--
+-- -   If @multiviewTessellationShader@ is enabled then @multiview@ /must/
+--     also be enabled.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES@
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceMultiviewFeatures = VkPhysicalDeviceMultiviewFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkMultiview"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiview"
   vkMultiview :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkMultiviewGeometryShader"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiviewGeometryShader"
   vkMultiviewGeometryShader :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkMultiviewTessellationShader"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "multiviewTessellationShader"
   vkMultiviewTessellationShader :: VkBool32
   }
   deriving (Eq, Show)
@@ -81,14 +134,42 @@
                 *> poke (ptr `plusPtr` 24) (vkMultiviewTessellationShader (poked :: VkPhysicalDeviceMultiviewFeatures))
 -- | VkPhysicalDeviceMultiviewProperties - Structure describing multiview
 -- limits that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the @VkPhysicalDeviceMultiviewProperties@ structure
+-- describe the following implementation-dependent limits:
+--
+-- = Description
+--
+-- -   @maxMultiviewViewCount@ is one greater than the maximum view index
+--     that /can/ be used in a subpass.
+--
+-- -   @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.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES@
+--
+-- If the @VkPhysicalDeviceMultiviewProperties@ structure is included in
+-- the @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2',
+-- it is filled with the implementation-dependent limits.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceMultiviewProperties = VkPhysicalDeviceMultiviewProperties
-  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkMaxMultiviewViewCount"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "maxMultiviewViewCount"
   vkMaxMultiviewViewCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkMaxMultiviewInstanceIndex"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "maxMultiviewInstanceIndex"
   vkMaxMultiviewInstanceIndex :: Word32
   }
   deriving (Eq, Show)
@@ -106,22 +187,152 @@
                 *> poke (ptr `plusPtr` 20) (vkMaxMultiviewInstanceIndex (poked :: VkPhysicalDeviceMultiviewProperties))
 -- | VkRenderPassMultiviewCreateInfo - Structure containing multiview info
 -- for all subpasses
+--
+-- = Description
+--
+-- When a subpass uses a non-zero view mask, /multiview/ functionality is
+-- considered to be enabled. Multiview is all-or-nothing for a render pass
+-- - that is, either all subpasses /must/ have a non-zero view mask (though
+-- some subpasses /may/ have only one view) or all /must/ be zero.
+-- Multiview causes all drawing and clear commands in the subpass to behave
+-- as if they were broadcast to each view, where a view is represented by
+-- one layer of the framebuffer attachments. All draws and clears are
+-- broadcast to each /view index/ whose bit is set in the view mask. The
+-- view index is provided in the @ViewIndex@ shader input variable, and
+-- color, depth\/stencil, and input attachments all read\/write the layer
+-- of the framebuffer corresponding to the view index.
+--
+-- If the view mask is zero for all subpasses, multiview is considered to
+-- be disabled and all drawing commands execute normally, without this
+-- additional broadcasting.
+--
+-- Some implementations /may/ not support multiview in conjunction with
+-- [geometry
+-- shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiview-gs)
+-- or [tessellation
+-- shaders](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-multiview-tess).
+--
+-- When multiview is enabled, the @VK_DEPENDENCY_VIEW_LOCAL_BIT@ bit in a
+-- dependency /can/ be used to express a view-local dependency, meaning
+-- that each view in the destination subpass depends on a single view in
+-- the source subpass. Unlike pipeline barriers, a subpass dependency /can/
+-- potentially have a different view mask in the source subpass and the
+-- destination subpass. If the dependency is view-local, then each view
+-- (dstView) in the destination subpass depends on the view dstView +
+-- pViewOffsets[dependency] in the source subpass. If there is not such a
+-- view in the source subpass, then this dependency does not affect that
+-- view in the destination subpass. If the dependency is not view-local,
+-- then all views in the destination subpass depend on all views in the
+-- source subpass, and the view offset is ignored. A non-zero view offset
+-- is not allowed in a self-dependency.
+--
+-- The elements of @pCorrelationMasks@ are a set of masks of views
+-- indicating that views in the same mask /may/ exhibit spatial coherency
+-- between the views, making it more efficient to render them concurrently.
+-- Correlation masks /must/ not have a functional effect on the results of
+-- the multiview rendering.
+--
+-- When multiview is enabled, at the beginning of each subpass all
+-- non-render pass state is undefined. In particular, each time
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBeginRenderPass' or
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdNextSubpass' is
+-- called the graphics pipeline /must/ be bound, any relevant descriptor
+-- sets or vertex\/index buffers /must/ be bound, and any relevant dynamic
+-- state or push constants /must/ be set before they are used.
+--
+-- A multiview subpass /can/ declare that its shaders will write per-view
+-- attributes for all views in a single invocation, by setting the
+-- @VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX@ bit in the subpass
+-- description. The only supported per-view attributes are position and
+-- viewport mask, and per-view position and viewport masks are written to
+-- output array variables decorated with @PositionPerViewNV@ and
+-- @ViewportMaskPerViewNV@, respectively. If
+-- @{html_spec_relative}#VK_NV_viewport_array2@ is not supported and
+-- enabled, @ViewportMaskPerViewNV@ /must/ not be used. Values written to
+-- elements of @PositionPerViewNV@ and @ViewportMaskPerViewNV@ /must/ not
+-- depend on the @ViewIndex@. The shader /must/ also write to an output
+-- variable decorated with @Position@, and the value written to @Position@
+-- /must/ equal the value written to @PositionPerViewNV@[@ViewIndex@].
+-- Similarly, if @ViewportMaskPerViewNV@ is written to then the shader
+-- /must/ also write to an output variable decorated with @ViewportMaskNV@,
+-- and the value written to @ViewportMaskNV@ /must/ equal the value written
+-- to @ViewportMaskPerViewNV@[@ViewIndex@]. Implementations will either use
+-- values taken from @Position@ and @ViewportMaskNV@ and invoke the shader
+-- once for each view, or will use values taken from @PositionPerViewNV@
+-- and @ViewportMaskPerViewNV@ and invoke the shader fewer times. The
+-- values written to @Position@ and @ViewportMaskNV@ /must/ not depend on
+-- the values written to @PositionPerViewNV@ and @ViewportMaskPerViewNV@,
+-- or vice versa (to allow compilers to eliminate the unused outputs). All
+-- attributes that do not have *PerViewNV counterparts /must/ not depend on
+-- @ViewIndex@.
+--
+-- Per-view attributes are all-or-nothing for a subpass. That is, all
+-- pipelines compiled against a subpass that includes the
+-- @VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX@ bit /must/ write
+-- per-view attributes to the *PerViewNV[] shader outputs, in addition to
+-- the non-per-view (e.g. @Position@) outputs. Pipelines compiled against a
+-- subpass that does not include this bit /must/ not include the
+-- *PerViewNV[] outputs in their interfaces.
+--
+-- == Valid Usage
+--
+-- -   If @subpassCount@ is not zero, @subpassCount@ /must/ be equal to the
+--     @subpassCount@ in the @VkRenderPassCreateInfo@ structure at the
+--     start of the chain
+--
+-- -   If @dependencyCount@ is not zero, @dependencyCount@ /must/ be equal
+--     to the @dependencyCount@ in the @VkRenderPassCreateInfo@ structure
+--     at the start of the chain
+--
+-- -   Each view index /must/ not be set in more than one element of
+--     @pCorrelationMasks@
+--
+-- -   If an element of @pViewOffsets@ is non-zero, the corresponding
+--     'Graphics.Vulkan.Core10.Pass.VkSubpassDependency' structure /must/
+--     have different values of @srcSubpass@ and @dstSubpass@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_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
+--
+-- -   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
+--     a valid pointer to an array of @correlationMaskCount@ @uint32_t@
+--     values
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkRenderPassMultiviewCreateInfo = VkRenderPassMultiviewCreateInfo
-  { -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkSubpassCount"
+  , -- | @subpassCount@ is zero or is the number of subpasses in the render pass.
   vkSubpassCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPViewMasks"
+  , -- | @pViewMasks@ points to an array of @subpassCount@ number of view masks,
+  -- where each mask is a bitfield of view indices describing which views
+  -- rendering is broadcast to in each subpass, when multiview is enabled. If
+  -- @subpassCount@ is zero, each view mask is treated as zero.
   vkPViewMasks :: Ptr Word32
-  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkDependencyCount"
+  , -- | @dependencyCount@ is zero or the number of dependencies in the render
+  -- pass.
   vkDependencyCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPViewOffsets"
+  , -- | @pViewOffsets@ points to an array of @dependencyCount@ view offsets, one
+  -- for each dependency. If @dependencyCount@ is zero, each dependency’s
+  -- view offset is treated as zero. Each view offset controls which views in
+  -- the source subpass the views in the destination subpass depend on.
   vkPViewOffsets :: Ptr Int32
-  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkCorrelationMaskCount"
+  , -- | @correlationMaskCount@ is zero or a number of correlation masks.
   vkCorrelationMaskCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPCorrelationMasks"
+  , -- | @pCorrelationMasks@ is an array of view masks indicating sets of views
+  -- that /may/ be more efficient to render concurrently.
   vkPCorrelationMasks :: Ptr Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_sampler_ycbcr_conversion.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_sampler_ycbcr_conversion.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_sampler_ycbcr_conversion.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_sampler_ycbcr_conversion.hs
@@ -144,6 +144,69 @@
 -- ** VkSamplerYcbcrModelConversion
 
 -- | VkSamplerYcbcrModelConversion - Color model component of a color space
+--
+-- = Description
+--
+-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY@ specifies that the
+--     input values to the conversion are unmodified.
+--
+-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY@ specifies no
+--     model conversion but the inputs are range expanded as for Y’CBCR.
+--
+-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709@ specifies the color
+--     model conversion from Y’CBCR to R’G’B\' defined in BT.709 and
+--     described in the “BT.709 Y’CBCR conversion” section of the [Khronos
+--     Data Format
+--     Specification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#data-format).
+--
+-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601@ specifies the color
+--     model conversion from Y’CBCR to R’G’B\' defined in BT.601 and
+--     described in the “BT.601 Y’CBCR conversion” section of the [Khronos
+--     Data Format
+--     Specification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#data-format).
+--
+-- -   @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020@ specifies the color
+--     model conversion from Y’CBCR to R’G’B\' defined in BT.2020 and
+--     described in the “BT.2020 Y’CBCR conversion” section of the [Khronos
+--     Data Format
+--     Specification](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#data-format).
+--
+-- In the @VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_*@ color models, for the
+-- input to the sampler Y’CBCR range expansion and model conversion:
+--
+-- -   the Y (Y\' luma) channel corresponds to the G channel of an RGB
+--     image.
+--
+-- -   the CB (CB or “U” blue color difference) channel corresponds to the
+--     B channel of an RGB image.
+--
+-- -   the CR (CR or “V” red color difference) channel corresponds to the R
+--     channel of an RGB image.
+--
+-- -   the alpha channel, if present, is not modified by color model
+--     conversion.
+--
+-- These rules reflect the mapping of channels after the channel swizzle
+-- operation (controlled by
+-- 'VkSamplerYcbcrConversionCreateInfo'::@components@).
+--
+-- __Note__
+--
+-- For example, an “YUVA” 32-bit format comprising four 8-bit channels can
+-- be implemented as @VK_FORMAT_R8G8B8A8_UNORM@ with a component mapping:
+--
+-- -   @components.a@ = @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
+-- -   @components.r@ = @VK_COMPONENT_SWIZZLE_B@
+--
+-- -   @components.g@ = @VK_COMPONENT_SWIZZLE_R@
+--
+-- -   @components.b@ = @VK_COMPONENT_SWIZZLE_G@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
+-- 'VkSamplerYcbcrConversionCreateInfo'
 newtype VkSamplerYcbcrModelConversion = VkSamplerYcbcrModelConversion Int32
   deriving (Eq, Ord, Storable)
 
@@ -191,6 +254,33 @@
 -- ** VkSamplerYcbcrRange
 
 -- | VkSamplerYcbcrRange - Range of encoded values in a color space
+--
+-- = Description
+--
+-- -   @VK_SAMPLER_YCBCR_RANGE_ITU_FULL@ specifies that the full range of
+--     the encoded values are valid and interpreted according to the ITU
+--     “full range” quantization rules.
+--
+-- -   @VK_SAMPLER_YCBCR_RANGE_ITU_NARROW@ specifies that headroom and foot
+--     room are reserved in the numerical range of encoded values, and the
+--     remaining values are expanded according to the ITU “narrow range”
+--     quantization rules.
+--
+-- The formulae for these conversions is described in the [Sampler Y’CBCR
+-- Range
+-- Expansion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion-rangeexpand)
+-- section of the [Image
+-- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures)
+-- chapter.
+--
+-- No range modification takes place if @ycbcrModel@ is
+-- @VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY@; the @ycbcrRange@ field
+-- of @VkSamplerYcbcrConversionCreateInfo@ is ignored in this case.
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
+-- 'VkSamplerYcbcrConversionCreateInfo'
 newtype VkSamplerYcbcrRange = VkSamplerYcbcrRange Int32
   deriving (Eq, Ord, Storable)
 
@@ -220,6 +310,11 @@
 -- ** VkChromaLocation
 
 -- | VkChromaLocation - Position of downsampled chroma samples
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
+-- 'VkSamplerYcbcrConversionCreateInfo'
 newtype VkChromaLocation = VkChromaLocation Int32
   deriving (Eq, Ord, Storable)
 
@@ -239,113 +334,501 @@
                         )
                     )
 
--- No documentation found for Nested "VkChromaLocation" "VK_CHROMA_LOCATION_COSITED_EVEN"
+-- | @VK_CHROMA_LOCATION_COSITED_EVEN@ specifies that downsampled chroma
+-- samples are aligned with luma samples with even coordinates.
 pattern VK_CHROMA_LOCATION_COSITED_EVEN :: VkChromaLocation
 pattern VK_CHROMA_LOCATION_COSITED_EVEN = VkChromaLocation 0
 
--- No documentation found for Nested "VkChromaLocation" "VK_CHROMA_LOCATION_MIDPOINT"
+-- | @VK_CHROMA_LOCATION_MIDPOINT@ specifies that downsampled chroma samples
+-- are located half way between each even luma sample and the nearest
+-- higher odd luma sample.
 pattern VK_CHROMA_LOCATION_MIDPOINT :: VkChromaLocation
 pattern VK_CHROMA_LOCATION_MIDPOINT = VkChromaLocation 1
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G8B8G8R8_422_UNORM"
+-- | @VK_FORMAT_G8B8G8R8_422_UNORM@ specifies a four-component, 32-bit format
+-- containing a pair of G components, an R component, and a B component,
+-- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
+-- data. One G value is present at each /i/ coordinate, with the B and R
+-- values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has an 8-bit G component
+-- for the even /i/ coordinate in byte 0, an 8-bit B component in byte 1,
+-- an 8-bit G component for the odd /i/ coordinate in byte 2, and an 8-bit
+-- R component in byte 3. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_G8B8G8R8_422_UNORM :: VkFormat
 pattern VK_FORMAT_G8B8G8R8_422_UNORM = VkFormat 1000156000
--- No documentation found for Nested "VkFormat" "VK_FORMAT_B8G8R8G8_422_UNORM"
+-- | @VK_FORMAT_B8G8R8G8_422_UNORM@ specifies a four-component, 32-bit format
+-- containing a pair of G components, an R component, and a B component,
+-- collectively encoding a 2×1 rectangle of unsigned normalized RGB texel
+-- data. One G value is present at each /i/ coordinate, with the B and R
+-- values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has an 8-bit B component
+-- in byte 0, an 8-bit G component for the even /i/ coordinate in byte 1,
+-- an 8-bit R component in byte 2, and an 8-bit G component for the odd /i/
+-- coordinate in byte 3. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_B8G8R8G8_422_UNORM :: VkFormat
 pattern VK_FORMAT_B8G8R8G8_422_UNORM = VkFormat 1000156001
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM"
+-- | @VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
+-- B component in plane 1, and an 8-bit R component in plane 2. The
+-- horizontal and vertical dimensions of the R and B planes are halved
+-- relative to the image dimensions, and each R and B component is shared
+-- with the G components for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM :: VkFormat
 pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM = VkFormat 1000156002
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM"
+-- | @VK_FORMAT_G8_B8R8_2PLANE_420_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, and a
+-- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
+-- byte 0 and an 8-bit R component in byte 1. The horizontal and vertical
+-- dimensions of the BR plane is halved relative to the image dimensions,
+-- and each R and B value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM :: VkFormat
 pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM = VkFormat 1000156003
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM"
+-- | @VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
+-- B component in plane 1, and an 8-bit R component in plane 2. The
+-- horizontal dimension of the R and B plane is halved relative to the
+-- image dimensions, and each R and B value is shared with the G components
+-- for which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location
+-- of each plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM :: VkFormat
 pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM = VkFormat 1000156004
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM"
+-- | @VK_FORMAT_G8_B8R8_2PLANE_422_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, and a
+-- two-component, 16-bit BR plane 1 consisting of an 8-bit B component in
+-- byte 0 and an 8-bit R component in byte 1. The horizontal dimensions of
+-- the BR plane is halved relative to the image dimensions, and each R and
+-- B value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM :: VkFormat
 pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM = VkFormat 1000156005
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM"
+-- | @VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has an 8-bit G component in plane 0, an 8-bit
+-- B component in plane 1, and an 8-bit R component in plane 2. Each plane
+-- has the same dimensions and each R, G and B component contributes to a
+-- single texel. The location of each plane when this image is in linear
+-- layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
 pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM :: VkFormat
 pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM = VkFormat 1000156006
--- No documentation found for Nested "VkFormat" "VK_FORMAT_R10X6_UNORM_PACK16"
+-- | @VK_FORMAT_R10X6_UNORM_PACK16@ specifies a one-component, 16-bit
+-- unsigned normalized format that has a single 10-bit R component in the
+-- top 10 bits of a 16-bit word, with the bottom 6 bits set to 0.
 pattern VK_FORMAT_R10X6_UNORM_PACK16 :: VkFormat
 pattern VK_FORMAT_R10X6_UNORM_PACK16 = VkFormat 1000156007
--- No documentation found for Nested "VkFormat" "VK_FORMAT_R10X6G10X6_UNORM_2PACK16"
+-- | @VK_FORMAT_R10X6G10X6_UNORM_2PACK16@ specifies a two-component, 32-bit
+-- unsigned normalized format that has a 10-bit R component in the top 10
+-- bits of the word in bytes 0..1, and a 10-bit G component in the top 10
+-- bits of the word in bytes 2..3, with the bottom 6 bits of each word set
+-- to 0.
 pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16 :: VkFormat
 pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = VkFormat 1000156008
--- No documentation found for Nested "VkFormat" "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16"
+-- | @VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16@ specifies a
+-- four-component, 64-bit unsigned normalized format that has a 10-bit R
+-- component in the top 10 bits of the word in bytes 0..1, a 10-bit G
+-- component in the top 10 bits of the word in bytes 2..3, a 10-bit B
+-- component in the top 10 bits of the word in bytes 4..5, and a 10-bit A
+-- component in the top 10 bits of the word in bytes 6..7, with the bottom
+-- 6 bits of each word set to 0.
 pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 :: VkFormat
 pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = VkFormat 1000156009
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"
+-- | @VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16@ specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 10-bit G component for the even /i/ coordinate in the top 10 bits of
+-- the word in bytes 0..1, a 10-bit B component in the top 10 bits of the
+-- word in bytes 2..3, a 10-bit G component for the odd /i/ coordinate in
+-- the top 10 bits of the word in bytes 4..5, and a 10-bit R component in
+-- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
+-- each word set to 0. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 :: VkFormat
 pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = VkFormat 1000156010
--- No documentation found for Nested "VkFormat" "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"
+-- | @VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16@ specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 10-bit B component in the top 10 bits of the word in bytes 0..1, a
+-- 10-bit G component for the even /i/ coordinate in the top 10 bits of the
+-- word in bytes 2..3, a 10-bit R component in the top 10 bits of the word
+-- in bytes 4..5, and a 10-bit G component for the odd /i/ coordinate in
+-- the top 10 bits of the word in bytes 6..7, with the bottom 6 bits of
+-- each word set to 0. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 :: VkFormat
 pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = VkFormat 1000156011
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"
+-- | @VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+-- component in the top 10 bits of each 16-bit word of plane 2, with the
+-- bottom 6 bits of each word set to 0. The horizontal and vertical
+-- dimensions of the R and B planes are halved relative to the image
+-- dimensions, and each R and B component is shared with the G components
+-- for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16 = VkFormat 1000156012
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"
+-- | @VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, and a two-component,
+-- 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
+-- of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
+-- of the word in bytes 2..3, the bottom 6 bits of each word set to 0. The
+-- horizontal and vertical dimensions of the BR plane is halved relative to
+-- the image dimensions, and each R and B value is shared with the G
+-- components for which \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16 = VkFormat 1000156013
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"
+-- | @VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+-- component in the top 10 bits of each 16-bit word of plane 2, with the
+-- bottom 6 bits of each word set to 0. The horizontal dimension of the R
+-- and B plane is halved relative to the image dimensions, and each R and B
+-- value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16 = VkFormat 1000156014
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"
+-- | @VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, and a two-component,
+-- 32-bit BR plane 1 consisting of a 10-bit B component in the top 10 bits
+-- of the word in bytes 0..1, and a 10-bit R component in the top 10 bits
+-- of the word in bytes 2..3, the bottom 6 bits of each word set to 0. The
+-- horizontal dimensions of the BR plane is halved relative to the image
+-- dimensions, and each R and B value is shared with the G components for
+-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
+-- each plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16 = VkFormat 1000156015
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"
+-- | @VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 10-bit G component
+-- in the top 10 bits of each 16-bit word of plane 0, a 10-bit B component
+-- in the top 10 bits of each 16-bit word of plane 1, and a 10-bit R
+-- component in the top 10 bits of each 16-bit word of plane 2, with the
+-- bottom 6 bits of each word set to 0. Each plane has the same dimensions
+-- and each R, G and B component contributes to a single texel. The
+-- location of each plane when this image is in linear layout can be
+-- determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
 pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16 = VkFormat 1000156016
--- No documentation found for Nested "VkFormat" "VK_FORMAT_R12X4_UNORM_PACK16"
+-- | @VK_FORMAT_R12X4_UNORM_PACK16@ specifies a one-component, 16-bit
+-- unsigned normalized format that has a single 12-bit R component in the
+-- top 12 bits of a 16-bit word, with the bottom 4 bits set to 0.
 pattern VK_FORMAT_R12X4_UNORM_PACK16 :: VkFormat
 pattern VK_FORMAT_R12X4_UNORM_PACK16 = VkFormat 1000156017
--- No documentation found for Nested "VkFormat" "VK_FORMAT_R12X4G12X4_UNORM_2PACK16"
+-- | @VK_FORMAT_R12X4G12X4_UNORM_2PACK16@ specifies a two-component, 32-bit
+-- unsigned normalized format that has a 12-bit R component in the top 12
+-- bits of the word in bytes 0..1, and a 12-bit G component in the top 12
+-- bits of the word in bytes 2..3, with the bottom 4 bits of each word set
+-- to 0.
 pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16 :: VkFormat
 pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = VkFormat 1000156018
--- No documentation found for Nested "VkFormat" "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16"
+-- | @VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16@ specifies a
+-- four-component, 64-bit unsigned normalized format that has a 12-bit R
+-- component in the top 12 bits of the word in bytes 0..1, a 12-bit G
+-- component in the top 12 bits of the word in bytes 2..3, a 12-bit B
+-- component in the top 12 bits of the word in bytes 4..5, and a 12-bit A
+-- component in the top 12 bits of the word in bytes 6..7, with the bottom
+-- 4 bits of each word set to 0.
 pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 :: VkFormat
 pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = VkFormat 1000156019
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"
+-- | @VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16@ specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 12-bit G component for the even /i/ coordinate in the top 12 bits of
+-- the word in bytes 0..1, a 12-bit B component in the top 12 bits of the
+-- word in bytes 2..3, a 12-bit G component for the odd /i/ coordinate in
+-- the top 12 bits of the word in bytes 4..5, and a 12-bit R component in
+-- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
+-- each word set to 0. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 :: VkFormat
 pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = VkFormat 1000156020
--- No documentation found for Nested "VkFormat" "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"
+-- | @VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16@ specifies a
+-- four-component, 64-bit format containing a pair of G components, an R
+-- component, and a B component, collectively encoding a 2×1 rectangle of
+-- unsigned normalized RGB texel data. One G value is present at each /i/
+-- coordinate, with the B and R values shared across both G values and thus
+-- recorded at half the horizontal resolution of the image. This format has
+-- a 12-bit B component in the top 12 bits of the word in bytes 0..1, a
+-- 12-bit G component for the even /i/ coordinate in the top 12 bits of the
+-- word in bytes 2..3, a 12-bit R component in the top 12 bits of the word
+-- in bytes 4..5, and a 12-bit G component for the odd /i/ coordinate in
+-- the top 12 bits of the word in bytes 6..7, with the bottom 4 bits of
+-- each word set to 0. Images in this format /must/ be defined with a width
+-- that is a multiple of two. For the purposes of the constraints on copy
+-- extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 :: VkFormat
 pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = VkFormat 1000156021
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"
+-- | @VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+-- component in the top 12 bits of each 16-bit word of plane 2, with the
+-- bottom 4 bits of each word set to 0. The horizontal and vertical
+-- dimensions of the R and B planes are halved relative to the image
+-- dimensions, and each R and B component is shared with the G components
+-- for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16 = VkFormat 1000156022
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"
+-- | @VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, and a two-component,
+-- 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
+-- of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
+-- of the word in bytes 2..3, the bottom 4 bits of each word set to 0. The
+-- horizontal and vertical dimensions of the BR plane is halved relative to
+-- the image dimensions, and each R and B value is shared with the G
+-- components for which \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16 = VkFormat 1000156023
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"
+-- | @VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+-- component in the top 12 bits of each 16-bit word of plane 2, with the
+-- bottom 4 bits of each word set to 0. The horizontal dimension of the R
+-- and B plane is halved relative to the image dimensions, and each R and B
+-- value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16 = VkFormat 1000156024
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"
+-- | @VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, and a two-component,
+-- 32-bit BR plane 1 consisting of a 12-bit B component in the top 12 bits
+-- of the word in bytes 0..1, and a 12-bit R component in the top 12 bits
+-- of the word in bytes 2..3, the bottom 4 bits of each word set to 0. The
+-- horizontal dimensions of the BR plane is halved relative to the image
+-- dimensions, and each R and B value is shared with the G components for
+-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
+-- each plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16 = VkFormat 1000156025
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"
+-- | @VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16@ specifies a
+-- unsigned normalized /multi-planar format/ that has a 12-bit G component
+-- in the top 12 bits of each 16-bit word of plane 0, a 12-bit B component
+-- in the top 12 bits of each 16-bit word of plane 1, and a 12-bit R
+-- component in the top 12 bits of each 16-bit word of plane 2, with the
+-- bottom 4 bits of each word set to 0. Each plane has the same dimensions
+-- and each R, G and B component contributes to a single texel. The
+-- location of each plane when this image is in linear layout can be
+-- determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
 pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 :: VkFormat
 pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16 = VkFormat 1000156026
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G16B16G16R16_422_UNORM"
+-- | @VK_FORMAT_G16B16G16R16_422_UNORM@ specifies a four-component, 64-bit
+-- format containing a pair of G components, an R component, and a B
+-- component, collectively encoding a 2×1 rectangle of unsigned normalized
+-- RGB texel data. One G value is present at each /i/ coordinate, with the
+-- B and R values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has a 16-bit G component
+-- for the even /i/ coordinate in the word in bytes 0..1, a 16-bit B
+-- component in the word in bytes 2..3, a 16-bit G component for the odd
+-- /i/ coordinate in the word in bytes 4..5, and a 16-bit R component in
+-- the word in bytes 6..7. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_G16B16G16R16_422_UNORM :: VkFormat
 pattern VK_FORMAT_G16B16G16R16_422_UNORM = VkFormat 1000156027
--- No documentation found for Nested "VkFormat" "VK_FORMAT_B16G16R16G16_422_UNORM"
+-- | @VK_FORMAT_B16G16R16G16_422_UNORM@ specifies a four-component, 64-bit
+-- format containing a pair of G components, an R component, and a B
+-- component, collectively encoding a 2×1 rectangle of unsigned normalized
+-- RGB texel data. One G value is present at each /i/ coordinate, with the
+-- B and R values shared across both G values and thus recorded at half the
+-- horizontal resolution of the image. This format has a 16-bit B component
+-- in the word in bytes 0..1, a 16-bit G component for the even /i/
+-- coordinate in the word in bytes 2..3, a 16-bit R component in the word
+-- in bytes 4..5, and a 16-bit G component for the odd /i/ coordinate in
+-- the word in bytes 6..7. Images in this format /must/ be defined with a
+-- width that is a multiple of two. For the purposes of the constraints on
+-- copy extents, this format is treated as a compressed format with a 2×1
+-- compressed texel block.
 pattern VK_FORMAT_B16G16R16G16_422_UNORM :: VkFormat
 pattern VK_FORMAT_B16G16R16G16_422_UNORM = VkFormat 1000156028
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM"
+-- | @VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
+-- 16-bit R component in each 16-bit word of plane 2. The horizontal and
+-- vertical dimensions of the R and B planes are halved relative to the
+-- image dimensions, and each R and B component is shared with the G
+-- components for which \(\lfloor i_G \times 0.5
+-- \rfloor = i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B
+-- = j_R\). The location of each plane when this image is in linear layout
+-- can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM :: VkFormat
 pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM = VkFormat 1000156029
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM"
+-- | @VK_FORMAT_G16_B16R16_2PLANE_420_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
+-- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
+-- in the word in bytes 2..3. The horizontal and vertical dimensions of the
+-- BR plane is halved relative to the image dimensions, and each R and B
+-- value is shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor =
+-- i_B = i_R\) and \(\lfloor j_G \times 0.5 \rfloor = j_B = j_R\). The
+-- location of each plane when this image is in linear layout can be
+-- determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width and height that is a multiple of two.
 pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM :: VkFormat
 pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM = VkFormat 1000156030
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM"
+-- | @VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
+-- 16-bit R component in each 16-bit word of plane 2. The horizontal
+-- dimension of the R and B plane is halved relative to the image
+-- dimensions, and each R and B value is shared with the G components for
+-- which \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of
+-- each plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM :: VkFormat
 pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = VkFormat 1000156031
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM"
+-- | @VK_FORMAT_G16_B16R16_2PLANE_422_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, and a two-component, 32-bit BR plane 1 consisting of a
+-- 16-bit B component in the word in bytes 0..1, and a 16-bit R component
+-- in the word in bytes 2..3. The horizontal dimensions of the BR plane is
+-- halved relative to the image dimensions, and each R and B value is
+-- shared with the G components for which
+-- \(\lfloor i_G \times 0.5 \rfloor = i_B = i_R\). The location of each
+-- plane when this image is in linear layout can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane, and
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the BR plane. Images in this format
+-- /must/ be defined with a width that is a multiple of two.
 pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM :: VkFormat
 pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = VkFormat 1000156032
--- No documentation found for Nested "VkFormat" "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM"
+-- | @VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM@ specifies a unsigned normalized
+-- /multi-planar format/ that has a 16-bit G component in each 16-bit word
+-- of plane 0, a 16-bit B component in each 16-bit word of plane 1, and a
+-- 16-bit R component in each 16-bit word of plane 2. Each plane has the
+-- same dimensions and each R, G and B component contributes to a single
+-- texel. The location of each plane when this image is in linear layout
+-- can be determined via
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout', using
+-- @VK_IMAGE_ASPECT_PLANE_0_BIT@ for the G plane,
+-- @VK_IMAGE_ASPECT_PLANE_1_BIT@ for the B plane, and
+-- @VK_IMAGE_ASPECT_PLANE_2_BIT@ for the R plane.
 pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM :: VkFormat
 pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = VkFormat 1000156033
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"
@@ -405,19 +888,134 @@
 -- | Dummy data to tag the 'Ptr' with
 data VkSamplerYcbcrConversion_T
 -- | VkSamplerYcbcrConversion - NO SHORT DESCRIPTION PROVIDED
+--
+-- = See Also
+--
+-- 'VkSamplerYcbcrConversionInfo', 'vkCreateSamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR',
+-- 'vkDestroySamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkDestroySamplerYcbcrConversionKHR'
 type VkSamplerYcbcrConversion = Ptr VkSamplerYcbcrConversion_T
 -- | vkCreateSamplerYcbcrConversion - Create a new Ycbcr conversion
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that creates the sampler Y’CBCR
+--     conversion.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkSamplerYcbcrConversionCreateInfo' specifying the requested
+--     sampler Y’CBCR conversion.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- -   @pYcbcrConversion@ points to a 'VkSamplerYcbcrConversion' handle in
+--     which the resulting sampler Y’CBCR conversion is returned.
+--
+-- = Description
+--
+-- The interpretation of the configured sampler Y’CBCR conversion is
+-- described in more detail in [the description of sampler Y’CBCR
+-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion)
+-- in the [Image
+-- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures)
+-- chapter.
+--
+-- == Valid Usage
+--
+-- -   The [sampler Y’CBCR conversion
+--     feature](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-sampler-YCbCr-conversion)
+--     /must/ be enabled
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkSamplerYcbcrConversionCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pYcbcrConversion@ /must/ be a valid pointer to a
+--     @VkSamplerYcbcrConversion@ handle
+--
+-- == Return Codes
+--
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
+--     -   @VK_SUCCESS@
+--
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkSamplerYcbcrConversion', 'VkSamplerYcbcrConversionCreateInfo'
 foreign import ccall "vkCreateSamplerYcbcrConversion" vkCreateSamplerYcbcrConversion :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkSamplerYcbcrConversionCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pYcbcrConversion" ::: Ptr VkSamplerYcbcrConversion) -> IO VkResult
 -- | vkDestroySamplerYcbcrConversion - Destroy a created Y’CbCr conversion
+--
+-- = Parameters
+--
+-- -   @device@ is the logical device that destroys the Y’CBCR conversion.
+--
+-- -   @ycbcrConversion@ is the conversion to destroy.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @ycbcrConversion@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @ycbcrConversion@
+--     /must/ be a valid @VkSamplerYcbcrConversion@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @ycbcrConversion@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @ycbcrConversion@ /must/ be externally synchronized
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkSamplerYcbcrConversion'
 foreign import ccall "vkDestroySamplerYcbcrConversion" vkDestroySamplerYcbcrConversion :: ("device" ::: VkDevice) -> ("ycbcrConversion" ::: VkSamplerYcbcrConversion) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
 -- | VkSamplerYcbcrConversionInfo - Structure specifying Y’CbCr conversion to
 -- a sampler or image view
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO@
+--
+-- -   @conversion@ /must/ be a valid @VkSamplerYcbcrConversion@ handle
+--
+-- = See Also
+--
+-- 'VkSamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkSamplerYcbcrConversionInfo = VkSamplerYcbcrConversionInfo
-  { -- No documentation found for Nested "VkSamplerYcbcrConversionInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionInfo" "vkConversion"
+  , -- | @conversion@ is a 'VkSamplerYcbcrConversion' handle created with
+  -- 'vkCreateSamplerYcbcrConversion'.
   vkConversion :: VkSamplerYcbcrConversion
   }
   deriving (Eq, Show)
@@ -433,26 +1031,158 @@
                 *> poke (ptr `plusPtr` 16) (vkConversion (poked :: VkSamplerYcbcrConversionInfo))
 -- | VkSamplerYcbcrConversionCreateInfo - Structure specifying the parameters
 -- of the newly created conversion
+--
+-- = Description
+--
+-- __Note__
+--
+-- Setting @forceExplicitReconstruction@ to @VK_TRUE@ /may/ have a
+-- performance penalty on implementations where explicit reconstruction is
+-- not the default mode of operation.
+--
+-- If the @pNext@ chain has an instance of
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID'
+-- with non-zero @externalFormat@ member, the sampler Y’CBCR conversion
+-- object represents an /external format conversion/, and @format@ /must/
+-- be @VK_FORMAT_UNDEFINED@. Such conversions /must/ only be used to sample
+-- image views with a matching [external
+-- format](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer-external-formats).
+-- When creating an external format conversion, the value of @components@
+-- is ignored.
+--
+-- == Valid Usage
+--
+-- -   If an external format conversion is being created, @format@ /must/
+--     be @VK_FORMAT_UNDEFINED@, otherwise it /must/ not be
+--     @VK_FORMAT_UNDEFINED@.
+--
+-- -   @format@ /must/ support
+--     @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@ or
+--     @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@
+--
+-- -   If the format does not support
+--     @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@, @xChromaOffset@ and
+--     @yChromaOffset@ /must/ not be @VK_CHROMA_LOCATION_COSITED_EVEN@
+--
+-- -   If the format does not support
+--     @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@, @xChromaOffset@ and
+--     @yChromaOffset@ /must/ not be @VK_CHROMA_LOCATION_MIDPOINT@
+--
+-- -   @format@ /must/ represent unsigned normalized values (i.e. the
+--     format must be a @UNORM@ format)
+--
+-- -   If the format has a @_422@ or @_420@ suffix:
+--
+--     -   @components.g@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
+--     -   @components.a@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@,
+--         @VK_COMPONENT_SWIZZLE_ONE@, or @VK_COMPONENT_SWIZZLE_ZERO@
+--
+--     -   @components.r@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@ or
+--         @VK_COMPONENT_SWIZZLE_B@
+--
+--     -   @components.b@ /must/ be @VK_COMPONENT_SWIZZLE_IDENTITY@ or
+--         @VK_COMPONENT_SWIZZLE_R@
+--
+--     -   If either @components.r@ or @components.b@ is
+--         @VK_COMPONENT_SWIZZLE_IDENTITY@, both values /must/ be
+--         @VK_COMPONENT_SWIZZLE_IDENTITY@
+--
+-- -   If @ycbcrModel@ is not
+--     @VK_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@,
+--     @components.g@, and @components.b@ /must/ not be
+--     @VK_COMPONENT_SWIZZLE_ZERO@ or @VK_COMPONENT_SWIZZLE_ONE@, and
+--     /must/ not correspond to a channel which contains zero or one as a
+--     consequence of [conversion to
+--     RGBA](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-conversion-to-rgba)
+--
+-- -   If the format does not support
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT@,
+--     @forceExplicitReconstruction@ /must/ be FALSE
+--
+-- -   If the format does not support
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT@,
+--     @chromaFilter@ /must/ be @VK_FILTER_NEAREST@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID'
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @ycbcrModel@ /must/ be a valid 'VkSamplerYcbcrModelConversion' value
+--
+-- -   @ycbcrRange@ /must/ be a valid 'VkSamplerYcbcrRange' value
+--
+-- -   @components@ /must/ be a valid @VkComponentMapping@ structure
+--
+-- -   @xChromaOffset@ /must/ be a valid 'VkChromaLocation' value
+--
+-- -   @yChromaOffset@ /must/ be a valid 'VkChromaLocation' value
+--
+-- -   @chromaFilter@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Sampler.VkFilter' value
+--
+-- If @chromaFilter@ is @VK_FILTER_NEAREST@, chroma samples are
+-- reconstructed to luma channel resolution using nearest-neighbour
+-- sampling. Otherwise, chroma samples are reconstructed using
+-- interpolation. More details can be found in [the description of sampler
+-- Y’CBCR
+-- conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-sampler-YCbCr-conversion)
+-- in the [Image
+-- Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures)
+-- chapter.
+--
+-- = See Also
+--
+-- @VkBool32@, 'VkChromaLocation',
+-- 'Graphics.Vulkan.Core10.ImageView.VkComponentMapping',
+-- 'Graphics.Vulkan.Core10.Sampler.VkFilter',
+-- 'Graphics.Vulkan.Core10.Core.VkFormat', 'VkSamplerYcbcrModelConversion',
+-- 'VkSamplerYcbcrRange', 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateSamplerYcbcrConversion',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion.vkCreateSamplerYcbcrConversionKHR'
 data VkSamplerYcbcrConversionCreateInfo = VkSamplerYcbcrConversionCreateInfo
-  { -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkFormat"
+  , -- | @format@ is the format of the image from which color information will be
+  -- retrieved.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkYcbcrModel"
+  , -- | @ycbcrModel@ describes the color matrix for conversion between color
+  -- models.
   vkYcbcrModel :: VkSamplerYcbcrModelConversion
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkYcbcrRange"
+  , -- | @ycbcrRange@ describes whether the encoded values have headroom and foot
+  -- room, or whether the encoding uses the full numerical range.
   vkYcbcrRange :: VkSamplerYcbcrRange
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkComponents"
+  , -- | @components@ applies a /swizzle/ based on
+  -- 'Graphics.Vulkan.Core10.ImageView.VkComponentSwizzle' enums prior to
+  -- range expansion and color model conversion.
   vkComponents :: VkComponentMapping
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkXChromaOffset"
+  , -- | @xChromaOffset@ describes the [sample
+  -- location](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction)
+  -- associated with downsampled chroma channels in the x dimension.
+  -- @xChromaOffset@ has no effect for formats in which chroma channels are
+  -- the same resolution as the luma channel.
   vkXChromaOffset :: VkChromaLocation
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkYChromaOffset"
+  , -- | @yChromaOffset@ describes the [sample
+  -- location](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-chroma-reconstruction)
+  -- associated with downsampled chroma channels in the y dimension.
+  -- @yChromaOffset@ has no effect for formats in which the chroma channels
+  -- are not downsampled vertically.
   vkYChromaOffset :: VkChromaLocation
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkChromaFilter"
+  , -- | @chromaFilter@ is the filter for chroma reconstruction.
   vkChromaFilter :: VkFilter
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkForceExplicitReconstruction"
+  , -- | @forceExplicitReconstruction@ /can/ be used to ensure that
+  -- reconstruction is done explicitly, if supported.
   vkForceExplicitReconstruction :: VkBool32
   }
   deriving (Eq, Show)
@@ -482,12 +1212,41 @@
                 *> poke (ptr `plusPtr` 56) (vkForceExplicitReconstruction (poked :: VkSamplerYcbcrConversionCreateInfo))
 -- | VkBindImagePlaneMemoryInfo - Structure specifying how to bind an image
 -- plane to memory
+--
+-- == Valid Usage
+--
+-- -   @planeAspect@ /must/ be a single valid plane aspect for the image
+--     format (that is, @planeAspect@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@ or @VK_IMAGE_ASPECT_PLANE_1_BIT@ for
+--     “@_2PLANE@” formats and @planeAspect@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@, or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@ for “@_3PLANE@” formats)
+--
+-- -   A single call to
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2'
+--     /must/ bind all or none of the planes of an image (i.e. bindings to
+--     all planes of an image /must/ be made in a single
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.vkBindImageMemory2'
+--     call), as separate bindings
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO@
+--
+-- -   @planeAspect@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkBindImagePlaneMemoryInfo = VkBindImagePlaneMemoryInfo
-  { -- No documentation found for Nested "VkBindImagePlaneMemoryInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBindImagePlaneMemoryInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBindImagePlaneMemoryInfo" "vkPlaneAspect"
+  , -- | @planeAspect@ is the aspect of the disjoint image plane to bind.
   vkPlaneAspect :: VkImageAspectFlagBits
   }
   deriving (Eq, Show)
@@ -503,12 +1262,35 @@
                 *> poke (ptr `plusPtr` 16) (vkPlaneAspect (poked :: VkBindImagePlaneMemoryInfo))
 -- | VkImagePlaneMemoryRequirementsInfo - Structure specifying image plane
 -- for memory requirements
+--
+-- == Valid Usage
+--
+-- -   @planeAspect@ /must/ be an aspect that exists in the format; that
+--     is, for a two-plane image @planeAspect@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@ or @VK_IMAGE_ASPECT_PLANE_1_BIT@, and
+--     for a three-plane image @planeAspect@ /must/ be
+--     @VK_IMAGE_ASPECT_PLANE_0_BIT@, @VK_IMAGE_ASPECT_PLANE_1_BIT@ or
+--     @VK_IMAGE_ASPECT_PLANE_2_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO@
+--
+-- -   @planeAspect@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits'
+--     value
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlagBits',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImagePlaneMemoryRequirementsInfo = VkImagePlaneMemoryRequirementsInfo
-  { -- No documentation found for Nested "VkImagePlaneMemoryRequirementsInfo" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImagePlaneMemoryRequirementsInfo" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImagePlaneMemoryRequirementsInfo" "vkPlaneAspect"
+  , -- | @planeAspect@ is the aspect corresponding to the image plane to query.
   vkPlaneAspect :: VkImageAspectFlagBits
   }
   deriving (Eq, Show)
@@ -524,12 +1306,35 @@
                 *> poke (ptr `plusPtr` 16) (vkPlaneAspect (poked :: VkImagePlaneMemoryRequirementsInfo))
 -- | VkPhysicalDeviceSamplerYcbcrConversionFeatures - Structure describing
 -- Y’CbCr conversion features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the @VkPhysicalDeviceSamplerYcbcrConversionFeatures@
+-- structure describe the following feature:
+--
+-- = Description
+--
+-- -   @samplerYcbcrConversion@ specifies whether the implementation
+--     supports [sampler Y’CBCR
+--     conversion](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#samplers-YCbCr-conversion).
+--     If @samplerYcbcrConversion@ is @VK_FALSE@, sampler Y’CBCR conversion
+--     is not supported, and samplers using sampler Y’CBCR conversion
+--     /must/ not be used.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES@
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceSamplerYcbcrConversionFeatures = VkPhysicalDeviceSamplerYcbcrConversionFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "vkSamplerYcbcrConversion"
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "samplerYcbcrConversion"
   vkSamplerYcbcrConversion :: VkBool32
   }
   deriving (Eq, Show)
@@ -545,12 +1350,22 @@
                 *> poke (ptr `plusPtr` 16) (vkSamplerYcbcrConversion (poked :: VkPhysicalDeviceSamplerYcbcrConversionFeatures))
 -- | VkSamplerYcbcrConversionImageFormatProperties - Structure specifying
 -- combined image sampler descriptor count for multi-planar images
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES@
+--
+-- = See Also
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkSamplerYcbcrConversionImageFormatProperties = VkSamplerYcbcrConversionImageFormatProperties
-  { -- No documentation found for Nested "VkSamplerYcbcrConversionImageFormatProperties" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionImageFormatProperties" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSamplerYcbcrConversionImageFormatProperties" "vkCombinedImageSamplerDescriptorCount"
+  , -- | @combinedImageSamplerDescriptorCount@ is the number of combined image
+  -- sampler descriptors that the implementation uses to access the format.
   vkCombinedImageSamplerDescriptorCount :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_shader_draw_parameters.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_shader_draw_parameters.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_shader_draw_parameters.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_shader_draw_parameters.hs
@@ -32,7 +32,6 @@
 -- implementation
 --
 -- = Description
--- #_description#
 --
 -- If the @VkPhysicalDeviceShaderDrawParameterFeatures@ structure is
 -- included in the @pNext@ chain of
@@ -45,15 +44,15 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceShaderDrawParameterFeatures = VkPhysicalDeviceShaderDrawParameterFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceShaderDrawParameterFeatures" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceShaderDrawParameterFeatures" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderDrawParameterFeatures" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderDrawParameterFeatures" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderDrawParameterFeatures" "vkShaderDrawParameters"
+  , -- | @shaderDrawParameters@ specifies whether shader draw parameters are
+  -- supported.
   vkShaderDrawParameters :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_variable_pointers.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_variable_pointers.hs
--- a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_variable_pointers.hs
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_variable_pointers.hs
@@ -29,14 +29,54 @@
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VkStructureType 1000120000
 -- | VkPhysicalDeviceVariablePointerFeatures - Structure describing variable
 -- pointers features that can be supported by an implementation
+--
+-- = Members
+--
+-- The members of the @VkPhysicalDeviceVariablePointerFeatures@ structure
+-- describe the following features:
+--
+-- = Description
+--
+-- -   @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.
+--
+-- If the @VkPhysicalDeviceVariablePointerFeatures@ structure is included
+-- in the @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
+-- it is filled with values indicating whether each feature is supported.
+-- @VkPhysicalDeviceVariablePointerFeatures@ /can/ also be used in the
+-- @pNext@ chain of 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo' to
+-- enable the features.
+--
+-- == Valid Usage
+--
+-- -   If @variablePointers@ is enabled then
+--     @variablePointersStorageBuffer@ /must/ also be enabled.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES@
+--
+-- = See Also
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceVariablePointerFeatures = VkPhysicalDeviceVariablePointerFeatures
-  { -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkVariablePointersStorageBuffer"
+  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "variablePointersStorageBuffer"
   vkVariablePointersStorageBuffer :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkVariablePointers"
+  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "variablePointers"
   vkVariablePointers :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs
@@ -44,7 +44,6 @@
 -- into a buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command will be
 --     recorded.
@@ -62,7 +61,6 @@
 -- -   @marker@ is the 32-bit value of the marker.
 --
 -- = Description
--- #_description#
 --
 -- The command will write the 32-bit marker value into the buffer only
 -- after all preceding commands have finished executing up to at least the
@@ -114,8 +112,8 @@
 --
 -- -   @dstBuffer@ /must/ be a valid @VkBuffer@ handle
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support transfer, graphics, or compute operations
@@ -132,19 +130,18 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Transfer        | Transfer        |
--- > | Secondary       |                 | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Transfer                                                                                              | Transfer                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
@@ -44,7 +44,6 @@
 -- sourced from a buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
@@ -66,7 +65,6 @@
 --     parameters.
 --
 -- = Description
--- #_description#
 --
 -- @vkCmdDrawIndirectCountAMD@ behaves similarly to
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndirect' except
@@ -101,15 +99,15 @@
 --     /must/ be less than or equal to the size of @buffer@
 --
 -- -   If the
---     <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
+--     [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-drawIndirectFirstInstance)
 --     feature is not enabled, all the @firstInstance@ members of the
 --     @VkDrawIndirectCommand@ structures accessed by this command /must/
 --     be @0@
 --
 -- -   The current render pass /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the @renderPass@ member of the @VkGraphicsPipelineCreateInfo@
+--     structure specified when creating the @VkPipeline@ bound to
 --     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
 --
 -- -   The subpass index of the current render pass /must/ be equal to the
@@ -123,7 +121,7 @@
 --     @VkPipelineLayout@ that is compatible for set /n/, with the
 --     @VkPipelineLayout@ used to create the current @VkPipeline@, as
 --     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
 --
 -- -   For each push constant that is statically used by the @VkPipeline@
 --     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
@@ -131,7 +129,7 @@
 --     @VkPipelineLayout@ that is compatible for push constants, with the
 --     @VkPipelineLayout@ used to create the current @VkPipeline@, as
 --     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
 --
 -- -   Descriptors in each bound descriptor set, specified via
 --     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
@@ -183,15 +181,15 @@
 --     SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
 --     includes a LOD bias or any offset values, in any shader stage
 --
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
 --     feature is not enabled, and any shader stage in the @VkPipeline@
 --     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
 --     buffer, it /must/ not access values outside of the range of that
 --     buffer specified in the bound descriptor set
 --
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
 --     feature is not enabled, and any shader stage in the @VkPipeline@
 --     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
 --     buffer, it /must/ not access values outside of the range of that
@@ -209,6 +207,16 @@
 --     /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
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
+--
+-- -   If the bound graphics pipeline was created with
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to @VK_TRUE@ and the current subpass has a depth\/stencil
+--     attachment, then that attachment /must/ have been created with the
+--     @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -217,8 +225,8 @@
 --
 -- -   @countBuffer@ /must/ be a valid @VkBuffer@ handle
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics operations
@@ -237,18 +245,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
@@ -257,7 +264,6 @@
 -- the draw count sourced from a buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
@@ -279,7 +285,6 @@
 --     parameters.
 --
 -- = Description
--- #_description#
 --
 -- @vkCmdDrawIndexedIndirectCountAMD@ behaves similarly to
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexedIndirect'
@@ -314,15 +319,15 @@
 --     /must/ be less than or equal to the size of @buffer@
 --
 -- -   If the
---     <{html_spec_relative}#features-features-drawIndirectFirstInstance drawIndirectFirstInstance>
+--     [drawIndirectFirstInstance](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-drawIndirectFirstInstance)
 --     feature is not enabled, all the @firstInstance@ members of the
 --     @VkDrawIndexedIndirectCommand@ structures accessed by this command
 --     /must/ be @0@
 --
 -- -   The current render pass /must/ be
---     <{html_spec_relative}#renderpass-compatibility compatible> with the
---     @renderPass@ member of the @VkGraphicsPipelineCreateInfo@ structure
---     specified when creating the @VkPipeline@ bound to
+--     [compatible](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#renderpass-compatibility)
+--     with the @renderPass@ member of the @VkGraphicsPipelineCreateInfo@
+--     structure specified when creating the @VkPipeline@ bound to
 --     @VK_PIPELINE_BIND_POINT_GRAPHICS@.
 --
 -- -   The subpass index of the current render pass /must/ be equal to the
@@ -336,7 +341,7 @@
 --     @VkPipelineLayout@ that is compatible for set /n/, with the
 --     @VkPipelineLayout@ used to create the current @VkPipeline@, as
 --     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
 --
 -- -   For each push constant that is statically used by the @VkPipeline@
 --     bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@, a push constant value
@@ -344,7 +349,7 @@
 --     @VkPipelineLayout@ that is compatible for push constants, with the
 --     @VkPipelineLayout@ used to create the current @VkPipeline@, as
 --     described in
---     <{html_spec_relative}#descriptorsets-compatibility {html_spec_relative}#descriptorsets-compatibility>
+--     [{html_spec_relative}#descriptorsets-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility)
 --
 -- -   Descriptors in each bound descriptor set, specified via
 --     @vkCmdBindDescriptorSets@, /must/ be valid if they are statically
@@ -397,15 +402,15 @@
 --     SPIR-V @OpImageSample*@ or @OpImageSparseSample*@ instructions that
 --     includes a LOD bias or any offset values, in any shader stage
 --
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
 --     feature is not enabled, and any shader stage in the @VkPipeline@
 --     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a uniform
 --     buffer, it /must/ not access values outside of the range of that
 --     buffer specified in the bound descriptor set
 --
--- -   If the
---     <{html_spec_relative}#features-features-robustBufferAccess robust buffer access>
+-- -   If the [robust buffer
+--     access](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
 --     feature is not enabled, and any shader stage in the @VkPipeline@
 --     object bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@ accesses a storage
 --     buffer, it /must/ not access values outside of the range of that
@@ -423,6 +428,16 @@
 --     /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
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewProperties'::@maxMultiviewInstanceIndex@.
+--
+-- -   If the bound graphics pipeline was created with
+--     'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT'::@sampleLocationsEnable@
+--     set to @VK_TRUE@ and the current subpass has a depth\/stencil
+--     attachment, then that attachment /must/ have been created with the
+--     @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ bit set
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -431,8 +446,8 @@
 --
 -- -   @countBuffer@ /must/ be a valid @VkBuffer@ handle
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics operations
@@ -451,18 +466,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        | Graphics        |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              | Graphics                                                                                                                   |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs
@@ -58,7 +58,6 @@
 -- pipeline
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineRasterizationStateRasterizationOrderAMD'
 newtype VkRasterizationOrderAMD = VkRasterizationOrderAMD Int32
@@ -81,14 +80,14 @@
                     )
 
 -- | @VK_RASTERIZATION_ORDER_STRICT_AMD@ specifies that operations for each
--- primitive in a subpass /must/ occur in
--- <{html_spec_relative}#drawing-primitive-order primitive order>.
+-- primitive in a subpass /must/ occur in [primitive
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#drawing-primitive-order).
 pattern VK_RASTERIZATION_ORDER_STRICT_AMD :: VkRasterizationOrderAMD
 pattern VK_RASTERIZATION_ORDER_STRICT_AMD = VkRasterizationOrderAMD 0
 
 -- | @VK_RASTERIZATION_ORDER_RELAXED_AMD@ specifies that operations for each
--- primitive in a subpass /may/ not occur in
--- <{html_spec_relative}#drawing-primitive-order primitive order>.
+-- primitive in a subpass /may/ not occur in [primitive
+-- order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#drawing-primitive-order).
 pattern VK_RASTERIZATION_ORDER_RELAXED_AMD :: VkRasterizationOrderAMD
 pattern VK_RASTERIZATION_ORDER_RELAXED_AMD = VkRasterizationOrderAMD 1
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"
@@ -103,9 +102,6 @@
 -- | VkPipelineRasterizationStateRasterizationOrderAMD - Structure defining
 -- rasterization order for a graphics pipeline
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -122,15 +118,15 @@
 -- @VK_RASTERIZATION_ORDER_STRICT_AMD@.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkRasterizationOrderAMD', 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPipelineRasterizationStateRasterizationOrderAMD = VkPipelineRasterizationStateRasterizationOrderAMD
-  { -- No documentation found for Nested "VkPipelineRasterizationStateRasterizationOrderAMD" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineRasterizationStateRasterizationOrderAMD" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineRasterizationStateRasterizationOrderAMD" "vkRasterizationOrder"
+  , -- | @rasterizationOrder@ is a 'VkRasterizationOrderAMD' value specifying the
+  -- primitive rasterization order to use.
   vkRasterizationOrder :: VkRasterizationOrderAMD
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
@@ -45,13 +45,11 @@
 -- core properties that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceShaderCorePropertiesAMD@ structure
 -- describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @shaderEngineCount@ is an unsigned integer value indicating the
 --     number of shader engines found inside the shader core of the
@@ -112,41 +110,40 @@
 -- it is filled with the implementation-dependent limits.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceShaderCorePropertiesAMD = VkPhysicalDeviceShaderCorePropertiesAMD
-  { -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkShaderEngineCount"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "shaderEngineCount"
   vkShaderEngineCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkShaderArraysPerEngineCount"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "shaderArraysPerEngineCount"
   vkShaderArraysPerEngineCount :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkComputeUnitsPerShaderArray"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "computeUnitsPerShaderArray"
   vkComputeUnitsPerShaderArray :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSimdPerComputeUnit"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "simdPerComputeUnit"
   vkSimdPerComputeUnit :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkWavefrontsPerSimd"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "wavefrontsPerSimd"
   vkWavefrontsPerSimd :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkWavefrontSize"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "wavefrontSize"
   vkWavefrontSize :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSgprsPerSimd"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "sgprsPerSimd"
   vkSgprsPerSimd :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMinSgprAllocation"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "minSgprAllocation"
   vkMinSgprAllocation :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMaxSgprAllocation"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "maxSgprAllocation"
   vkMaxSgprAllocation :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSgprAllocationGranularity"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "sgprAllocationGranularity"
   vkSgprAllocationGranularity :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkVgprsPerSimd"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vgprsPerSimd"
   vkVgprsPerSimd :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMinVgprAllocation"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "minVgprAllocation"
   vkMinVgprAllocation :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMaxVgprAllocation"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "maxVgprAllocation"
   vkMaxVgprAllocation :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkVgprAllocationGranularity"
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vgprAllocationGranularity"
   vkVgprAllocationGranularity :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs
@@ -122,7 +122,6 @@
 -- | vkGetShaderInfoAMD - Get information about a shader in a pipeline
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device that created @pipeline@.
 --
@@ -139,7 +138,6 @@
 -- -   @pInfo@ is either NULL or a pointer to a buffer.
 --
 -- = Description
--- #_description#
 --
 -- If @pInfo@ is @NULL@, then the maximum size of the information that
 -- /can/ be retrieved about the shader, in bytes, is returned in
@@ -196,18 +194,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_FEATURE_NOT_PRESENT@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkPipeline', 'VkShaderInfoTypeAMD',
@@ -216,23 +213,24 @@
 -- | VkShaderResourceUsageAMD - Resource usage information about a particular
 -- shader within a pipeline
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkShaderStatisticsInfoAMD'
 data VkShaderResourceUsageAMD = VkShaderResourceUsageAMD
-  { -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkNumUsedVgprs"
+  { -- | @numUsedVgprs@ is the number of vector instruction general-purpose
+  -- registers used by this shader.
   vkNumUsedVgprs :: Word32
-  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkNumUsedSgprs"
+  , -- | @numUsedSgprs@ is the number of scalar instruction general-purpose
+  -- registers used by this shader.
   vkNumUsedSgprs :: Word32
-  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkLdsSizePerLocalWorkGroup"
+  , -- | @ldsSizePerLocalWorkGroup@ is the maximum local data store size per work
+  -- group in bytes.
   vkLdsSizePerLocalWorkGroup :: Word32
-  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkLdsUsageSizeInBytes"
+  , -- | @ldsUsageSizeInBytes@ is the LDS usage size in bytes per work group by
+  -- this shader.
   vkLdsUsageSizeInBytes :: CSize
-  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkScratchMemUsageInBytes"
+  , -- | @scratchMemUsageInBytes@ is the scratch memory usage in bytes by this
+  -- shader.
   vkScratchMemUsageInBytes :: CSize
   }
   deriving (Eq, Show)
@@ -254,7 +252,6 @@
 -- shader within a pipeline
 --
 -- = Description
--- #_description#
 --
 -- Some implementations may merge multiple logical shader stages together
 -- in a single shader. In such cases, @shaderStageMask@ will contain a
@@ -270,24 +267,30 @@
 -- to performance optimizations where register pressure is a bottleneck.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkShaderResourceUsageAMD',
 -- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags'
 data VkShaderStatisticsInfoAMD = VkShaderStatisticsInfoAMD
-  { -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkShaderStageMask"
+  { -- | @shaderStageMask@ are the combination of logical shader stages contained
+  -- within this shader.
   vkShaderStageMask :: VkShaderStageFlags
-  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkResourceUsage"
+  , -- | @resourceUsage@ is an instance of 'VkShaderResourceUsageAMD' describing
+  -- internal physical device resources used by this shader.
   vkResourceUsage :: VkShaderResourceUsageAMD
-  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumPhysicalVgprs"
+  , -- | @numPhysicalVgprs@ is the maximum number of vector instruction
+  -- general-purpose registers (VGPRs) available to the physical device.
   vkNumPhysicalVgprs :: Word32
-  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumPhysicalSgprs"
+  , -- | @numPhysicalSgprs@ is the maximum number of scalar instruction
+  -- general-purpose registers (SGPRs) available to the physical device.
   vkNumPhysicalSgprs :: Word32
-  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumAvailableVgprs"
+  , -- | @numAvailableVgprs@ is the maximum limit of VGPRs made available to the
+  -- shader compiler.
   vkNumAvailableVgprs :: Word32
-  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumAvailableSgprs"
+  , -- | @numAvailableSgprs@ is the maximum limit of SGPRs made available to the
+  -- shader compiler.
   vkNumAvailableSgprs :: Word32
-  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkComputeWorkGroupSize"
+  , -- | @computeWorkGroupSize@ is the local workgroup size of this shader in {
+  -- X, Y, Z } dimensions.
   vkComputeWorkGroupSize :: Vector 3 Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs
--- a/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs
@@ -43,19 +43,18 @@
 -- not texture gather bias\/LOD functionality is supported for a given
 -- image format and a given physical device.
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkTextureLODGatherFormatPropertiesAMD = VkTextureLODGatherFormatPropertiesAMD
-  { -- No documentation found for Nested "VkTextureLODGatherFormatPropertiesAMD" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkTextureLODGatherFormatPropertiesAMD" "vkPNext"
+  , -- | @pNext@ is @NULL@.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkTextureLODGatherFormatPropertiesAMD" "vkSupportsTextureGatherLODBiasAMD"
+  , -- | @supportsTextureGatherLODBiasAMD@ tells if the image format can be used
+  -- with texture gather bias\/LOD functions, as introduced by the
+  -- @{html_spec_relative}#VK_AMD_texture_gather_bias_lod@ extension. This
+  -- field is set by the implementation. User-specified value is ignored.
   vkSupportsTextureGatherLODBiasAMD :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs b/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
--- a/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
@@ -106,7 +106,6 @@
 -- Memory Android Hardware Buffers
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that will be importing @buffer@.
 --
@@ -114,9 +113,6 @@
 --
 -- -   @pProperties@ will return properties of @buffer@.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @buffer@ /must/ be a valid Android hardware buffer object with at
@@ -134,14 +130,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAndroidHardwareBufferPropertiesANDROID',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -150,7 +145,6 @@
 -- for a memory object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the device memory being
 --     exported.
@@ -163,7 +157,6 @@
 --     underlying resources of the device memory object.
 --
 -- = Description
--- #_description#
 --
 -- Each call to @vkGetMemoryAndroidHardwareBufferANDROID@ /must/ return an
 -- Android hardware buffer with a new reference acquired in addition to the
@@ -189,16 +182,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkMemoryGetAndroidHardwareBufferInfoANDROID'
@@ -207,7 +199,6 @@
 -- hardware buffer
 --
 -- = Description
--- #_description#
 --
 -- If the @vkAllocateMemory@ command succeeds, the implementation /must/
 -- acquire a reference to the imported hardware buffer, which it /must/
@@ -235,15 +226,14 @@
 -- -   @buffer@ /must/ be a valid pointer to a @AHardwareBuffer@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImportAndroidHardwareBufferInfoANDROID = VkImportAndroidHardwareBufferInfoANDROID
-  { -- No documentation found for Nested "VkImportAndroidHardwareBufferInfoANDROID" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportAndroidHardwareBufferInfoANDROID" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportAndroidHardwareBufferInfoANDROID" "vkBuffer"
+  , -- | @buffer@ is the Android hardware buffer to import.
   vkBuffer :: Ptr AHardwareBuffer
   }
   deriving (Eq, Show)
@@ -261,11 +251,10 @@
 -- buffer usage flags
 --
 -- = Description
--- #_description#
 --
 -- The @androidHardwareBufferUsage@ field /must/ include Android hardware
--- buffer usage flags listed in the
--- <{html_spec_relative}#memory-external-android-hardware-buffer-usage AHardwareBuffer Usage Equivalence>
+-- buffer usage flags listed in the [AHardwareBuffer Usage
+-- Equivalence](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer-usage)
 -- table when the corresponding Vulkan image usage or image creation flags
 -- are included in the @usage@ or @flags@ fields of
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2'.
@@ -291,15 +280,15 @@
 --     @VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkAndroidHardwareBufferUsageANDROID = VkAndroidHardwareBufferUsageANDROID
-  { -- No documentation found for Nested "VkAndroidHardwareBufferUsageANDROID" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkAndroidHardwareBufferUsageANDROID" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkAndroidHardwareBufferUsageANDROID" "vkAndroidHardwareBufferUsage"
+  , -- | @androidHardwareBufferUsage@ returns the the Android hardware buffer
+  -- usage flags.
   vkAndroidHardwareBufferUsage :: Word64
   }
   deriving (Eq, Show)
@@ -316,22 +305,19 @@
 -- | VkAndroidHardwareBufferPropertiesANDROID - Properties of External Memory
 -- Android Hardware Buffers
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- @VkDeviceSize@, 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetAndroidHardwareBufferPropertiesANDROID'
 data VkAndroidHardwareBufferPropertiesANDROID = VkAndroidHardwareBufferPropertiesANDROID
-  { -- No documentation found for Nested "VkAndroidHardwareBufferPropertiesANDROID" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkAndroidHardwareBufferPropertiesANDROID" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkAndroidHardwareBufferPropertiesANDROID" "vkAllocationSize"
+  , -- | @allocationSize@ is the size of the external memory
   vkAllocationSize :: VkDeviceSize
-  , -- No documentation found for Nested "VkAndroidHardwareBufferPropertiesANDROID" "vkMemoryTypeBits"
+  , -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
+  -- type which the specified Android hardware buffer /can/ be imported as.
   vkMemoryTypeBits :: Word32
   }
   deriving (Eq, Show)
@@ -350,9 +336,6 @@
 -- | VkMemoryGetAndroidHardwareBufferInfoANDROID - Structure describing an
 -- Android hardware buffer memory export operation
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@
@@ -366,17 +349,17 @@
 --     @memory@.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetMemoryAndroidHardwareBufferANDROID'
 data VkMemoryGetAndroidHardwareBufferInfoANDROID = VkMemoryGetAndroidHardwareBufferInfoANDROID
-  { -- No documentation found for Nested "VkMemoryGetAndroidHardwareBufferInfoANDROID" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryGetAndroidHardwareBufferInfoANDROID" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryGetAndroidHardwareBufferInfoANDROID" "vkMemory"
+  , -- | @memory@ is the memory object from which the Android hardware buffer
+  -- will be exported.
   vkMemory :: VkDeviceMemory
   }
   deriving (Eq, Show)
@@ -394,10 +377,10 @@
 -- the image format properties of an Android hardware buffer
 --
 -- = Description
--- #_description#
 --
 -- If the Android hardware buffer has one of the formats listed in the
--- <{html_spec_relative}#memory-external-android-hardware-buffer-formats Format Equivalence table>,
+-- [Format Equivalence
+-- table](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-external-android-hardware-buffer-formats),
 -- then @format@ /must/ have the equivalent Vulkan format listed in the
 -- table. Otherwise, @format@ /may/ be @VK_FORMAT_UNDEFINED@, indicating
 -- the Android hardware buffer can only be used with an external format.
@@ -454,7 +437,6 @@
 --     @VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkChromaLocation',
 -- 'Graphics.Vulkan.Core10.ImageView.VkComponentMapping',
@@ -464,25 +446,35 @@
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrRange',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkAndroidHardwareBufferFormatPropertiesANDROID = VkAndroidHardwareBufferFormatPropertiesANDROID
-  { -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkFormat"
+  , -- | @format@ is the Vulkan format corresponding to the Android hardware
+  -- buffer’s format, or @VK_FORMAT_UNDEFINED@ if there isn’t an equivalent
+  -- Vulkan format.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkExternalFormat"
+  , -- | @externalFormat@ is an implementation-defined external format identifier
+  -- for use with 'VkExternalFormatANDROID'. It /must/ not be zero.
   vkExternalFormat :: Word64
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkFormatFeatures"
+  , -- | @formatFeatures@ describes the capabilities of this external format when
+  -- used with an image bound to memory imported from @buffer@.
   vkFormatFeatures :: VkFormatFeatureFlags
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSamplerYcbcrConversionComponents"
+  , -- | @samplerYcbcrConversionComponents@ is the component swizzle that
+  -- /should/ be used in
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'.
   vkSamplerYcbcrConversionComponents :: VkComponentMapping
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedYcbcrModel"
+  , -- | @suggestedYcbcrModel@ is a suggested color model to use in the
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'.
   vkSuggestedYcbcrModel :: VkSamplerYcbcrModelConversion
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedYcbcrRange"
+  , -- | @suggestedYcbcrRange@ is a suggested numerical value range to use in
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'.
   vkSuggestedYcbcrRange :: VkSamplerYcbcrRange
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedXChromaOffset"
+  , -- | @suggestedXChromaOffset@ is a suggested X chroma offset to use in
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'.
   vkSuggestedXChromaOffset :: VkChromaLocation
-  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedYChromaOffset"
+  , -- | @suggestedYChromaOffset@ is a suggested Y chroma offset to use in
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'.
   vkSuggestedYChromaOffset :: VkChromaLocation
   }
   deriving (Eq, Show)
@@ -514,7 +506,6 @@
 -- buffer external format
 --
 -- = Description
--- #_description#
 --
 -- If @externalFormat@ is zero, the effect is as if the
 -- @VkExternalFormatANDROID@ structure was not present. Otherwise, the
@@ -533,15 +524,15 @@
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExternalFormatANDROID = VkExternalFormatANDROID
-  { -- No documentation found for Nested "VkExternalFormatANDROID" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalFormatANDROID" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalFormatANDROID" "vkExternalFormat"
+  , -- | @externalFormat@ is an implementation-defined identifier for the
+  -- external format
   vkExternalFormat :: Word64
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
@@ -52,7 +52,6 @@
 -- | vkAcquireXlibDisplayEXT - Acquire access to a VkDisplayKHR using Xlib
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ The physical device the display is on.
 --
@@ -61,7 +60,6 @@
 -- -   @display@ The display the caller wishes to control in Vulkan.
 --
 -- = Description
--- #_description#
 --
 -- All permissions necessary to control the display are granted to the
 -- Vulkan instance associated with @physicalDevice@ until the display is
@@ -89,14 +87,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_INITIALIZATION_FAILED@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
@@ -105,7 +102,6 @@
 -- X11 RandR Output
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ The physical device to query the display handle on.
 --
@@ -119,7 +115,6 @@
 --     be returned here.
 --
 -- = Description
--- #_description#
 --
 -- If there is no 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR'
 -- corresponding to @rrOutput@ on @physicalDevice@,
@@ -136,11 +131,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
@@ -119,7 +119,6 @@
 -- | VkBlendOverlapEXT - Enumerant specifying the blend overlap parameter
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_BLEND_OVERLAP_UNCORRELATED_EXT@ specifies that there is no
 --     correlation between the source and destination coverage.
@@ -130,21 +129,31 @@
 -- -   @VK_BLEND_OVERLAP_DISJOINT_EXT@ specifies that the source and
 --     destination coverage are considered to have minimal overlap.
 --
--- > +-----------------------------------+-----------------------------------+
--- > | Overlap Mode                      | Weighting Equations               |
--- > +===================================+===================================+
--- > | @VK_BLEND_OVERLAP_UNCORRELATED_EX |                                   |
--- > | T@                                |                                   |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_BLEND_OVERLAP_CONJOINT_EXT@   |                                   |
--- > +-----------------------------------+-----------------------------------+
--- > | @VK_BLEND_OVERLAP_DISJOINT_EXT@   |                                   |
--- > +-----------------------------------+-----------------------------------+
--- >
--- > Advanced Blend Overlap Modes
+-- +-------------------------------------+--------------------------------------------------------------------------------------+
+-- | Overlap Mode                        | Weighting Equations                                                                  |
+-- +=====================================+======================================================================================+
+-- | @VK_BLEND_OVERLAP_UNCORRELATED_EXT@ | \[                                              \begin{aligned}                      |
+-- |                                     |                                                 p_0(A_s,A_d) & = A_sA_d \\           |
+-- |                                     |                                                 p_1(A_s,A_d) & = A_s(1-A_d) \\       |
+-- |                                     |                                                 p_2(A_s,A_d) & = A_d(1-A_s) \\       |
+-- |                                     |                                               \end{aligned}\]                        |
+-- +-------------------------------------+--------------------------------------------------------------------------------------+
+-- | @VK_BLEND_OVERLAP_CONJOINT_EXT@     | \[                                              \begin{aligned}                      |
+-- |                                     |                                                 p_0(A_s,A_d) & = min(A_s,A_d) \\     |
+-- |                                     |                                                 p_1(A_s,A_d) & = max(A_s-A_d,0) \\   |
+-- |                                     |                                                 p_2(A_s,A_d) & = max(A_d-A_s,0) \\   |
+-- |                                     |                                               \end{aligned}\]                        |
+-- +-------------------------------------+--------------------------------------------------------------------------------------+
+-- | @VK_BLEND_OVERLAP_DISJOINT_EXT@     | \[                                              \begin{aligned}                      |
+-- |                                     |                                                 p_0(A_s,A_d) & = max(A_s+A_d-1,0) \\ |
+-- |                                     |                                                 p_1(A_s,A_d) & = min(A_s,1-A_d) \\   |
+-- |                                     |                                                 p_2(A_s,A_d) & = min(A_d,1-A_s) \\   |
+-- |                                     |                                               \end{aligned}\]                        |
+-- +-------------------------------------+--------------------------------------------------------------------------------------+
 --
+-- Advanced Blend Overlap Modes
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineColorBlendAdvancedStateCreateInfoEXT'
 newtype VkBlendOverlapEXT = VkBlendOverlapEXT Int32
@@ -339,19 +348,18 @@
 -- advanced blending features that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT@
 -- structure describe the following features:
 --
 -- = Description
--- #_description#
 --
 -- -   @advancedBlendCoherentOperations@ specifies whether blending using
---     <{html_spec_relative}#framebuffer-blend-advanced advanced blend operations>
---     is guaranteed to execute atomically and in
---     <{html_spec_relative}#drawing-primitive-order primitive order>. If
---     this is @VK_TRUE@,
+--     [advanced blend
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced)
+--     is guaranteed to execute atomically and in [primitive
+--     order](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#drawing-primitive-order).
+--     If this is @VK_TRUE@,
 --     @VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT@ is treated the
 --     same as @VK_ACCESS_COLOR_ATTACHMENT_READ_BIT@, and advanced blending
 --     needs no additional synchronization over basic blending. If this is
@@ -373,15 +381,14 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT = VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "vkAdvancedBlendCoherentOperations"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "advancedBlendCoherentOperations"
   vkAdvancedBlendCoherentOperations :: VkBool32
   }
   deriving (Eq, Show)
@@ -400,18 +407,16 @@
 -- implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @advancedBlendMaxColorAttachments@ is one greater than the highest
 --     color attachment index that /can/ be used in a subpass, for a
---     pipeline that uses an
---     <{html_spec_relative}#framebuffer-blend-advanced advanced blend operation>.
+--     pipeline that uses an [advanced blend
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#framebuffer-blend-advanced).
 --
 -- -   @advancedBlendIndependentBlend@ specifies whether advanced blend
 --     operations /can/ vary per-attachment.
@@ -448,25 +453,24 @@
 -- it is filled with the implementation-dependent limits.
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT = VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendMaxColorAttachments"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "advancedBlendMaxColorAttachments"
   vkAdvancedBlendMaxColorAttachments :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendIndependentBlend"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "advancedBlendIndependentBlend"
   vkAdvancedBlendIndependentBlend :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendNonPremultipliedSrcColor"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "advancedBlendNonPremultipliedSrcColor"
   vkAdvancedBlendNonPremultipliedSrcColor :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendNonPremultipliedDstColor"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "advancedBlendNonPremultipliedDstColor"
   vkAdvancedBlendNonPremultipliedDstColor :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendCorrelatedOverlap"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "advancedBlendCorrelatedOverlap"
   vkAdvancedBlendCorrelatedOverlap :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendAllOperations"
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "advancedBlendAllOperations"
   vkAdvancedBlendAllOperations :: VkBool32
   }
   deriving (Eq, Show)
@@ -494,7 +498,6 @@
 -- parameters that affect advanced blend operations
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not present, @srcPremultiplied@ and
 -- @dstPremultiplied@ are both considered to be @VK_TRUE@, and
@@ -502,16 +505,16 @@
 --
 -- == Valid Usage
 --
--- -   If the
---     <{html_spec_relative}#features-limits-advancedBlendNonPremultipliedSrcColor non-premultiplied source color>
+-- -   If the [non-premultiplied source
+--     color](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-advancedBlendNonPremultipliedSrcColor)
 --     property is not supported, @srcPremultiplied@ /must/ be @VK_TRUE@
 --
--- -   If the
---     <{html_spec_relative}#features-limits-advancedBlendNonPremultipliedDstColor non-premultiplied destination color>
+-- -   If the [non-premultiplied destination
+--     color](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-advancedBlendNonPremultipliedDstColor)
 --     property is not supported, @dstPremultiplied@ /must/ be @VK_TRUE@
 --
--- -   If the
---     <{html_spec_relative}#features-limits-advancedBlendCorrelatedOverlap correlated overlap>
+-- -   If the [correlated
+--     overlap](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-limits-advancedBlendCorrelatedOverlap)
 --     property is not supported, @blendOverlap@ /must/ be
 --     @VK_BLEND_OVERLAP_UNCORRELATED_EXT@
 --
@@ -523,20 +526,22 @@
 -- -   @blendOverlap@ /must/ be a valid 'VkBlendOverlapEXT' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkBlendOverlapEXT', @VkBool32@,
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPipelineColorBlendAdvancedStateCreateInfoEXT = VkPipelineColorBlendAdvancedStateCreateInfoEXT
-  { -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkSrcPremultiplied"
+  , -- | @srcPremultiplied@ specifies whether the source color of the blend
+  -- operation is treated as premultiplied.
   vkSrcPremultiplied :: VkBool32
-  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkDstPremultiplied"
+  , -- | @dstPremultiplied@ specifies whether the destination color of the blend
+  -- operation is treated as premultiplied.
   vkDstPremultiplied :: VkBool32
-  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkBlendOverlap"
+  , -- | @blendOverlap@ is a 'VkBlendOverlapEXT' value specifying how the source
+  -- and destination sample’s coverage is correlated.
   vkBlendOverlap :: VkBlendOverlapEXT
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
@@ -71,7 +71,6 @@
 -- rasterization mode
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineRasterizationConservativeStateCreateInfoEXT'
 newtype VkConservativeRasterizationModeEXT = VkConservativeRasterizationModeEXT Int32
@@ -116,13 +115,11 @@
 -- future use
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineRasterizationConservativeStateCreateFlagsEXT@ is a bitmask
 -- type for setting a mask, but is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineRasterizationConservativeStateCreateInfoEXT'
 newtype VkPipelineRasterizationConservativeStateCreateFlagsEXT = VkPipelineRasterizationConservativeStateCreateFlagsEXT VkFlags
@@ -160,14 +157,12 @@
 -- implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the
 -- @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@ structure
 -- describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @primitiveOverestimationSize@ is the size in pixels the generating
 --     primitive is increased at each of its edges during conservative
@@ -227,7 +222,16 @@
 --     rasterization is enabled and the fragment pixel square is fully
 --     covered by the generating primitive.
 --
--- -   @conservativeRasterizationPostDepthCoverage@ /must/ be false.
+-- -   @conservativeRasterizationPostDepthCoverage@ is true if the
+--     implementation supports conservative rasterization with the
+--     [@PostDepthCoverage@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage)
+--     execution mode enabled. When supported the @SampleMask@ built-in
+--     input variable will reflect the coverage after the early
+--     per-fragment depth and stencil tests are applied even when
+--     conservative rasterization is enabled. Otherwise
+--     [@PostDepthCoverage@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#shaders-fragment-earlytest-postdepthcoverage)
+--     execution mode /must/ not be used when conservative rasterization is
+--     enabled.
 --
 -- == Valid Usage (Implicit)
 --
@@ -240,31 +244,30 @@
 -- it is filled with the implementation-dependent limits and properties.
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceConservativeRasterizationPropertiesEXT = VkPhysicalDeviceConservativeRasterizationPropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkPrimitiveOverestimationSize"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "primitiveOverestimationSize"
   vkPrimitiveOverestimationSize :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkMaxExtraPrimitiveOverestimationSize"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "maxExtraPrimitiveOverestimationSize"
   vkMaxExtraPrimitiveOverestimationSize :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkExtraPrimitiveOverestimationSizeGranularity"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "extraPrimitiveOverestimationSizeGranularity"
   vkExtraPrimitiveOverestimationSizeGranularity :: CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkPrimitiveUnderestimation"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "primitiveUnderestimation"
   vkPrimitiveUnderestimation :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkConservativePointAndLineRasterization"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "conservativePointAndLineRasterization"
   vkConservativePointAndLineRasterization :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkDegenerateTrianglesRasterized"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "degenerateTrianglesRasterized"
   vkDegenerateTrianglesRasterized :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkDegenerateLinesRasterized"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "degenerateLinesRasterized"
   vkDegenerateLinesRasterized :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkFullyCoveredFragmentShaderInputVariable"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "fullyCoveredFragmentShaderInputVariable"
   vkFullyCoveredFragmentShaderInputVariable :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkConservativeRasterizationPostDepthCoverage"
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "conservativeRasterizationPostDepthCoverage"
   vkConservativeRasterizationPostDepthCoverage :: VkBool32
   }
   deriving (Eq, Show)
@@ -297,9 +300,6 @@
 -- | VkPipelineRasterizationConservativeStateCreateInfoEXT - Structure
 -- specifying conservative raster state
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @extraPrimitiveOverestimationSize@ /must/ be in the range of @0.0@
@@ -318,21 +318,25 @@
 --     'VkConservativeRasterizationModeEXT' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkConservativeRasterizationModeEXT',
 -- 'VkPipelineRasterizationConservativeStateCreateFlagsEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPipelineRasterizationConservativeStateCreateInfoEXT = VkPipelineRasterizationConservativeStateCreateInfoEXT
-  { -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkPipelineRasterizationConservativeStateCreateFlagsEXT
-  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkConservativeRasterizationMode"
+  , -- | @conservativeRasterizationMode@ is the conservative rasterization mode
+  -- to use.
   vkConservativeRasterizationMode :: VkConservativeRasterizationModeEXT
-  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkExtraPrimitiveOverestimationSize"
+  , -- | @extraPrimitiveOverestimationSize@ is the extra size in pixels to
+  -- increase the generating primitive during conservative rasterization at
+  -- each of its edges in @X@ and @Y@ equally in screen space beyond the base
+  -- overestimation specified in
+  -- @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@::@primitiveOverestimationSize@.
   vkExtraPrimitiveOverestimationSize :: CFloat
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs
@@ -82,7 +82,6 @@
 -- | vkDebugMarkerSetObjectNameEXT - Give a user-friendly name to an object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device that created the object.
 --
@@ -90,9 +89,6 @@
 --     'VkDebugMarkerObjectNameInfoEXT' structure specifying the parameters
 --     of the name to set on the object.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -106,16 +102,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugMarkerObjectNameInfoEXT',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -123,7 +118,6 @@
 -- | vkDebugMarkerSetObjectTagEXT - Attach arbitrary data to an object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device that created the object.
 --
@@ -131,9 +125,6 @@
 --     'VkDebugMarkerObjectTagInfoEXT' structure specifying the parameters
 --     of the tag to attach to the object.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -147,16 +138,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugMarkerObjectTagInfoEXT',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -164,7 +154,6 @@
 -- | vkCmdDebugMarkerBeginEXT - Open a command buffer marker region
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
@@ -173,9 +162,6 @@
 --     'VkDebugMarkerMarkerInfoEXT' structure specifying the parameters of
 --     the marker region to open.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -183,8 +169,8 @@
 -- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
 --     @VkDebugMarkerMarkerInfoEXT@ structure
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -196,18 +182,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'VkDebugMarkerMarkerInfoEXT'
@@ -215,13 +200,11 @@
 -- | vkCmdDebugMarkerEndEXT - Close a command buffer marker region
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
 --
 -- = Description
--- #_description#
 --
 -- An application /may/ open a marker region in one command buffer and
 -- close it in another, or otherwise split marker regions across multiple
@@ -245,8 +228,8 @@
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -258,25 +241,23 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
 foreign import ccall "vkCmdDebugMarkerEndEXT" vkCmdDebugMarkerEndEXT :: ("commandBuffer" ::: VkCommandBuffer) -> IO ()
 -- | vkCmdDebugMarkerInsertEXT - Insert a marker label into a command buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
@@ -285,9 +266,6 @@
 --     'VkDebugMarkerMarkerInfoEXT' structure specifying the parameters of
 --     the marker to insert.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -295,8 +273,8 @@
 -- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
 --     @VkDebugMarkerMarkerInfoEXT@ structure
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -308,18 +286,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'VkDebugMarkerMarkerInfoEXT'
@@ -328,7 +305,6 @@
 -- an object
 --
 -- = Description
--- #_description#
 --
 -- Applications /may/ change the name associated with an object simply by
 -- calling @vkDebugMarkerSetObjectNameEXT@ again with a new string. To
@@ -344,7 +320,7 @@
 --
 -- -   @object@ /must/ be a Vulkan object of the type associated with
 --     @objectType@ as defined in
---     <{html_spec_relative}#debug-report-object-types {html_spec_relative}#debug-report-object-types>.
+--     [{html_spec_relative}#debug-report-object-types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debug-report-object-types).
 --
 -- == Valid Usage (Implicit)
 --
@@ -360,21 +336,23 @@
 -- -   @pObjectName@ /must/ be a null-terminated UTF-8 string
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportObjectTypeEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkDebugMarkerSetObjectNameEXT'
 data VkDebugMarkerObjectNameInfoEXT = VkDebugMarkerObjectNameInfoEXT
-  { -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkObjectType"
+  , -- | @objectType@ is a
+  -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportObjectTypeEXT'
+  -- specifying the type of the object to be named.
   vkObjectType :: VkDebugReportObjectTypeEXT
-  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkObject"
+  , -- | @object@ is the object to be named.
   vkObject :: Word64
-  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkPObjectName"
+  , -- | @pObjectName@ is a null-terminated UTF-8 string specifying the name to
+  -- apply to @object@.
   vkPObjectName :: Ptr CChar
   }
   deriving (Eq, Show)
@@ -396,7 +374,6 @@
 -- an object
 --
 -- = Description
--- #_description#
 --
 -- The @tagName@ parameter gives a name or identifier to the type of data
 -- being tagged. This can be used by debugging layers to easily filter for
@@ -411,7 +388,7 @@
 --
 -- -   @object@ /must/ be a Vulkan object of the type associated with
 --     @objectType@ as defined in
---     <{html_spec_relative}#debug-report-object-types {html_spec_relative}#debug-report-object-types>.
+--     [{html_spec_relative}#debug-report-object-types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debug-report-object-types).
 --
 -- == Valid Usage (Implicit)
 --
@@ -429,25 +406,27 @@
 -- -   @tagSize@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportObjectTypeEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkDebugMarkerSetObjectTagEXT'
 data VkDebugMarkerObjectTagInfoEXT = VkDebugMarkerObjectTagInfoEXT
-  { -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkObjectType"
+  , -- | @objectType@ is a
+  -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportObjectTypeEXT'
+  -- specifying the type of the object to be named.
   vkObjectType :: VkDebugReportObjectTypeEXT
-  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkObject"
+  , -- | @object@ is the object to be tagged.
   vkObject :: Word64
-  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkTagName"
+  , -- | @tagName@ is a numerical identifier of the tag.
   vkTagName :: Word64
-  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkTagSize"
+  , -- | @tagSize@ is the number of bytes of data to attach to the object.
   vkTagSize :: CSize
-  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkPTag"
+  , -- | @pTag@ is an array of @tagSize@ bytes containing the data to be
+  -- associated with the object.
   vkPTag :: Ptr ()
   }
   deriving (Eq, Show)
@@ -472,9 +451,6 @@
 -- | VkDebugMarkerMarkerInfoEXT - Specify parameters of a command buffer
 -- marker region
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT@
@@ -484,18 +460,21 @@
 -- -   @pMarkerName@ /must/ be a null-terminated UTF-8 string
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCmdDebugMarkerBeginEXT', 'vkCmdDebugMarkerInsertEXT'
 data VkDebugMarkerMarkerInfoEXT = VkDebugMarkerMarkerInfoEXT
-  { -- No documentation found for Nested "VkDebugMarkerMarkerInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugMarkerMarkerInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugMarkerMarkerInfoEXT" "vkPMarkerName"
+  , -- | @pMarkerName@ is a pointer to a null-terminated UTF-8 string that
+  -- contains the name of the marker.
   vkPMarkerName :: Ptr CChar
-  , -- No documentation found for Nested "VkDebugMarkerMarkerInfoEXT" "vkColor"
+  , -- | @color@ is an /optional/ RGBA color value that can be associated with
+  -- the marker. A particular implementation /may/ choose to ignore this
+  -- color value. The values contain RGBA values in order, in the range 0.0
+  -- to 1.0. If all elements in @color@ are set to 0.0 then it is ignored.
   vkColor :: Vector 4 CFloat
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs
@@ -131,102 +131,83 @@
 -- | VkDebugReportObjectTypeEXT - Specify the type of an object handle
 --
 -- = Description
--- #_description#
 --
--- > +------------------------------------------+---------------------------+
--- > | 'VkDebugReportObjectTypeEXT'             | Vulkan Handle Type        |
--- > +==========================================+===========================+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT | Unknown\/Undefined Handle |
--- > | @                                        |                           |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EX | 'Graphics.Vulkan.Core10.D |
--- > | T@                                       | eviceInitialization.VkIns |
--- > |                                          | tance'                    |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DE | 'Graphics.Vulkan.Core10.D |
--- > | VICE_EXT@                                | eviceInitialization.VkPhy |
--- > |                                          | sicalDevice'              |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT@ | 'Graphics.Vulkan.Core10.D |
--- > |                                          | eviceInitialization.VkDev |
--- > |                                          | ice'                      |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT@  | 'Graphics.Vulkan.Core10.Q |
--- > |                                          | ueue.VkQueue'             |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_E | 'Graphics.Vulkan.Core10.Q |
--- > | XT@                                      | ueue.VkSemaphore'         |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUF | 'Graphics.Vulkan.Core10.Q |
--- > | FER_EXT@                                 | ueue.VkCommandBuffer'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT@  | 'Graphics.Vulkan.Core10.Q |
--- > |                                          | ueue.VkFence'             |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMO | 'Graphics.Vulkan.Core10.M |
--- > | RY_EXT@                                  | emory.VkDeviceMemory'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT@ | 'Graphics.Vulkan.Core10.M |
--- > |                                          | emoryManagement.VkBuffer' |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT@  | 'Graphics.Vulkan.Core10.M |
--- > |                                          | emoryManagement.VkImage'  |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT@  | 'Graphics.Vulkan.Core10.E |
--- > |                                          | vent.VkEvent'             |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_ | 'Graphics.Vulkan.Core10.Q |
--- > | EXT@                                     | uery.VkQueryPool'         |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW | 'Graphics.Vulkan.Core10.B |
--- > | _EXT@                                    | ufferView.VkBufferView'   |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_ | 'Graphics.Vulkan.Core10.I |
--- > | EXT@                                     | mageView.VkImageView'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODU | 'Graphics.Vulkan.Core10.S |
--- > | LE_EXT@                                  | hader.VkShaderModule'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CA | 'Graphics.Vulkan.Core10.P |
--- > | CHE_EXT@                                 | ipelineCache.VkPipelineCa |
--- > |                                          | che'                      |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LA | 'Graphics.Vulkan.Core10.P |
--- > | YOUT_EXT@                                | ipeline.VkPipelineLayout' |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS | 'Graphics.Vulkan.Core10.P |
--- > | _EXT@                                    | ipeline.VkRenderPass'     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EX | 'Graphics.Vulkan.Core10.P |
--- > | T@                                       | ipeline.VkPipeline'       |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_ | 'Graphics.Vulkan.Core10.P |
--- > | SET_LAYOUT_EXT@                          | ipelineLayout.VkDescripto |
--- > |                                          | rSetLayout'               |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT | 'Graphics.Vulkan.Core10.S |
--- > | @                                        | ampler.VkSampler'         |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_ | 'Graphics.Vulkan.Core10.D |
--- > | POOL_EXT@                                | escriptorSet.VkDescriptor |
--- > |                                          | Pool'                     |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_ | 'Graphics.Vulkan.Core10.D |
--- > | SET_EXT@                                 | escriptorSet.VkDescriptor |
--- > |                                          | Set'                      |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER | 'Graphics.Vulkan.Core10.P |
--- > | _EXT@                                    | ass.VkFramebuffer'        |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POO | 'Graphics.Vulkan.Core10.C |
--- > | L_EXT@                                   | ommandPool.VkCommandPool' |
--- > +------------------------------------------+---------------------------+
--- > | @VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPOR | 'VkDebugReportCallbackEXT |
--- > | T_CALLBACK_EXT_EXT@                      | '                         |
--- > +------------------------------------------+---------------------------+
--- >
--- > VkDebugReportObjectTypeEXT and Vulkan Handle Relationship
+-- \'
 --
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | 'VkDebugReportObjectTypeEXT'                                     | Vulkan Handle Type                                                                                  |
+-- +==================================================================+=====================================================================================================+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT@                        | Unknown\/Undefined Handle                                                                           |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT@                       | 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'                                            |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT@                | 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'                                      |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT@                         | 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'                                              |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT@                          | 'Graphics.Vulkan.Core10.Queue.VkQueue'                                                              |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT@                      | 'Graphics.Vulkan.Core10.Queue.VkSemaphore'                                                          |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT@                 | 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'                                                      |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT@                          | 'Graphics.Vulkan.Core10.Queue.VkFence'                                                              |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT@                  | 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory'                                                      |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT@                         | 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer'                                                  |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT@                          | 'Graphics.Vulkan.Core10.MemoryManagement.VkImage'                                                   |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT@                          | 'Graphics.Vulkan.Core10.Event.VkEvent'                                                              |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT@                     | 'Graphics.Vulkan.Core10.Query.VkQueryPool'                                                          |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT@                    | 'Graphics.Vulkan.Core10.BufferView.VkBufferView'                                                    |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT@                     | 'Graphics.Vulkan.Core10.ImageView.VkImageView'                                                      |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT@                  | 'Graphics.Vulkan.Core10.Shader.VkShaderModule'                                                      |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT@                 | 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCache'                                              |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT@                | 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'                                                  |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT@                    | 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass'                                                      |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT@                       | 'Graphics.Vulkan.Core10.Pipeline.VkPipeline'                                                        |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT@          | 'Graphics.Vulkan.Core10.PipelineLayout.VkDescriptorSetLayout'                                       |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT@                        | 'Graphics.Vulkan.Core10.Sampler.VkSampler'                                                          |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT@                | 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorPool'                                             |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT@                 | 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSet'                                              |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT@                    | 'Graphics.Vulkan.Core10.Pass.VkFramebuffer'                                                         |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT@                   | 'Graphics.Vulkan.Core10.CommandPool.VkCommandPool'                                                  |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT@                    | 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'                                            |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT@                  | 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'                                        |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT@      | 'VkDebugReportCallbackEXT'                                                                          |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT@                    | 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR'                                            |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT@               | 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayModeKHR'                                        |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT@               | 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableNVX'                      |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT@   | 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkIndirectCommandsLayoutNVX'           |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+-- | @VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT@ | 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplate' |
+-- +------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
+--
+-- VkDebugReportObjectTypeEXT and Vulkan Handle Relationship
+--
 -- __Note__
 --
 -- The primary expected use of @VK_ERROR_VALIDATION_FAILED_EXT@ is for
@@ -234,7 +215,6 @@
 -- see this error code during normal use of the validation layers.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.VkDebugMarkerObjectNameInfoEXT',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.VkDebugMarkerObjectTagInfoEXT',
@@ -470,7 +450,6 @@
 -- report callback
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugReportFlagsEXT'
 newtype VkDebugReportFlagBitsEXT = VkDebugReportFlagBitsEXT VkFlags
@@ -562,7 +541,6 @@
 -- function
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @flags@ specifies the 'VkDebugReportFlagBitsEXT' that triggered this
 --     callback.
@@ -593,7 +571,6 @@
 --     'VkDebugReportCallbackEXT' was created.
 --
 -- = Description
--- #_description#
 --
 -- The callback /must/ not call @vkDestroyDebugReportCallbackEXT@.
 --
@@ -606,10 +583,9 @@
 -- is not @VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT@ and @object@ is not
 -- @VK_NULL_HANDLE@, @object@ /must/ be a Vulkan object of the
 -- corresponding type associated with @objectType@ as defined in
--- <{html_spec_relative}#debug-report-object-types {html_spec_relative}#debug-report-object-types>.
+-- [{html_spec_relative}#debug-report-object-types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debug-report-object-types).
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugReportCallbackCreateInfoEXT'
 type PFN_vkDebugReportCallbackEXT = Ptr (("flags" ::: VkDebugReportFlagsEXT) -> ("objectType" ::: VkDebugReportObjectTypeEXT) -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> ("pUserData" ::: Ptr ()) -> IO VkBool32)
@@ -618,18 +594,13 @@
 -- | VkDebugReportCallbackEXT - Opaque handle to a debug report callback
 -- object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'vkCreateDebugReportCallbackEXT', 'vkDestroyDebugReportCallbackEXT'
 type VkDebugReportCallbackEXT = Ptr VkDebugReportCallbackEXT_T
 -- | vkCreateDebugReportCallbackEXT - Create a debug report callback object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ the instance the callback will be logged on.
 --
@@ -638,14 +609,13 @@
 --     will be called.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pCallback@ is a pointer to record the @VkDebugReportCallbackEXT@
 --     object created.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -661,14 +631,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDebugReportCallbackCreateInfoEXT', 'VkDebugReportCallbackEXT',
@@ -677,7 +646,6 @@
 -- | vkDestroyDebugReportCallbackEXT - Destroy a debug report callback object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ the instance where the callback was created.
 --
@@ -688,10 +656,9 @@
 --     callback is active.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -718,7 +685,6 @@
 -- -   Host access to @callback@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDebugReportCallbackEXT',
@@ -727,7 +693,6 @@
 -- | vkDebugReportMessageEXT - Inject a message into a debug stream
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the debug stream’s @VkInstance@.
 --
@@ -752,7 +717,6 @@
 --     conditions.
 --
 -- = Description
--- #_description#
 --
 -- The call will propagate through the layers and generate callback(s) as
 -- indicated by the message’s flags. The parameters are passed on to the
@@ -766,7 +730,7 @@
 -- -   If @objectType@ is not @VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT@ and
 --     @object@ is not @VK_NULL_HANDLE@, @object@ /must/ be a Vulkan object
 --     of the corresponding type associated with @objectType@ as defined in
---     <{html_spec_relative}#debug-report-object-types {html_spec_relative}#debug-report-object-types>.
+--     [{html_spec_relative}#debug-report-object-types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debug-report-object-types).
 --
 -- == Valid Usage (Implicit)
 --
@@ -784,7 +748,6 @@
 -- -   @pMessage@ /must/ be a null-terminated UTF-8 string
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugReportFlagsEXT', 'VkDebugReportObjectTypeEXT',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'
@@ -793,7 +756,6 @@
 -- a newly created debug report callback
 --
 -- = Description
--- #_description#
 --
 -- For each @VkDebugReportCallbackEXT@ that is created the
 -- @VkDebugReportCallbackCreateInfoEXT@::@flags@ determine when that
@@ -826,21 +788,21 @@
 --     values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'PFN_vkDebugReportCallbackEXT', 'VkDebugReportFlagsEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateDebugReportCallbackEXT'
 data VkDebugReportCallbackCreateInfoEXT = VkDebugReportCallbackCreateInfoEXT
-  { -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkDebugReportFlagBitsEXT' specifying which
+  -- event(s) will cause this callback to be called.
   vkFlags :: VkDebugReportFlagsEXT
-  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkPfnCallback"
+  , -- | @pfnCallback@ is the application callback function to call.
   vkPfnCallback :: PFN_vkDebugReportCallbackEXT
-  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkPUserData"
+  , -- | @pUserData@ is user data to be passed to the callback.
   vkPUserData :: Ptr ()
   }
   deriving (Eq, Show)
@@ -861,13 +823,11 @@
 -- | VkDebugReportFlagsEXT - Bitmask of VkDebugReportFlagBitsEXT
 --
 -- = Description
--- #_description#
 --
 -- @VkDebugReportFlagsEXT@ is a bitmask type for setting a mask of zero or
 -- more 'VkDebugReportFlagBitsEXT'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugReportCallbackCreateInfoEXT', 'VkDebugReportFlagBitsEXT',
 -- 'vkDebugReportMessageEXT'
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs
@@ -124,7 +124,6 @@
 -- severities of events cause a debug messenger callback
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsMessageSeverityFlagsEXT', 'vkSubmitDebugUtilsMessageEXT'
 newtype VkDebugUtilsMessageSeverityFlagBitsEXT = VkDebugUtilsMessageSeverityFlagBitsEXT VkFlags
@@ -182,7 +181,6 @@
 -- events cause a debug messenger callback
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsMessageTypeFlagsEXT'
 newtype VkDebugUtilsMessageTypeFlagBitsEXT = VkDebugUtilsMessageTypeFlagBitsEXT VkFlags
@@ -295,7 +293,6 @@
 -- messenger callback function
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @messageSeverity@ specifies the
 --     'VkDebugUtilsMessageSeverityFlagBitsEXT' that triggered this
@@ -311,7 +308,6 @@
 --     'VkDebugUtilsMessengerEXT' was created.
 --
 -- = Description
--- #_description#
 --
 -- The callback /must/ not call 'vkDestroyDebugUtilsMessengerEXT'.
 --
@@ -321,7 +317,6 @@
 -- development.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsMessengerCreateInfoEXT'
 type PFN_vkDebugUtilsMessengerCallbackEXT = Ptr (("messageSeverity" ::: VkDebugUtilsMessageSeverityFlagBitsEXT) -> ("messageType" ::: VkDebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr VkDebugUtilsMessengerCallbackDataEXT) -> ("pUserData" ::: Ptr ()) -> IO VkBool32)
@@ -330,7 +325,6 @@
 -- | VkDebugUtilsMessengerEXT - Opaque handle to a debug messenger object
 --
 -- = Description
--- #_description#
 --
 -- The debug messenger will provide detailed feedback on the application’s
 -- use of Vulkan when events of interest occur. When an event of interest
@@ -341,14 +335,12 @@
 -- messages.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'vkCreateDebugUtilsMessengerEXT', 'vkDestroyDebugUtilsMessengerEXT'
 type VkDebugUtilsMessengerEXT = Ptr VkDebugUtilsMessengerEXT_T
 -- | vkSetDebugUtilsObjectNameEXT - Give a user-friendly name to an object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device that created the object.
 --
@@ -356,9 +348,6 @@
 --     'VkDebugUtilsObjectNameInfoEXT' structure specifying the parameters
 --     of the name to set on the object.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -373,16 +362,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsObjectNameInfoEXT',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -390,7 +378,6 @@
 -- | vkSetDebugUtilsObjectTagEXT - Attach arbitrary data to an object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device that created the object.
 --
@@ -398,9 +385,6 @@
 --     'VkDebugUtilsObjectTagInfoEXT' structure specifying the parameters
 --     of the tag to attach to the object.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -415,16 +399,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsObjectTagInfoEXT',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -432,7 +415,6 @@
 -- | vkQueueBeginDebugUtilsLabelEXT - Open a queue debug label region
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @queue@ is the queue in which to start a debug label region.
 --
@@ -440,9 +422,6 @@
 --     'VkDebugUtilsLabelEXT' structure specifying the parameters of the
 --     label region to open.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @queue@ /must/ be a valid @VkQueue@ handle
@@ -452,29 +431,26 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | -               | -               | Any             | -               |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | -                                                                                                           | -                                                                                                          | Any                                                                                                   | -                                                                                                                          |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsLabelEXT', 'Graphics.Vulkan.Core10.Queue.VkQueue'
 foreign import ccall "vkQueueBeginDebugUtilsLabelEXT" vkQueueBeginDebugUtilsLabelEXT :: ("queue" ::: VkQueue) -> ("pLabelInfo" ::: Ptr VkDebugUtilsLabelEXT) -> IO ()
 -- | vkQueueEndDebugUtilsLabelEXT - Close a queue debug label region
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @queue@ is the queue in which a debug label region should be closed.
 --
 -- = Description
--- #_description#
 --
 -- The calls to 'vkQueueBeginDebugUtilsLabelEXT' and
 -- 'vkQueueEndDebugUtilsLabelEXT' /must/ be matched and balanced.
@@ -490,24 +466,22 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | -               | -               | Any             | -               |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | -                                                                                                           | -                                                                                                          | Any                                                                                                   | -                                                                                                                          |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkQueue'
 foreign import ccall "vkQueueEndDebugUtilsLabelEXT" vkQueueEndDebugUtilsLabelEXT :: ("queue" ::: VkQueue) -> IO ()
 -- | vkQueueInsertDebugUtilsLabelEXT - Insert a label into a queue
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @queue@ is the queue into which a debug label will be inserted.
 --
@@ -515,9 +489,6 @@
 --     'VkDebugUtilsLabelEXT' structure specifying the parameters of the
 --     label to insert.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @queue@ /must/ be a valid @VkQueue@ handle
@@ -527,24 +498,22 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | -               | -               | Any             | -               |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | -                                                                                                           | -                                                                                                          | Any                                                                                                   | -                                                                                                                          |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsLabelEXT', 'Graphics.Vulkan.Core10.Queue.VkQueue'
 foreign import ccall "vkQueueInsertDebugUtilsLabelEXT" vkQueueInsertDebugUtilsLabelEXT :: ("queue" ::: VkQueue) -> ("pLabelInfo" ::: Ptr VkDebugUtilsLabelEXT) -> IO ()
 -- | vkCmdBeginDebugUtilsLabelEXT - Open a command buffer debug label region
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
@@ -553,9 +522,6 @@
 --     'VkDebugUtilsLabelEXT' structure specifying the parameters of the
 --     label region to open.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -563,8 +529,8 @@
 -- -   @pLabelInfo@ /must/ be a valid pointer to a valid
 --     @VkDebugUtilsLabelEXT@ structure
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -576,31 +542,28 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkDebugUtilsLabelEXT'
 foreign import ccall "vkCmdBeginDebugUtilsLabelEXT" vkCmdBeginDebugUtilsLabelEXT :: ("commandBuffer" ::: VkCommandBuffer) -> ("pLabelInfo" ::: Ptr VkDebugUtilsLabelEXT) -> IO ()
 -- | vkCmdEndDebugUtilsLabelEXT - Close a command buffer label region
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
 --
 -- = Description
--- #_description#
 --
 -- An application /may/ open a debug label region in one command buffer and
 -- close it in another, or otherwise split debug label regions across
@@ -624,8 +587,8 @@
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -637,25 +600,23 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
 foreign import ccall "vkCmdEndDebugUtilsLabelEXT" vkCmdEndDebugUtilsLabelEXT :: ("commandBuffer" ::: VkCommandBuffer) -> IO ()
 -- | vkCmdInsertDebugUtilsLabelEXT - Insert a label into a command buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command is
 --     recorded.
@@ -663,9 +624,6 @@
 -- -   @pInfo@ is a pointer to an instance of the 'VkDebugUtilsLabelEXT'
 --     structure specifying the parameters of the label to insert.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -673,8 +631,8 @@
 -- -   @pLabelInfo@ /must/ be a valid pointer to a valid
 --     @VkDebugUtilsLabelEXT@ structure
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -686,25 +644,23 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkDebugUtilsLabelEXT'
 foreign import ccall "vkCmdInsertDebugUtilsLabelEXT" vkCmdInsertDebugUtilsLabelEXT :: ("commandBuffer" ::: VkCommandBuffer) -> ("pLabelInfo" ::: Ptr VkDebugUtilsLabelEXT) -> IO ()
 -- | vkCreateDebugUtilsMessengerEXT - Create a debug messenger object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ the instance the messenger will be used with.
 --
@@ -713,14 +669,13 @@
 --     conditions under which this messenger will trigger the callback.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pMessenger@ is a pointer to record the @VkDebugUtilsMessengerEXT@
 --     object created.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -736,14 +691,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDebugUtilsMessengerCreateInfoEXT', 'VkDebugUtilsMessengerEXT',
@@ -752,7 +706,6 @@
 -- | vkDestroyDebugUtilsMessengerEXT - Destroy a debug messenger object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ the instance where the callback was created.
 --
@@ -763,10 +716,9 @@
 --     callback is active.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -793,7 +745,6 @@
 -- -   Host access to @messenger@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDebugUtilsMessengerEXT',
@@ -802,7 +753,6 @@
 -- | vkSubmitDebugUtilsMessageEXT - Inject a message into a debug stream
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the debug stream’s @VkInstance@.
 --
@@ -816,7 +766,6 @@
 --     'VkDebugUtilsMessengerCallbackDataEXT' structure.
 --
 -- = Description
--- #_description#
 --
 -- The call will propagate through the layers and generate callback(s) as
 -- indicated by the message’s flags. The parameters are passed on to the
@@ -839,7 +788,6 @@
 --     @VkDebugUtilsMessengerCallbackDataEXT@ structure
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsMessageSeverityFlagBitsEXT',
 -- 'VkDebugUtilsMessageTypeFlagsEXT',
@@ -850,7 +798,6 @@
 -- an object
 --
 -- = Description
--- #_description#
 --
 -- Applications /may/ change the name associated with an object simply by
 -- calling @vkSetDebugUtilsObjectNameEXT@ again with a new string. If
@@ -866,7 +813,7 @@
 --
 -- -   @objectHandle@ /must/ be a Vulkan object of the type associated with
 --     @objectType@ as defined in
---     <{html_spec_relative}#debugging-object-types {html_spec_relative}#debugging-object-types>.
+--     [{html_spec_relative}#debugging-object-types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debugging-object-types).
 --
 -- == Valid Usage (Implicit)
 --
@@ -882,22 +829,23 @@
 --     null-terminated UTF-8 string
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsMessengerCallbackDataEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkObjectType',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkSetDebugUtilsObjectNameEXT'
 data VkDebugUtilsObjectNameInfoEXT = VkDebugUtilsObjectNameInfoEXT
-  { -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkObjectType"
+  , -- | @objectType@ is a 'Graphics.Vulkan.Core10.Core.VkObjectType' specifying
+  -- the type of the object to be named.
   vkObjectType :: VkObjectType
-  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkObjectHandle"
+  , -- | @objectHandle@ is the object to be named.
   vkObjectHandle :: Word64
-  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkPObjectName"
+  , -- | @pObjectName@ is a null-terminated UTF-8 string specifying the name to
+  -- apply to @objectHandle@.
   vkPObjectName :: Ptr CChar
   }
   deriving (Eq, Show)
@@ -919,7 +867,6 @@
 -- an object
 --
 -- = Description
--- #_description#
 --
 -- The @tagName@ parameter gives a name or identifier to the type of data
 -- being tagged. This can be used by debugging layers to easily filter for
@@ -934,7 +881,7 @@
 --
 -- -   @objectHandle@ /must/ be a Vulkan object of the type associated with
 --     @objectType@ as defined in
---     <{html_spec_relative}#debugging-object-types {html_spec_relative}#debugging-object-types>.
+--     [{html_spec_relative}#debugging-object-types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debugging-object-types).
 --
 -- == Valid Usage (Implicit)
 --
@@ -951,25 +898,26 @@
 -- -   @tagSize@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkObjectType',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkSetDebugUtilsObjectTagEXT'
 data VkDebugUtilsObjectTagInfoEXT = VkDebugUtilsObjectTagInfoEXT
-  { -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkObjectType"
+  , -- | @objectType@ is a 'Graphics.Vulkan.Core10.Core.VkObjectType' specifying
+  -- the type of the object to be named.
   vkObjectType :: VkObjectType
-  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkObjectHandle"
+  , -- | @objectHandle@ is the object to be tagged.
   vkObjectHandle :: Word64
-  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkTagName"
+  , -- | @tagName@ is a numerical identifier of the tag.
   vkTagName :: Word64
-  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkTagSize"
+  , -- | @tagSize@ is the number of bytes of data to attach to the object.
   vkTagSize :: CSize
-  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkPTag"
+  , -- | @pTag@ is an array of @tagSize@ bytes containing the data to be
+  -- associated with the object.
   vkPTag :: Ptr ()
   }
   deriving (Eq, Show)
@@ -993,9 +941,6 @@
                 *> poke (ptr `plusPtr` 48) (vkPTag (poked :: VkDebugUtilsObjectTagInfoEXT))
 -- | VkDebugUtilsLabelEXT - Specify parameters of a label region
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT@
@@ -1005,20 +950,23 @@
 -- -   @pLabelName@ /must/ be a null-terminated UTF-8 string
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsMessengerCallbackDataEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCmdBeginDebugUtilsLabelEXT', 'vkCmdInsertDebugUtilsLabelEXT',
 -- 'vkQueueBeginDebugUtilsLabelEXT', 'vkQueueInsertDebugUtilsLabelEXT'
 data VkDebugUtilsLabelEXT = VkDebugUtilsLabelEXT
-  { -- No documentation found for Nested "VkDebugUtilsLabelEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugUtilsLabelEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugUtilsLabelEXT" "vkPLabelName"
+  , -- | @pLabelName@ is a pointer to a null-terminated UTF-8 string that
+  -- contains the name of the label.
   vkPLabelName :: Ptr CChar
-  , -- No documentation found for Nested "VkDebugUtilsLabelEXT" "vkColor"
+  , -- | @color@ is an optional RGBA color value that can be associated with the
+  -- label. A particular implementation /may/ choose to ignore this color
+  -- value. The values contain RGBA values in order, in the range 0.0 to 1.0.
+  -- If all elements in @color@ are set to 0.0 then it is ignored.
   vkColor :: Vector 4 CFloat
   }
   deriving (Eq, Show)
@@ -1038,7 +986,6 @@
 -- a newly created debug messenger
 --
 -- = Description
--- #_description#
 --
 -- For each @VkDebugUtilsMessengerEXT@ that is created the
 -- @VkDebugUtilsMessengerCreateInfoEXT@::@messageSeverity@ and
@@ -1095,7 +1042,6 @@
 -- -   @messageType@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'PFN_vkDebugUtilsMessengerCallbackEXT',
 -- 'VkDebugUtilsMessageSeverityFlagsEXT',
@@ -1104,19 +1050,21 @@
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateDebugUtilsMessengerEXT'
 data VkDebugUtilsMessengerCreateInfoEXT = VkDebugUtilsMessengerCreateInfoEXT
-  { -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkFlags"
+  , -- | @flags@ is 0 and reserved for future use.
   vkFlags :: VkDebugUtilsMessengerCreateFlagsEXT
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkMessageSeverity"
+  , -- | @messageSeverity@ is a bitmask of
+  -- 'VkDebugUtilsMessageSeverityFlagBitsEXT' specifying which severity of
+  -- event(s) will cause this callback to be called.
   vkMessageSeverity :: VkDebugUtilsMessageSeverityFlagsEXT
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkMessageType"
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "messageType"
   vkMessageType :: VkDebugUtilsMessageTypeFlagsEXT
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkPfnUserCallback"
+  , -- | @pfnUserCallback@ is the application callback function to call.
   vkPfnUserCallback :: PFN_vkDebugUtilsMessengerCallbackEXT
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkPUserData"
+  , -- | @pUserData@ is user data to be passed to the callback.
   vkPUserData :: Ptr ()
   }
   deriving (Eq, Show)
@@ -1142,7 +1090,6 @@
 -- returned to the callback
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -1189,36 +1136,55 @@
 -- -   @objectCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDebugUtilsLabelEXT', 'VkDebugUtilsMessengerCallbackDataFlagsEXT',
 -- 'VkDebugUtilsObjectNameInfoEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkSubmitDebugUtilsMessageEXT'
 data VkDebugUtilsMessengerCallbackDataEXT = VkDebugUtilsMessengerCallbackDataEXT
-  { -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkFlags"
+  , -- | @flags@ is 0 and reserved for future use.
   vkFlags :: VkDebugUtilsMessengerCallbackDataFlagsEXT
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPMessageIdName"
+  , -- | @pMessageIdName@ is a null-terminated string that identifies the the
+  -- particular message ID that is associated with the provided message. If
+  -- the message corresponds to a validation layer message, then this string
+  -- may contain the portion of the Vulkan specification that is believed to
+  -- have been violated.
   vkPMessageIdName :: Ptr CChar
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkMessageIdNumber"
+  , -- | @messageIdNumber@ is the ID number of the triggering message. If the
+  -- message corresponds to a validation layer message, then this number is
+  -- related to the internal number associated with the message being
+  -- triggered.
   vkMessageIdNumber :: Int32
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPMessage"
+  , -- | @pMessage@ is a null-terminated string detailing the trigger conditions.
   vkPMessage :: Ptr CChar
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkQueueLabelCount"
+  , -- | @queueLabelCount@ is a count of items contained in the @pQueueLabels@
+  -- array.
   vkQueueLabelCount :: Word32
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPQueueLabels"
+  , -- | @pQueueLabels@ is NULL or a pointer to an array of
+  -- 'VkDebugUtilsLabelEXT' active in the current @VkQueue@ at the time the
+  -- callback was triggered. Refer to [Queue
+  -- Labels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debugging-queue-labels)
+  -- for more information.
   vkPQueueLabels :: Ptr VkDebugUtilsLabelEXT
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkCmdBufLabelCount"
+  , -- | @cmdBufLabelCount@ is a count of items contained in the @pCmdBufLabels@
+  -- array.
   vkCmdBufLabelCount :: Word32
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPCmdBufLabels"
+  , -- | @pCmdBufLabels@ is NULL or a pointer to an array of
+  -- 'VkDebugUtilsLabelEXT' active in the current @VkCommandBuffer@ at the
+  -- time the callback was triggered. Refer to [Command Buffer
+  -- Labels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#debugging-command-buffer-labels)
+  -- for more information.
   vkPCmdBufLabels :: Ptr VkDebugUtilsLabelEXT
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkObjectCount"
+  , -- | @objectCount@ is a count of items contained in the @pObjects@ array.
   vkObjectCount :: Word32
-  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPObjects"
+  , -- | @pObjects@ is a pointer to an array of 'VkDebugUtilsObjectNameInfoEXT'
+  -- objects related to the detected issue. The array is roughly in order or
+  -- importance, but the 0th element is always guaranteed to be the most
+  -- important object for this message.
   vkPObjects :: Ptr VkDebugUtilsObjectNameInfoEXT
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
@@ -83,7 +83,6 @@
 -- layout binding properties
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ indicates that if
 --     descriptors in this binding are updated between when the descriptor
@@ -92,7 +91,9 @@
 --     set descriptors for this binding and the updates do not invalidate
 --     the command buffer. Descriptor bindings created with this flag are
 --     also partially exempt from the external synchronization requirement
---     in 'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets'.
+--     in
+--     'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplateKHR'
+--     and 'Graphics.Vulkan.Core10.DescriptorSet.vkUpdateDescriptorSets'.
 --     They /can/ be updated concurrently with the set being bound to a
 --     command buffer in another thread, but not concurrently with the set
 --     being reset or freed.
@@ -136,7 +137,6 @@
 -- implementation to observe updates to descriptors that are used.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorBindingFlagsEXT'
 newtype VkDescriptorBindingFlagBitsEXT = VkDescriptorBindingFlagBitsEXT VkFlags
@@ -195,10 +195,23 @@
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT"
 pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT :: VkStructureType
 pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VkStructureType 1000161004
--- No documentation found for Nested "VkDescriptorSetLayoutCreateFlagBits" "VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT"
+-- | @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@
+-- specifies that descriptor sets using this layout /must/ be allocated
+-- from a descriptor pool created with the
+-- @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ bit set.
+-- Descriptor set layouts created with this bit set have alternate limits
+-- for the maximum number of descriptors per-stage and per-pipeline layout.
+-- The non-UpdateAfterBind limits only count descriptors in sets created
+-- without this flag. The UpdateAfterBind limits count all descriptors, but
+-- the limits /may/ be higher than the non-UpdateAfterBind limits.
 pattern VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT :: VkDescriptorSetLayoutCreateFlagBits
 pattern VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT = VkDescriptorSetLayoutCreateFlagBits 0x00000002
--- No documentation found for Nested "VkDescriptorPoolCreateFlagBits" "VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT"
+-- | @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ specifies that
+-- descriptor sets allocated from this pool /can/ include bindings with the
+-- @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ bit set. It is valid
+-- to allocate descriptor sets that have bindings that don’t set the
+-- @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ bit from a pool that
+-- has @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ set.
 pattern VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT :: VkDescriptorPoolCreateFlagBits
 pattern VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT = VkDescriptorPoolCreateFlagBits 0x00000002
 -- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION"
@@ -211,13 +224,11 @@
 -- descriptor indexing features that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceDescriptorIndexingFeaturesEXT@
 -- structure describe the following features:
 --
 -- = Description
--- #_description#
 --
 -- -   @shaderInputAttachmentArrayDynamicIndexing@ indicates whether arrays
 --     of input attachments /can/ be indexed by dynamically uniform integer
@@ -389,53 +400,52 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceDescriptorIndexingFeaturesEXT = VkPhysicalDeviceDescriptorIndexingFeaturesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderInputAttachmentArrayDynamicIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderInputAttachmentArrayDynamicIndexing"
   vkShaderInputAttachmentArrayDynamicIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderUniformTexelBufferArrayDynamicIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderUniformTexelBufferArrayDynamicIndexing"
   vkShaderUniformTexelBufferArrayDynamicIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageTexelBufferArrayDynamicIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderStorageTexelBufferArrayDynamicIndexing"
   vkShaderStorageTexelBufferArrayDynamicIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderUniformBufferArrayNonUniformIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderUniformBufferArrayNonUniformIndexing"
   vkShaderUniformBufferArrayNonUniformIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderSampledImageArrayNonUniformIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderSampledImageArrayNonUniformIndexing"
   vkShaderSampledImageArrayNonUniformIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageBufferArrayNonUniformIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderStorageBufferArrayNonUniformIndexing"
   vkShaderStorageBufferArrayNonUniformIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageImageArrayNonUniformIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderStorageImageArrayNonUniformIndexing"
   vkShaderStorageImageArrayNonUniformIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderInputAttachmentArrayNonUniformIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderInputAttachmentArrayNonUniformIndexing"
   vkShaderInputAttachmentArrayNonUniformIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderUniformTexelBufferArrayNonUniformIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderUniformTexelBufferArrayNonUniformIndexing"
   vkShaderUniformTexelBufferArrayNonUniformIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageTexelBufferArrayNonUniformIndexing"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "shaderStorageTexelBufferArrayNonUniformIndexing"
   vkShaderStorageTexelBufferArrayNonUniformIndexing :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingUniformBufferUpdateAfterBind"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingUniformBufferUpdateAfterBind"
   vkDescriptorBindingUniformBufferUpdateAfterBind :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingSampledImageUpdateAfterBind"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingSampledImageUpdateAfterBind"
   vkDescriptorBindingSampledImageUpdateAfterBind :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingStorageImageUpdateAfterBind"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingStorageImageUpdateAfterBind"
   vkDescriptorBindingStorageImageUpdateAfterBind :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingStorageBufferUpdateAfterBind"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingStorageBufferUpdateAfterBind"
   vkDescriptorBindingStorageBufferUpdateAfterBind :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingUniformTexelBufferUpdateAfterBind"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingUniformTexelBufferUpdateAfterBind"
   vkDescriptorBindingUniformTexelBufferUpdateAfterBind :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingStorageTexelBufferUpdateAfterBind"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingStorageTexelBufferUpdateAfterBind"
   vkDescriptorBindingStorageTexelBufferUpdateAfterBind :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingUpdateUnusedWhilePending"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingUpdateUnusedWhilePending"
   vkDescriptorBindingUpdateUnusedWhilePending :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingPartiallyBound"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingPartiallyBound"
   vkDescriptorBindingPartiallyBound :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingVariableDescriptorCount"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "descriptorBindingVariableDescriptorCount"
   vkDescriptorBindingVariableDescriptorCount :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkRuntimeDescriptorArray"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "runtimeDescriptorArray"
   vkRuntimeDescriptorArray :: VkBool32
   }
   deriving (Eq, Show)
@@ -492,13 +502,11 @@
 -- implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @maxUpdateAfterBindDescriptorsInAllPools@ is the maximum number of
 --     descriptors (summed over all descriptor types) that /can/ be created
@@ -545,7 +553,7 @@
 --
 -- -   @robustBufferAccessUpdateAfterBind@ is a boolean value indicating
 --     whether
---     <{html_spec_relative}#features-features-robustBufferAccess robustBufferAccess>
+--     [@robustBufferAccess@](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#features-features-robustBufferAccess)
 --     /can/ be enabled in a device simultaneously with
 --     @descriptorBindingUniformBufferUpdateAfterBind@,
 --     @descriptorBindingStorageBufferUpdateAfterBind@,
@@ -557,8 +565,8 @@
 -- -   @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
---     <{html_spec_relative}#textures-derivative-image-operations Derivative Image Operations>.
+--     the instruction are not uniform within a quad. See [Derivative Image
+--     Operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-derivative-image-operations).
 --
 -- -   @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to
 --     @maxPerStageDescriptorSamplers@ but counts descriptors from
@@ -661,59 +669,58 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceDescriptorIndexingPropertiesEXT = VkPhysicalDeviceDescriptorIndexingPropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxUpdateAfterBindDescriptorsInAllPools"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxUpdateAfterBindDescriptorsInAllPools"
   vkMaxUpdateAfterBindDescriptorsInAllPools :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderUniformBufferArrayNonUniformIndexingNative"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "shaderUniformBufferArrayNonUniformIndexingNative"
   vkShaderUniformBufferArrayNonUniformIndexingNative :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderSampledImageArrayNonUniformIndexingNative"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "shaderSampledImageArrayNonUniformIndexingNative"
   vkShaderSampledImageArrayNonUniformIndexingNative :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderStorageBufferArrayNonUniformIndexingNative"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "shaderStorageBufferArrayNonUniformIndexingNative"
   vkShaderStorageBufferArrayNonUniformIndexingNative :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderStorageImageArrayNonUniformIndexingNative"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "shaderStorageImageArrayNonUniformIndexingNative"
   vkShaderStorageImageArrayNonUniformIndexingNative :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderInputAttachmentArrayNonUniformIndexingNative"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "shaderInputAttachmentArrayNonUniformIndexingNative"
   vkShaderInputAttachmentArrayNonUniformIndexingNative :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkRobustBufferAccessUpdateAfterBind"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "robustBufferAccessUpdateAfterBind"
   vkRobustBufferAccessUpdateAfterBind :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkQuadDivergentImplicitLod"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "quadDivergentImplicitLod"
   vkQuadDivergentImplicitLod :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindSamplers"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxPerStageDescriptorUpdateAfterBindSamplers"
   vkMaxPerStageDescriptorUpdateAfterBindSamplers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindUniformBuffers"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxPerStageDescriptorUpdateAfterBindUniformBuffers"
   vkMaxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindStorageBuffers"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxPerStageDescriptorUpdateAfterBindStorageBuffers"
   vkMaxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindSampledImages"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxPerStageDescriptorUpdateAfterBindSampledImages"
   vkMaxPerStageDescriptorUpdateAfterBindSampledImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindStorageImages"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxPerStageDescriptorUpdateAfterBindStorageImages"
   vkMaxPerStageDescriptorUpdateAfterBindStorageImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindInputAttachments"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxPerStageDescriptorUpdateAfterBindInputAttachments"
   vkMaxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageUpdateAfterBindResources"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxPerStageUpdateAfterBindResources"
   vkMaxPerStageUpdateAfterBindResources :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindSamplers"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindSamplers"
   vkMaxDescriptorSetUpdateAfterBindSamplers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindUniformBuffers"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindUniformBuffers"
   vkMaxDescriptorSetUpdateAfterBindUniformBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindUniformBuffersDynamic"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindUniformBuffersDynamic"
   vkMaxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindStorageBuffers"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindStorageBuffers"
   vkMaxDescriptorSetUpdateAfterBindStorageBuffers :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindStorageBuffersDynamic"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindStorageBuffersDynamic"
   vkMaxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindSampledImages"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindSampledImages"
   vkMaxDescriptorSetUpdateAfterBindSampledImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindStorageImages"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindStorageImages"
   vkMaxDescriptorSetUpdateAfterBindStorageImages :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindInputAttachments"
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "maxDescriptorSetUpdateAfterBindInputAttachments"
   vkMaxDescriptorSetUpdateAfterBindInputAttachments :: Word32
   }
   deriving (Eq, Show)
@@ -775,7 +782,6 @@
 -- creation flags for descriptor set layout bindings
 --
 -- = Description
--- #_description#
 --
 -- If @bindingCount@ is zero or if this structure is not in the @pNext@
 -- chain, the 'VkDescriptorBindingFlagsEXT' for each descriptor set layout
@@ -789,6 +795,14 @@
 -- -   If @bindingCount@ is not zero, @bindingCount@ /must/ equal
 --     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo'::@bindingCount@
 --
+-- -   If
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo'::@flags@
+--     includes @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@,
+--     then all elements of @pBindingFlags@ /must/ not include
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@, or
+--     @VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT@
+--
 -- -   If an element of @pBindingFlags@ includes
 --     @VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT@, then all
 --     other elements of
@@ -872,18 +886,19 @@
 -- -   Each element of @pBindingFlags@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDescriptorBindingFlagsEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDescriptorSetLayoutBindingFlagsCreateInfoEXT = VkDescriptorSetLayoutBindingFlagsCreateInfoEXT
-  { -- No documentation found for Nested "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" "vkBindingCount"
+  , -- | @bindingCount@ is zero or the number of elements in @pBindingFlags@.
   vkBindingCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" "vkPBindingFlags"
+  , -- | @pBindingFlags@ is a pointer to an array of
+  -- 'VkDescriptorBindingFlagsEXT' bitfields, one for each descriptor set
+  -- layout binding.
   vkPBindingFlags :: Ptr VkDescriptorBindingFlagsEXT
   }
   deriving (Eq, Show)
@@ -903,7 +918,6 @@
 -- specifying additional allocation parameters for descriptor sets
 --
 -- = Description
--- #_description#
 --
 -- If @descriptorSetCount@ is zero or this structure is not included in the
 -- @pNext@ chain, then the variable lengths are considered to be zero.
@@ -935,17 +949,19 @@
 --     valid pointer to an array of @descriptorSetCount@ @uint32_t@ values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDescriptorSetVariableDescriptorCountAllocateInfoEXT = VkDescriptorSetVariableDescriptorCountAllocateInfoEXT
-  { -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" "vkDescriptorSetCount"
+  , -- | @descriptorSetCount@ is zero or the number of elements in
+  -- @pDescriptorCounts@.
   vkDescriptorSetCount :: Word32
-  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" "vkPDescriptorCounts"
+  , -- | @pDescriptorCounts@ is an array of descriptor counts, with each member
+  -- specifying the number of descriptors in a variable descriptor count
+  -- binding in the corresponding descriptor set being allocated.
   vkPDescriptorCounts :: Ptr Word32
   }
   deriving (Eq, Show)
@@ -966,7 +982,6 @@
 -- supported
 --
 -- = Description
--- #_description#
 --
 -- If the create info includes a variable-sized descriptor, then
 -- @supported@ is determined assuming the requested size of the
@@ -989,15 +1004,16 @@
 --     @VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDescriptorSetVariableDescriptorCountLayoutSupportEXT = VkDescriptorSetVariableDescriptorCountLayoutSupportEXT
-  { -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT" "vkMaxVariableDescriptorCount"
+  , -- | @maxVariableDescriptorCount@ indicates the maximum number of descriptors
+  -- supported in the highest numbered binding of the layout, if that binding
+  -- is variable-sized.
   vkMaxVariableDescriptorCount :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
@@ -39,15 +39,11 @@
 -- | vkReleaseDisplayEXT - Release access to an acquired VkDisplayKHR
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ The physical device the display is on.
 --
 -- -   @display@ The display to release control of.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
@@ -56,11 +52,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
@@ -82,7 +82,6 @@
 -- | VkDiscardRectangleModeEXT - Specify the discard rectangle mode
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineDiscardRectangleStateCreateInfoEXT'
 newtype VkDiscardRectangleModeEXT = VkDiscardRectangleModeEXT Int32
@@ -118,13 +117,11 @@
 -- | VkPipelineDiscardRectangleStateCreateFlagsEXT - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineDiscardRectangleStateCreateFlagsEXT@ is a bitmask type for
 -- setting a mask, but is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineDiscardRectangleStateCreateInfoEXT'
 newtype VkPipelineDiscardRectangleStateCreateFlagsEXT = VkPipelineDiscardRectangleStateCreateFlagsEXT VkFlags
@@ -163,7 +160,6 @@
 -- | vkCmdSetDiscardRectangleEXT - Set discard rectangles dynamically
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command will be
 --     recorded.
@@ -179,7 +175,6 @@
 --     discard rectangles.
 --
 -- = Description
--- #_description#
 --
 -- The discard rectangle taken from element i of @pDiscardRectangles@
 -- replace the current state for the discard rectangle index
@@ -215,8 +210,8 @@
 -- -   @pDiscardRectangles@ /must/ be a valid pointer to an array of
 --     @discardRectangleCount@ @VkRect2D@ structures
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics operations
@@ -232,18 +227,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D'
@@ -252,13 +246,11 @@
 -- discard rectangle limits that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceDiscardRectanglePropertiesEXT@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @maxDiscardRectangles@ is the maximum number of discard rectangles
 --     that /can/ be specified.
@@ -274,15 +266,14 @@
 -- it is filled with the implementation-dependent limits.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceDiscardRectanglePropertiesEXT = VkPhysicalDeviceDiscardRectanglePropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "vkMaxDiscardRectangles"
+  , -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "maxDiscardRectangles"
   vkMaxDiscardRectangles :: Word32
   }
   deriving (Eq, Show)
@@ -299,9 +290,6 @@
 -- | VkPipelineDiscardRectangleStateCreateInfoEXT - Structure specifying
 -- discard rectangle
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @discardRectangleCount@ /must/ be between @0@ and
@@ -319,24 +307,28 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDiscardRectangleModeEXT',
 -- 'VkPipelineDiscardRectangleStateCreateFlagsEXT',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPipelineDiscardRectangleStateCreateInfoEXT = VkPipelineDiscardRectangleStateCreateInfoEXT
-  { -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkPipelineDiscardRectangleStateCreateFlagsEXT
-  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkDiscardRectangleMode"
+  , -- | @discardRectangleMode@ is the mode used to determine whether fragments
+  -- that lie within the discard rectangle are discarded or not.
   vkDiscardRectangleMode :: VkDiscardRectangleModeEXT
-  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkDiscardRectangleCount"
+  , -- | @discardRectangleCount@ is the number of discard rectangles used by the
+  -- pipeline.
   vkDiscardRectangleCount :: Word32
-  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkPDiscardRectangles"
+  , -- | @pDiscardRectangles@ is a pointer to an array of
+  -- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structures, defining the
+  -- discard rectangles. If the discard rectangle state is dynamic, this
+  -- member is ignored.
   vkPDiscardRectangles :: Ptr VkRect2D
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs
@@ -98,7 +98,6 @@
 -- | VkDisplayPowerStateEXT - Possible power states for a display
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPowerInfoEXT'
 newtype VkDisplayPowerStateEXT = VkDisplayPowerStateEXT Int32
@@ -144,7 +143,6 @@
 -- | VkDeviceEventTypeEXT - Events that can occur on a device object
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceEventInfoEXT'
 newtype VkDeviceEventTypeEXT = VkDeviceEventTypeEXT Int32
@@ -175,7 +173,6 @@
 -- | VkDisplayEventTypeEXT - Events that can occur on a display object
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayEventInfoEXT'
 newtype VkDisplayEventTypeEXT = VkDisplayEventTypeEXT Int32
@@ -221,7 +218,6 @@
 -- | vkDisplayPowerControlEXT - Set the power state of a display
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is a logical device associated with @display@.
 --
@@ -230,9 +226,6 @@
 -- -   @pDisplayPowerInfo@ is an instance of 'VkDisplayPowerInfoEXT'
 --     specifying the new power state of @display@.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -244,11 +237,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
@@ -257,7 +249,6 @@
 -- | vkRegisterDeviceEventEXT - Signal a fence when a device event occurs
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is a logical device on which the event /may/ occur.
 --
@@ -266,14 +257,13 @@
 --     the application.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pFence@ points to a handle in which the resulting fence object is
 --     returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -288,11 +278,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -301,7 +290,6 @@
 -- | vkRegisterDisplayEventEXT - Signal a fence when a display event occurs
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is a logical device associated with @display@
 --
@@ -312,14 +300,13 @@
 --     to the application.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pFence@ points to a handle in which the resulting fence object is
 --     returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -336,11 +323,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -351,7 +337,6 @@
 -- | vkGetSwapchainCounterEXT - Query the current value of a surface counter
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the @VkDevice@ associated with @swapchain@.
 --
@@ -362,7 +347,6 @@
 -- -   @pCounterValue@ will return the current value of the counter.
 --
 -- = Description
--- #_description#
 --
 -- If a counter is not available because the swapchain is out of date, the
 -- implementation /may/ return @VK_ERROR_OUT_OF_DATE_KHR@.
@@ -389,16 +373,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 --     -   @VK_ERROR_OUT_OF_DATE_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCounterFlagBitsEXT',
@@ -406,9 +389,6 @@
 foreign import ccall "vkGetSwapchainCounterEXT" vkGetSwapchainCounterEXT :: ("device" ::: VkDevice) -> ("swapchain" ::: VkSwapchainKHR) -> ("counter" ::: VkSurfaceCounterFlagBitsEXT) -> ("pCounterValue" ::: Ptr Word64) -> IO VkResult
 -- | VkDisplayPowerInfoEXT - Describe the power state of a display
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT@
@@ -418,16 +398,16 @@
 -- -   @powerState@ /must/ be a valid 'VkDisplayPowerStateEXT' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPowerStateEXT', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkDisplayPowerControlEXT'
 data VkDisplayPowerInfoEXT = VkDisplayPowerInfoEXT
-  { -- No documentation found for Nested "VkDisplayPowerInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDisplayPowerInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDisplayPowerInfoEXT" "vkPowerState"
+  , -- | @powerState@ is a 'VkDisplayPowerStateEXT' value specifying the new
+  -- power state of the display.
   vkPowerState :: VkDisplayPowerStateEXT
   }
   deriving (Eq, Show)
@@ -443,9 +423,6 @@
                 *> poke (ptr `plusPtr` 16) (vkPowerState (poked :: VkDisplayPowerInfoEXT))
 -- | VkDeviceEventInfoEXT - Describe a device event to create
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT@
@@ -455,16 +432,15 @@
 -- -   @deviceEvent@ /must/ be a valid 'VkDeviceEventTypeEXT' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceEventTypeEXT', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkRegisterDeviceEventEXT'
 data VkDeviceEventInfoEXT = VkDeviceEventInfoEXT
-  { -- No documentation found for Nested "VkDeviceEventInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceEventInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceEventInfoEXT" "vkDeviceEvent"
+  , -- No documentation found for Nested "VkDeviceEventInfoEXT" "deviceEvent"
   vkDeviceEvent :: VkDeviceEventTypeEXT
   }
   deriving (Eq, Show)
@@ -480,9 +456,6 @@
                 *> poke (ptr `plusPtr` 16) (vkDeviceEvent (poked :: VkDeviceEventInfoEXT))
 -- | VkDisplayEventInfoEXT - Describe a display event to create
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT@
@@ -492,16 +465,16 @@
 -- -   @displayEvent@ /must/ be a valid 'VkDisplayEventTypeEXT' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayEventTypeEXT', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkRegisterDisplayEventEXT'
 data VkDisplayEventInfoEXT = VkDisplayEventInfoEXT
-  { -- No documentation found for Nested "VkDisplayEventInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDisplayEventInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDisplayEventInfoEXT" "vkDisplayEvent"
+  , -- | @displayEvent@ is a 'VkDisplayEventTypeEXT' specifying when the fence
+  -- will be signaled.
   vkDisplayEvent :: VkDisplayEventTypeEXT
   }
   deriving (Eq, Show)
@@ -517,9 +490,6 @@
                 *> poke (ptr `plusPtr` 16) (vkDisplayEvent (poked :: VkDisplayEventInfoEXT))
 -- | VkSwapchainCounterCreateInfoEXT - Specify the surface counters desired
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The bits in @surfaceCounters@ /must/ be supported by
@@ -537,16 +507,17 @@
 --     values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCounterFlagsEXT'
 data VkSwapchainCounterCreateInfoEXT = VkSwapchainCounterCreateInfoEXT
-  { -- No documentation found for Nested "VkSwapchainCounterCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSwapchainCounterCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSwapchainCounterCreateInfoEXT" "vkSurfaceCounters"
+  , -- | @surfaceCounters@ is a bitmask of
+  -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCounterFlagBitsEXT'
+  -- specifying surface counters to enable for the swapchain.
   vkSurfaceCounters :: VkSurfaceCounterFlagsEXT
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
@@ -83,7 +83,6 @@
 -- | VkSurfaceCounterFlagBitsEXT - Surface-relative counter types
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSurfaceCounterFlagsEXT',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkGetSwapchainCounterEXT'
@@ -124,7 +123,6 @@
 -- | vkGetPhysicalDeviceSurfaceCapabilities2EXT - Query surface capabilities
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device that will be associated with
 --     the swapchain to be created, as described for
@@ -137,7 +135,6 @@
 --     returned.
 --
 -- = Description
--- #_description#
 --
 -- @vkGetPhysicalDeviceSurfaceCapabilities2EXT@ behaves similarly to
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
@@ -158,10 +155,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -169,7 +166,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
 -- 'VkSurfaceCapabilities2EXT',
@@ -179,7 +175,6 @@
 -- surface
 --
 -- = Members
--- #_members#
 --
 -- All members of @VkSurfaceCapabilities2EXT@ are identical to the
 -- corresponding members of
@@ -187,7 +182,6 @@
 -- where one exists. The remaining members are:
 --
 -- = Description
--- #_description#
 --
 -- -   @sType@ is the type of this structure.
 --
@@ -201,7 +195,8 @@
 --
 -- -   @supportedSurfaceCounters@ /must/ not include
 --     @VK_SURFACE_COUNTER_VBLANK_EXT@ unless the surface queried is a
---     <{html_spec_relative}#wsi-display-surfaces display surface>.
+--     [display
+--     surface](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#wsi-display-surfaces).
 --
 -- == Valid Usage (Implicit)
 --
@@ -210,7 +205,6 @@
 -- -   @pNext@ /must/ be @NULL@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkCompositeAlphaFlagsKHR',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
@@ -221,31 +215,31 @@
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagsKHR',
 -- 'vkGetPhysicalDeviceSurfaceCapabilities2EXT'
 data VkSurfaceCapabilities2EXT = VkSurfaceCapabilities2EXT
-  { -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSType"
+  { -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkPNext"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMinImageCount"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "minImageCount"
   vkMinImageCount :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMaxImageCount"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageCount"
   vkMaxImageCount :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkCurrentExtent"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "currentExtent"
   vkCurrentExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMinImageExtent"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "minImageExtent"
   vkMinImageExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMaxImageExtent"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageExtent"
   vkMaxImageExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMaxImageArrayLayers"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "maxImageArrayLayers"
   vkMaxImageArrayLayers :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedTransforms"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedTransforms"
   vkSupportedTransforms :: VkSurfaceTransformFlagsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkCurrentTransform"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "currentTransform"
   vkCurrentTransform :: VkSurfaceTransformFlagBitsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedCompositeAlpha"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedCompositeAlpha"
   vkSupportedCompositeAlpha :: VkCompositeAlphaFlagsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedUsageFlags"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedUsageFlags"
   vkSupportedUsageFlags :: VkImageUsageFlags
-  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedSurfaceCounters"
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "supportedSurfaceCounters"
   vkSupportedSurfaceCounters :: VkSurfaceCounterFlagsEXT
   }
   deriving (Eq, Show)
@@ -282,13 +276,11 @@
 -- | VkSurfaceCounterFlagsEXT - Bitmask of VkSurfaceCounterFlagBitsEXT
 --
 -- = Description
--- #_description#
 --
 -- @VkSurfaceCounterFlagsEXT@ is a bitmask type for setting a mask of zero
 -- or more 'VkSurfaceCounterFlagBitsEXT'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSurfaceCapabilities2EXT', 'VkSurfaceCounterFlagBitsEXT',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.VkSwapchainCounterCreateInfoEXT'
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs
@@ -77,7 +77,6 @@
 -- host pointer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that will be importing
 --     @pHostPointer@.
@@ -86,9 +85,6 @@
 --
 -- -   @pHostPointer@ is the host pointer to import from.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @handleType@ /must/ be
@@ -119,14 +115,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
@@ -135,14 +130,13 @@
 -- | VkImportMemoryHostPointerInfoEXT - import memory from a host pointer
 --
 -- = Description
--- #_description#
 --
 -- Importing memory from a host pointer shares ownership of the memory
 -- between the host and the Vulkan implementation. The application /can/
 -- continue to access the memory through the host pointer but it is the
 -- application’s responsibility to synchronize device and non-device access
--- to the underlying memory as defined in
--- <{html_spec_relative}#memory-device-hostaccess Host Access to Device Memory Objects>.
+-- to the underlying memory as defined in [Host Access to Device Memory
+-- Objects](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-device-hostaccess).
 --
 -- Applications /can/ import the same underlying memory into multiple
 -- instances of Vulkan and multiple times into a given Vulkan instance.
@@ -194,18 +188,17 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImportMemoryHostPointerInfoEXT = VkImportMemoryHostPointerInfoEXT
-  { -- No documentation found for Nested "VkImportMemoryHostPointerInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportMemoryHostPointerInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportMemoryHostPointerInfoEXT" "vkHandleType"
+  , -- | @handleType@ specifies the handle type.
   vkHandleType :: VkExternalMemoryHandleTypeFlagBits
-  , -- No documentation found for Nested "VkImportMemoryHostPointerInfoEXT" "vkPHostPointer"
+  , -- | @pHostPointer@ is the host pointer to import from.
   vkPHostPointer :: Ptr ()
   }
   deriving (Eq, Show)
@@ -223,11 +216,11 @@
                 *> poke (ptr `plusPtr` 24) (vkPHostPointer (poked :: VkImportMemoryHostPointerInfoEXT))
 -- No documentation found for TopLevel "VkMemoryHostPointerPropertiesEXT"
 data VkMemoryHostPointerPropertiesEXT = VkMemoryHostPointerPropertiesEXT
-  { -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "vkMemoryTypeBits"
+  , -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "memoryTypeBits"
   vkMemoryTypeBits :: Word32
   }
   deriving (Eq, Show)
@@ -246,13 +239,11 @@
 -- implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceExternalMemoryHostPropertiesEXT@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @minImportedHostPointerAlignment@ is the minimum /required/
 --     alignment, in bytes, for the base address and size of host pointers
@@ -269,15 +260,14 @@
 -- it is filled with the implementation-dependent limits.
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkDeviceSize@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceExternalMemoryHostPropertiesEXT = VkPhysicalDeviceExternalMemoryHostPropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "vkMinImportedHostPointerAlignment"
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "minImportedHostPointerAlignment"
   vkMinImportedHostPointerAlignment :: VkDeviceSize
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs
@@ -62,7 +62,6 @@
 -- priority
 --
 -- = Description
--- #_description#
 --
 -- Priority values are sorted in ascending order. A comparison operation on
 -- the enum values can be used to determine the priority order.
@@ -79,7 +78,6 @@
 --     Useful for critical tasks.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceQueueGlobalPriorityCreateInfoEXT'
 newtype VkQueueGlobalPriorityEXT = VkQueueGlobalPriorityEXT Int32
@@ -136,7 +134,6 @@
 -- priority
 --
 -- = Description
--- #_description#
 --
 -- A queue created without specifying
 -- @VkDeviceQueueGlobalPriorityCreateInfoEXT@ will default to
@@ -150,16 +147,16 @@
 -- -   @globalPriority@ /must/ be a valid 'VkQueueGlobalPriorityEXT' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkQueueGlobalPriorityEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceQueueGlobalPriorityCreateInfoEXT = VkDeviceQueueGlobalPriorityCreateInfoEXT
-  { -- No documentation found for Nested "VkDeviceQueueGlobalPriorityCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceQueueGlobalPriorityCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceQueueGlobalPriorityCreateInfoEXT" "vkGlobalPriority"
+  , -- | @globalPriority@ is the system-wide priority associated to this queue as
+  -- specified by 'VkQueueGlobalPriorityEXT'
   vkGlobalPriority :: VkQueueGlobalPriorityEXT
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
@@ -60,7 +60,6 @@
 -- | vkSetHdrMetadataEXT - function to set Hdr metadata
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device where the swapchain(s) were created.
 --
@@ -73,9 +72,6 @@
 -- -   @pMetadata@ is a pointer to the array of @swapchainCount@
 --     @VkHdrMetadataEXT@ structures.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -92,7 +88,6 @@
 --     created, allocated, or retrieved from the same @VkInstance@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkHdrMetadataEXT',
@@ -100,20 +95,13 @@
 foreign import ccall "vkSetHdrMetadataEXT" vkSetHdrMetadataEXT :: ("device" ::: VkDevice) -> ("swapchainCount" ::: Word32) -> ("pSwapchains" ::: Ptr VkSwapchainKHR) -> ("pMetadata" ::: Ptr VkHdrMetadataEXT) -> IO ()
 -- | VkXYColorEXT - structure to specify X,Y chromaticity coordinates
 --
--- = Members
--- #_members#
---
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkHdrMetadataEXT'
 data VkXYColorEXT = VkXYColorEXT
-  { -- No documentation found for Nested "VkXYColorEXT" "vkX"
+  { -- No documentation found for Nested "VkXYColorEXT" "x"
   vkX :: CFloat
-  , -- No documentation found for Nested "VkXYColorEXT" "vkY"
+  , -- No documentation found for Nested "VkXYColorEXT" "y"
   vkY :: CFloat
   }
   deriving (Eq, Show)
@@ -128,7 +116,6 @@
 -- | VkHdrMetadataEXT - structure to specify Hdr metadata
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -136,30 +123,34 @@
 -- thus no Valid Usage is given.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkXYColorEXT',
 -- 'vkSetHdrMetadataEXT'
 data VkHdrMetadataEXT = VkHdrMetadataEXT
-  { -- No documentation found for Nested "VkHdrMetadataEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkDisplayPrimaryRed"
+  , -- | @displayPrimaryRed@ is the mastering display’s red primary in
+  -- chromaticity coordinates
   vkDisplayPrimaryRed :: VkXYColorEXT
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkDisplayPrimaryGreen"
+  , -- | @displayPrimaryGreen@ is the mastering display’s green primary in
+  -- chromaticity coordinates
   vkDisplayPrimaryGreen :: VkXYColorEXT
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkDisplayPrimaryBlue"
+  , -- | @displayPrimaryBlue@ is the mastering display’s blue primary in
+  -- chromaticity coordinates
   vkDisplayPrimaryBlue :: VkXYColorEXT
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkWhitePoint"
+  , -- | @whitePoint@ is the mastering display’s white-point in chromaticity
+  -- coordinates
   vkWhitePoint :: VkXYColorEXT
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMaxLuminance"
+  , -- | @maxLuminance@ is the maximum luminance of the mastering display in nits
   vkMaxLuminance :: CFloat
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMinLuminance"
+  , -- | @minLuminance@ is the minimum luminance of the mastering display in nits
   vkMinLuminance :: CFloat
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMaxContentLightLevel"
+  , -- | @maxContentLightLevel@ is content’s maximum luminance in nits
   vkMaxContentLightLevel :: CFloat
-  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMaxFrameAverageLightLevel"
+  , -- | @maxFrameAverageLightLevel@ is the maximum frame average light level in
+  -- nits
   vkMaxFrameAverageLightLevel :: CFloat
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs
@@ -72,7 +72,13 @@
   )
 
 
--- No documentation found for Nested "VkDynamicState" "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"
+-- | @VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT@ specifies that the
+-- @sampleLocationsInfo@ state in
+-- 'VkPipelineSampleLocationsStateCreateInfoEXT' will be ignored and /must/
+-- be set dynamically with 'vkCmdSetSampleLocationsEXT' before any draw or
+-- clear commands. Enabling custom sample locations is still indicated by
+-- the @sampleLocationsEnable@ member of
+-- @VkPipelineSampleLocationsStateCreateInfoEXT@.
 pattern VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT :: VkDynamicState
 pattern VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = VkDynamicState 1000143000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"
@@ -102,16 +108,12 @@
 -- | vkCmdSetSampleLocationsEXT - Set the dynamic sample locations state
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command will be
 --     recorded.
 --
 -- -   @pSampleLocationsInfo@ is the sample locations state to set.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The bound graphics pipeline /must/ have been created with the
@@ -138,8 +140,8 @@
 -- -   @pSampleLocationsInfo@ /must/ be a valid pointer to a valid
 --     @VkSampleLocationsInfoEXT@ structure
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics operations
@@ -153,18 +155,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'VkSampleLocationsInfoEXT'
@@ -173,7 +174,6 @@
 -- specific multisampling capabilities of a physical device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device from which to query the
 --     additional multisampling capabilities.
@@ -185,9 +185,6 @@
 --     additional multisampling capabilities specific to the sample count
 --     is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
@@ -200,7 +197,6 @@
 --     @VkMultisamplePropertiesEXT@ structure
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkMultisamplePropertiesEXT',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
@@ -210,7 +206,6 @@
 -- location
 --
 -- = Description
--- #_description#
 --
 -- The domain space of the sample location coordinates has an upper-left
 -- origin within the pixel in framebuffer space.
@@ -224,13 +219,12 @@
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSampleLocationsInfoEXT'
 data VkSampleLocationEXT = VkSampleLocationEXT
-  { -- No documentation found for Nested "VkSampleLocationEXT" "vkX"
+  { -- | @x@ is the horizontal coordinate of the sample’s location.
   vkX :: CFloat
-  , -- No documentation found for Nested "VkSampleLocationEXT" "vkY"
+  , -- | @y@ is the vertical coordinate of the sample’s location.
   vkY :: CFloat
   }
   deriving (Eq, Show)
@@ -246,7 +240,6 @@
 -- locations
 --
 -- = Description
--- #_description#
 --
 -- This structure /can/ be used either to specify the sample locations to
 -- be used for rendering or to specify the set of sample locations an image
@@ -283,7 +276,6 @@
 -- -   @sampleLocationsCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentSampleLocationsEXT',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
@@ -292,17 +284,22 @@
 -- 'VkSampleLocationEXT', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkSubpassSampleLocationsEXT', 'vkCmdSetSampleLocationsEXT'
 data VkSampleLocationsInfoEXT = VkSampleLocationsInfoEXT
-  { -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSampleLocationsPerPixel"
+  , -- | @sampleLocationsPerPixel@ is a
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+  -- specifying the number of sample locations per pixel.
   vkSampleLocationsPerPixel :: VkSampleCountFlagBits
-  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSampleLocationGridSize"
+  , -- | @sampleLocationGridSize@ is the size of the sample location grid to
+  -- select custom sample locations for.
   vkSampleLocationGridSize :: VkExtent2D
-  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSampleLocationsCount"
+  , -- | @sampleLocationsCount@ is the number of sample locations in
+  -- @pSampleLocations@.
   vkSampleLocationsCount :: Word32
-  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkPSampleLocations"
+  , -- | @pSampleLocations@ is an array of @sampleLocationsCount@
+  -- 'VkSampleLocationEXT' structures.
   vkPSampleLocations :: Ptr VkSampleLocationEXT
   }
   deriving (Eq, Show)
@@ -326,7 +323,6 @@
 -- locations state to use in the initial layout transition of attachments
 --
 -- = Description
--- #_description#
 --
 -- If the image referenced by the framebuffer attachment at index
 -- @attachmentIndex@ was not created with
@@ -347,13 +343,16 @@
 --     structure
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkRenderPassSampleLocationsBeginInfoEXT', 'VkSampleLocationsInfoEXT'
 data VkAttachmentSampleLocationsEXT = VkAttachmentSampleLocationsEXT
-  { -- No documentation found for Nested "VkAttachmentSampleLocationsEXT" "vkAttachmentIndex"
+  { -- | @attachmentIndex@ is the index of the attachment for which the sample
+  -- locations state is provided.
   vkAttachmentIndex :: Word32
-  , -- No documentation found for Nested "VkAttachmentSampleLocationsEXT" "vkSampleLocationsInfo"
+  , -- | @sampleLocationsInfo@ is the sample locations state to use for the
+  -- layout transition of the given attachment from the initial layout of the
+  -- attachment to the image layout specified for the attachment in the first
+  -- subpass using it.
   vkSampleLocationsInfo :: VkSampleLocationsInfoEXT
   }
   deriving (Eq, Show)
@@ -370,7 +369,6 @@
 -- given subpass
 --
 -- = Description
--- #_description#
 --
 -- If the image referenced by the depth\/stencil attachment used in the
 -- subpass identified by @subpassIndex@ was not created with
@@ -394,13 +392,16 @@
 --     structure
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkRenderPassSampleLocationsBeginInfoEXT', 'VkSampleLocationsInfoEXT'
 data VkSubpassSampleLocationsEXT = VkSubpassSampleLocationsEXT
-  { -- No documentation found for Nested "VkSubpassSampleLocationsEXT" "vkSubpassIndex"
+  { -- | @subpassIndex@ is the index of the subpass for which the sample
+  -- locations state is provided.
   vkSubpassIndex :: Word32
-  , -- No documentation found for Nested "VkSubpassSampleLocationsEXT" "vkSampleLocationsInfo"
+  , -- | @sampleLocationsInfo@ is the sample locations state to use for the
+  -- layout transition of the depth\/stencil attachment away from the image
+  -- layout the attachment is used with in the subpass specified in
+  -- @subpassIndex@.
   vkSampleLocationsInfo :: VkSampleLocationsInfoEXT
   }
   deriving (Eq, Show)
@@ -416,9 +417,6 @@
 -- locations to use for the layout transition of custom sample locations
 -- compatible depth\/stencil attachments
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -435,23 +433,47 @@
 --     @VkSubpassSampleLocationsEXT@ structures
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAttachmentSampleLocationsEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkSubpassSampleLocationsEXT'
 data VkRenderPassSampleLocationsBeginInfoEXT = VkRenderPassSampleLocationsBeginInfoEXT
-  { -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkAttachmentInitialSampleLocationsCount"
+  , -- | @attachmentInitialSampleLocationsCount@ is the number of elements in the
+  -- @pAttachmentInitialSampleLocations@ array.
   vkAttachmentInitialSampleLocationsCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPAttachmentInitialSampleLocations"
+  , -- | @pAttachmentInitialSampleLocations@ is an array of
+  -- @attachmentInitialSampleLocationsCount@ 'VkAttachmentSampleLocationsEXT'
+  -- structures specifying the attachment indices and their corresponding
+  -- sample location state. Each element of
+  -- @pAttachmentInitialSampleLocations@ /can/ specify the sample location
+  -- state to use in the automatic layout transition performed to transition
+  -- a depth\/stencil attachment from the initial layout of the attachment to
+  -- the image layout specified for the attachment in the first subpass using
+  -- it.
   vkPAttachmentInitialSampleLocations :: Ptr VkAttachmentSampleLocationsEXT
-  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPostSubpassSampleLocationsCount"
+  , -- | @postSubpassSampleLocationsCount@ is the number of elements in the
+  -- @pPostSubpassSampleLocations@ array.
   vkPostSubpassSampleLocationsCount :: Word32
-  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPPostSubpassSampleLocations"
+  , -- | @pPostSubpassSampleLocations@ is an array of
+  -- @postSubpassSampleLocationsCount@ 'VkSubpassSampleLocationsEXT'
+  -- structures specifying the subpass indices and their corresponding sample
+  -- location state. Each element of @pPostSubpassSampleLocations@ /can/
+  -- specify the sample location state to use in the automatic layout
+  -- transition performed to transition the depth\/stencil attachment used by
+  -- the specified subpass to the image layout specified in a dependent
+  -- subpass or to the final layout of the attachment in case the specified
+  -- subpass is the last subpass using that attachment. In addition, if
+  -- 'VkPhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+  -- is @VK_FALSE@, each element of @pPostSubpassSampleLocations@ /must/
+  -- specify the sample location state that matches the sample locations used
+  -- by all pipelines that will be bound to a command buffer during the
+  -- specified subpass. If @variableSampleLocations@ is @VK_TRUE@, the sample
+  -- locations used for rasterization do not depend on
+  -- @pPostSubpassSampleLocations@.
   vkPPostSubpassSampleLocations :: Ptr VkSubpassSampleLocationsEXT
   }
   deriving (Eq, Show)
@@ -474,9 +496,6 @@
 -- | VkPipelineSampleLocationsStateCreateInfoEXT - Structure specifying
 -- sample locations for a pipeline
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -486,18 +505,22 @@
 --     structure
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'VkSampleLocationsInfoEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPipelineSampleLocationsStateCreateInfoEXT = VkPipelineSampleLocationsStateCreateInfoEXT
-  { -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkSampleLocationsEnable"
+  , -- | @sampleLocationsEnable@ controls whether custom sample locations are
+  -- used. If @sampleLocationsEnable@ is @VK_FALSE@, the default sample
+  -- locations are used and the values specified in @sampleLocationsInfo@ are
+  -- ignored.
   vkSampleLocationsEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkSampleLocationsInfo"
+  , -- | @sampleLocationsInfo@ is the sample locations to use during
+  -- rasterization if @sampleLocationsEnable@ is @VK_TRUE@ and the graphics
+  -- pipeline isn’t created with @VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT@.
   vkSampleLocationsInfo :: VkSampleLocationsInfoEXT
   }
   deriving (Eq, Show)
@@ -517,13 +540,11 @@
 -- sample location limits that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceSampleLocationsPropertiesEXT@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @sampleLocationSampleCounts@ is a bitmask of
 --     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
@@ -557,25 +578,24 @@
 -- it is filled with the implementation-dependent limits.
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceSampleLocationsPropertiesEXT = VkPhysicalDeviceSampleLocationsPropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkSampleLocationSampleCounts"
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "sampleLocationSampleCounts"
   vkSampleLocationSampleCounts :: VkSampleCountFlags
-  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkMaxSampleLocationGridSize"
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "maxSampleLocationGridSize"
   vkMaxSampleLocationGridSize :: VkExtent2D
-  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkSampleLocationCoordinateRange"
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "sampleLocationCoordinateRange"
   vkSampleLocationCoordinateRange :: Vector 2 CFloat
-  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkSampleLocationSubPixelBits"
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "sampleLocationSubPixelBits"
   vkSampleLocationSubPixelBits :: Word32
-  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkVariableSampleLocations"
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "variableSampleLocations"
   vkVariableSampleLocations :: VkBool32
   }
   deriving (Eq, Show)
@@ -600,9 +620,6 @@
 -- | VkMultisamplePropertiesEXT - Structure returning information about
 -- sample count specific additional multisampling capabilities
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT@
@@ -610,17 +627,17 @@
 -- -   @pNext@ /must/ be @NULL@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetPhysicalDeviceMultisamplePropertiesEXT'
 data VkMultisamplePropertiesEXT = VkMultisamplePropertiesEXT
-  { -- No documentation found for Nested "VkMultisamplePropertiesEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMultisamplePropertiesEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMultisamplePropertiesEXT" "vkMaxSampleLocationGridSize"
+  , -- | @maxSampleLocationGridSize@ is the maximum size of the pixel grid in
+  -- which sample locations /can/ vary.
   vkMaxSampleLocationGridSize :: VkExtent2D
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
@@ -65,7 +65,6 @@
 -- | VkSamplerReductionModeEXT - Specify reduction mode for texture filtering
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSamplerReductionModeCreateInfoEXT'
 newtype VkSamplerReductionModeEXT = VkSamplerReductionModeEXT Int32
@@ -91,8 +90,8 @@
 
 -- | @VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT@ specifies that texel
 -- values are combined by computing a weighted average of values in the
--- footprint, using weights as specified in
--- <{html_spec_relative}#textures-unnormalized-to-integer the image operations chapter>.
+-- footprint, using weights as specified in [the image operations
+-- chapter](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#textures-unnormalized-to-integer).
 pattern VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT :: VkSamplerReductionModeEXT
 pattern VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VkSamplerReductionModeEXT 0
 
@@ -126,13 +125,11 @@
 -- sampler filter minmax limits that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @filterMinmaxSingleComponentFormats@ is a boolean value indicating
 --     whether a minimum set of required formats support min\/max
@@ -196,17 +193,16 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT = VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "vkFilterMinmaxSingleComponentFormats"
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "filterMinmaxSingleComponentFormats"
   vkFilterMinmaxSingleComponentFormats :: VkBool32
-  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "vkFilterMinmaxImageComponentMapping"
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "filterMinmaxImageComponentMapping"
   vkFilterMinmaxImageComponentMapping :: VkBool32
   }
   deriving (Eq, Show)
@@ -226,7 +222,6 @@
 -- reduction mode
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not present, @reductionMode@ is considered to be
 -- @VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT@.
@@ -239,16 +234,16 @@
 -- -   @reductionMode@ /must/ be a valid 'VkSamplerReductionModeEXT' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSamplerReductionModeEXT',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkSamplerReductionModeCreateInfoEXT = VkSamplerReductionModeCreateInfoEXT
-  { -- No documentation found for Nested "VkSamplerReductionModeCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSamplerReductionModeCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSamplerReductionModeCreateInfoEXT" "vkReductionMode"
+  , -- | @reductionMode@ is an enum of type 'VkSamplerReductionModeEXT' that
+  -- controls how texture filtering combines texel values.
   vkReductionMode :: VkSamplerReductionModeEXT
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs
@@ -92,7 +92,6 @@
 -- | VkValidationCacheHeaderVersionEXT - Encode validation cache version
 --
 -- = See Also
--- #_see_also#
 --
 -- UNKNOWN:vkCreateValdiationCacheEXT, 'vkGetValidationCacheDataEXT'
 newtype VkValidationCacheHeaderVersionEXT = VkValidationCacheHeaderVersionEXT Int32
@@ -121,13 +120,11 @@
 -- | VkValidationCacheCreateFlagsEXT - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkValidationCacheCreateFlagsEXT@ is a bitmask type for setting a mask,
 -- but is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkValidationCacheCreateInfoEXT'
 newtype VkValidationCacheCreateFlagsEXT = VkValidationCacheCreateFlagsEXT VkFlags
@@ -170,11 +167,7 @@
 data VkValidationCacheEXT_T
 -- | VkValidationCacheEXT - Opaque handle to a validation cache object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkShaderModuleValidationCacheCreateInfoEXT',
 -- 'vkCreateValidationCacheEXT', 'vkDestroyValidationCacheEXT',
@@ -183,7 +176,6 @@
 -- | vkCreateValidationCacheEXT - Creates a new validation cache
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the validation cache
 --     object.
@@ -193,13 +185,14 @@
 --     cache object.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pValidationCache@ is a pointer to a @VkValidationCacheEXT@ handle
 --     in which the resulting validation cache object is returned.
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -243,14 +236,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -259,7 +251,6 @@
 -- | vkDestroyValidationCacheEXT - Destroy a validation cache object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the validation cache
 --     object.
@@ -267,10 +258,9 @@
 -- -   @validationCache@ is the handle of the validation cache to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -299,7 +289,6 @@
 -- -   Host access to @validationCache@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -308,7 +297,6 @@
 -- | vkGetValidationCacheDataEXT - Get the data store from a validation cache
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the validation cache.
 --
@@ -320,7 +308,6 @@
 -- -   @pData@ is either @NULL@ or a pointer to a buffer.
 --
 -- = Description
--- #_description#
 --
 -- If @pData@ is @NULL@, then the maximum size of the data that /can/ be
 -- retrieved from the validation cache, in bytes, is returned in
@@ -349,28 +336,26 @@
 -- bytes written to @pData@ /must/ be a header consisting of the following
 -- members:
 --
--- > +----+--------------+--------------------------------------------------+
--- > | Of | Size         | Meaning                                          |
--- > | fs |              |                                                  |
--- > | et |              |                                                  |
--- > +====+==============+==================================================+
--- > | 0  | 4            | length in bytes of the entire validation cache   |
--- > |    |              | header written as a stream of bytes, with the    |
--- > |    |              | least significant byte first                     |
--- > +----+--------------+--------------------------------------------------+
--- > | 4  | 4            | a 'VkValidationCacheHeaderVersionEXT' value      |
--- > |    |              | written as a stream of bytes, with the least     |
--- > |    |              | significant byte first                           |
--- > +----+--------------+--------------------------------------------------+
--- > | 8  | @VK_UUID_SIZ | a layer commit ID expressed as a UUID, which     |
--- > |    | E@           | uniquely identifies the version of the           |
--- > |    |              | validation layers used to generate these         |
--- > |    |              | validation results                               |
--- > +----+--------------+--------------------------------------------------+
--- >
--- > Layout for validation cache header version
--- > @VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT@
+-- +--------+----------------+--------------------------------------------------+
+-- | Offset | Size           | Meaning                                          |
+-- +========+================+==================================================+
+-- | 0      | 4              | length in bytes of the entire validation cache   |
+-- |        |                | header written as a stream of bytes, with the    |
+-- |        |                | least significant byte first                     |
+-- +--------+----------------+--------------------------------------------------+
+-- | 4      | 4              | a 'VkValidationCacheHeaderVersionEXT' value      |
+-- |        |                | written as a stream of bytes, with the least     |
+-- |        |                | significant byte first                           |
+-- +--------+----------------+--------------------------------------------------+
+-- | 8      | @VK_UUID_SIZE@ | a layer commit ID expressed as a UUID, which     |
+-- |        |                | uniquely identifies the version of the           |
+-- |        |                | validation layers used to generate these         |
+-- |        |                | validation results                               |
+-- +--------+----------------+--------------------------------------------------+
 --
+-- Layout for validation cache header version
+-- @VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT@
+--
 -- The first four bytes encode the length of the entire validation cache
 -- header, in bytes. This value includes all fields in the header including
 -- the validation cache version field and the size of the length field.
@@ -401,18 +386,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkValidationCacheEXT'
@@ -421,7 +405,6 @@
 -- caches
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the validation cache
 --     objects.
@@ -436,7 +419,6 @@
 --     included after the merge.
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -471,16 +453,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkValidationCacheEXT'
@@ -488,9 +469,6 @@
 -- | VkValidationCacheCreateInfoEXT - Structure specifying parameters of a
 -- newly created validation cache
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If @initialDataSize@ is not @0@, it /must/ be equal to the size of
@@ -513,20 +491,23 @@
 --     pointer to an array of @initialDataSize@ bytes
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkValidationCacheCreateFlagsEXT', 'vkCreateValidationCacheEXT'
 data VkValidationCacheCreateInfoEXT = VkValidationCacheCreateInfoEXT
-  { -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkValidationCacheCreateFlagsEXT
-  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkInitialDataSize"
+  , -- | @initialDataSize@ is the number of bytes in @pInitialData@. If
+  -- @initialDataSize@ is zero, the validation cache will initially be empty.
   vkInitialDataSize :: CSize
-  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkPInitialData"
+  , -- | @pInitialData@ is a pointer to previously retrieved validation cache
+  -- data. If the validation cache data is incompatible (as defined below)
+  -- with the device, the validation cache will be initially empty. If
+  -- @initialDataSize@ is zero, @pInitialData@ is ignored.
   vkPInitialData :: Ptr ()
   }
   deriving (Eq, Show)
@@ -547,9 +528,6 @@
 -- | VkShaderModuleValidationCacheCreateInfoEXT - Specify validation cache to
 -- use during shader module creation
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -558,15 +536,17 @@
 -- -   @validationCache@ /must/ be a valid @VkValidationCacheEXT@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkValidationCacheEXT'
 data VkShaderModuleValidationCacheCreateInfoEXT = VkShaderModuleValidationCacheCreateInfoEXT
-  { -- No documentation found for Nested "VkShaderModuleValidationCacheCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkShaderModuleValidationCacheCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkShaderModuleValidationCacheCreateInfoEXT" "vkValidationCache"
+  , -- | @validationCache@ is the validation cache object from which the results
+  -- of prior validation attempts will be written, and to which new
+  -- validation results for this VkShaderModule will be written (if not
+  -- already present).
   vkValidationCache :: VkValidationCacheEXT
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs
@@ -60,7 +60,6 @@
 -- | VkValidationCheckEXT - Specify validation checks to disable
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkValidationFlagsEXT'
 newtype VkValidationCheckEXT = VkValidationCheckEXT Int32
@@ -103,9 +102,6 @@
 -- | VkValidationFlagsEXT - Specify validation checks to disable for a Vulkan
 -- instance
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT@
@@ -116,17 +112,18 @@
 -- -   @disabledValidationCheckCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkValidationCheckEXT'
 data VkValidationFlagsEXT = VkValidationFlagsEXT
-  { -- No documentation found for Nested "VkValidationFlagsEXT" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkValidationFlagsEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkValidationFlagsEXT" "vkDisabledValidationCheckCount"
+  , -- | @disabledValidationCheckCount@ is the number of checks to disable.
   vkDisabledValidationCheckCount :: Word32
-  , -- No documentation found for Nested "VkValidationFlagsEXT" "vkPDisabledValidationChecks"
+  , -- | @pDisabledValidationChecks@ is a pointer to an array of
+  -- 'VkValidationCheckEXT' values specifying the validation checks to be
+  -- disabled.
   vkPDisabledValidationChecks :: Ptr VkValidationCheckEXT
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
--- a/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
@@ -51,7 +51,6 @@
 -- divisor used in instanced rendering
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not used to define a divisor value for an attribute
 -- then the divisor has a logical default value of 1.
@@ -70,13 +69,19 @@
 --     @binding@.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineVertexInputDivisorStateCreateInfoEXT'
 data VkVertexInputBindingDivisorDescriptionEXT = VkVertexInputBindingDivisorDescriptionEXT
-  { -- No documentation found for Nested "VkVertexInputBindingDivisorDescriptionEXT" "vkBinding"
+  { -- | @binding@ is the binding number for which the divisor is specified.
   vkBinding :: Word32
-  , -- No documentation found for Nested "VkVertexInputBindingDivisorDescriptionEXT" "vkDivisor"
+  , -- | @divisor@ is the the number of successive instances that will use the
+  -- same value of the vertex attribute when instanced rendering is enabled.
+  -- For example, if the divisor is N, the same vertex attribute will applied
+  -- to N successive instances before moving on to the next vertex attribute.
+  -- If a value of 0 is used for the divisor, then the first vertex attribute
+  -- will be applied to all instances. The maximum value of divisor is
+  -- implementation dependent and can be queried using
+  -- @VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT@::@maxVertexAttribDivisor@.
   vkDivisor :: Word32
   }
   deriving (Eq, Show)
@@ -91,9 +96,6 @@
 -- | VkPipelineVertexInputDivisorStateCreateInfoEXT - Structure specifying
 -- vertex attributes assignment during instanced rendering
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -106,18 +108,20 @@
 -- -   @vertexBindingDivisorCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkVertexInputBindingDivisorDescriptionEXT'
 data VkPipelineVertexInputDivisorStateCreateInfoEXT = VkPipelineVertexInputDivisorStateCreateInfoEXT
-  { -- No documentation found for Nested "VkPipelineVertexInputDivisorStateCreateInfoEXT" "vkSType"
+  { -- | @sType@ is the type of this structure
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineVertexInputDivisorStateCreateInfoEXT" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineVertexInputDivisorStateCreateInfoEXT" "vkVertexBindingDivisorCount"
+  , -- | @vertexBindingDivisorCount@ is the number of elements in the
+  -- @pVertexBindingDivisors@ array.
   vkVertexBindingDivisorCount :: Word32
-  , -- No documentation found for Nested "VkPipelineVertexInputDivisorStateCreateInfoEXT" "vkPVertexBindingDivisors"
+  , -- | @pVertexBindingDivisors@ is a pointer to an array of
+  -- @VkVertexInputBindingDivisorDescriptionEXT@ structures, which specifies
+  -- the divisor value for each binding.
   vkPVertexBindingDivisors :: Ptr VkVertexInputBindingDivisorDescriptionEXT
   }
   deriving (Eq, Show)
@@ -138,13 +142,11 @@
 -- by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @maxVertexAttribDivisor@ is the maximum value of the number of
 --     instances that will repeat the value of vertex attribute data when
@@ -156,15 +158,14 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT = VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT
-  { -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "vkMaxVertexAttribDivisor"
+  , -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "maxVertexAttribDivisor"
   vkMaxVertexAttribDivisor :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
--- a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
@@ -63,7 +63,6 @@
 -- display
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device associated with @swapchain@.
 --
@@ -72,9 +71,6 @@
 -- -   @pDisplayTimingProperties@ is a pointer to an instance of the
 --     @VkRefreshCycleDurationGOOGLE@ structure.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -93,16 +89,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkRefreshCycleDurationGOOGLE',
@@ -112,7 +107,6 @@
 -- previously-presented image
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device associated with @swapchain@.
 --
@@ -127,7 +121,6 @@
 --     of @VkPastPresentationTimingGOOGLE@ structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pPresentationTimings@ is @NULL@, then the number of newly-available
 -- timing records for the given @swapchain@ is returned in
@@ -166,12 +159,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_DEVICE_LOST@
 --
 --     -   @VK_ERROR_OUT_OF_DATE_KHR@
@@ -179,7 +172,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkPastPresentationTimingGOOGLE',
@@ -188,15 +180,12 @@
 -- | VkRefreshCycleDurationGOOGLE - Structure containing the RC duration of a
 -- display
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'vkGetRefreshCycleDurationGOOGLE'
 data VkRefreshCycleDurationGOOGLE = VkRefreshCycleDurationGOOGLE
-  { -- No documentation found for Nested "VkRefreshCycleDurationGOOGLE" "vkRefreshDuration"
+  { -- | @refreshDuration@ is the number of nanoseconds from the start of one
+  -- refresh cycle to the next.
   vkRefreshDuration :: Word64
   }
   deriving (Eq, Show)
@@ -210,7 +199,6 @@
 -- about a previously-presented image
 --
 -- = Description
--- #_description#
 --
 -- The results for a given @swapchain@ and @presentID@ are only returned
 -- once from @vkGetPastPresentationTimingGOOGLE@.
@@ -234,19 +222,33 @@
 -- @presentMargin@ is satisfactory.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'vkGetPastPresentationTimingGOOGLE'
 data VkPastPresentationTimingGOOGLE = VkPastPresentationTimingGOOGLE
-  { -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkPresentID"
+  { -- | @presentID@ is an application-provided value that was given to a
+  -- previous @vkQueuePresentKHR@ command via
+  -- 'VkPresentTimeGOOGLE'::@presentID@ (see below). It /can/ be used to
+  -- uniquely identify a previous present with the
+  -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkQueuePresentKHR' command.
   vkPresentID :: Word32
-  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkDesiredPresentTime"
+  , -- | @desiredPresentTime@ is an application-provided value that was given to
+  -- a previous
+  -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkQueuePresentKHR' command
+  -- via 'VkPresentTimeGOOGLE'::@desiredPresentTime@. If non-zero, it was
+  -- used by the application to indicate that an image not be presented any
+  -- sooner than @desiredPresentTime@.
   vkDesiredPresentTime :: Word64
-  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkActualPresentTime"
+  , -- | @actualPresentTime@ is the time when the image of the @swapchain@ was
+  -- actually displayed.
   vkActualPresentTime :: Word64
-  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkEarliestPresentTime"
+  , -- | @earliestPresentTime@ is the time when the image of the @swapchain@
+  -- could have been displayed. This /may/ differ from @actualPresentTime@ if
+  -- the application requested that the image be presented no sooner than
+  -- 'VkPresentTimeGOOGLE'::@desiredPresentTime@.
   vkEarliestPresentTime :: Word64
-  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkPresentMargin"
+  , -- | @presentMargin@ is an indication of how early the @vkQueuePresentKHR@
+  -- command was processed compared to how soon it needed to be processed,
+  -- and still be presented at @earliestPresentTime@.
   vkPresentMargin :: Word64
   }
   deriving (Eq, Show)
@@ -267,9 +269,6 @@
 -- | VkPresentTimesInfoGOOGLE - The earliest time each image should be
 -- presented
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @swapchainCount@ /must/ be the same value as
@@ -286,17 +285,20 @@
 -- -   @swapchainCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPresentTimeGOOGLE', 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPresentTimesInfoGOOGLE = VkPresentTimesInfoGOOGLE
-  { -- No documentation found for Nested "VkPresentTimesInfoGOOGLE" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPresentTimesInfoGOOGLE" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPresentTimesInfoGOOGLE" "vkSwapchainCount"
+  , -- | @swapchainCount@ is the number of swapchains being presented to by this
+  -- command.
   vkSwapchainCount :: Word32
-  , -- No documentation found for Nested "VkPresentTimesInfoGOOGLE" "vkPTimes"
+  , -- | @pTimes@ is @NULL@ or a pointer to an array of @VkPresentTimeGOOGLE@
+  -- elements with @swapchainCount@ entries. If not @NULL@, each element of
+  -- @pTimes@ contains the earliest time to present the image corresponding
+  -- to the entry in the @VkPresentInfoKHR@::@pImageIndices@ array.
   vkPTimes :: Ptr VkPresentTimeGOOGLE
   }
   deriving (Eq, Show)
@@ -314,17 +316,23 @@
                 *> poke (ptr `plusPtr` 24) (vkPTimes (poked :: VkPresentTimesInfoGOOGLE))
 -- | VkPresentTimeGOOGLE - The earliest time image should be presented
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkPresentTimesInfoGOOGLE'
 data VkPresentTimeGOOGLE = VkPresentTimeGOOGLE
-  { -- No documentation found for Nested "VkPresentTimeGOOGLE" "vkPresentID"
+  { -- | @presentID@ is an application-provided identification value, that /can/
+  -- be used with the results of 'vkGetPastPresentationTimingGOOGLE', in
+  -- order to uniquely identify this present. In order to be useful to the
+  -- application, it /should/ be unique within some period of time that is
+  -- meaningful to the application.
   vkPresentID :: Word32
-  , -- No documentation found for Nested "VkPresentTimeGOOGLE" "vkDesiredPresentTime"
+  , -- | @desiredPresentTime@ specifies that the image given /should/ not be
+  -- displayed to the user any earlier than this time. @desiredPresentTime@
+  -- is a time in nanoseconds, relative to a monotonically-increasing clock
+  -- (e.g. @CLOCK_MONOTONIC@ (see clock_gettime(2)) on Android and Linux). A
+  -- value of zero specifies that the presentation engine /may/ display the
+  -- image at any time. This is useful when the application desires to
+  -- provide @presentID@, but doesn’t need a specific @desiredPresentTime@.
   vkDesiredPresentTime :: Word64
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs
@@ -104,7 +104,6 @@
 -- Android native window
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance to associate the surface with.
 --
@@ -114,13 +113,13 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
 -- = Description
--- #_description#
 --
 -- During the lifetime of a surface created using a particular
 -- @ANativeWindow@ handle any attempts to create another surface for the
@@ -158,10 +157,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -169,7 +168,6 @@
 --     -   @VK_ERROR_NATIVE_WINDOW_IN_USE_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkAndroidSurfaceCreateInfoKHR',
@@ -179,9 +177,6 @@
 -- | VkAndroidSurfaceCreateInfoKHR - Structure specifying parameters of a
 -- newly created Android surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @window@ /must/ point to a valid Android @ANativeWindow@.
@@ -196,19 +191,19 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAndroidSurfaceCreateFlagsKHR',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateAndroidSurfaceKHR'
 data VkAndroidSurfaceCreateInfoKHR = VkAndroidSurfaceCreateInfoKHR
-  { -- No documentation found for Nested "VkAndroidSurfaceCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkAndroidSurfaceCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkAndroidSurfaceCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkAndroidSurfaceCreateFlagsKHR
-  , -- No documentation found for Nested "VkAndroidSurfaceCreateInfoKHR" "vkWindow"
+  , -- | @window@ is a pointer to the @ANativeWindow@ to associate the surface
+  -- with.
   vkWindow :: Ptr ANativeWindow
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs
@@ -111,7 +111,6 @@
 -- | VkDisplayPlaneAlphaFlagBitsKHR - Alpha blending type
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPlaneAlphaFlagsKHR', 'VkDisplaySurfaceCreateInfoKHR'
 newtype VkDisplayPlaneAlphaFlagBitsKHR = VkDisplayPlaneAlphaFlagBitsKHR VkFlags
@@ -226,11 +225,7 @@
 data VkDisplayKHR_T
 -- | VkDisplayKHR - Opaque handle to a display object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPlanePropertiesKHR', 'VkDisplayPropertiesKHR',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkAcquireXlibDisplayEXT',
@@ -246,11 +241,7 @@
 data VkDisplayModeKHR_T
 -- | VkDisplayModeKHR - Opaque handle to a display mode object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayModePropertiesKHR', 'VkDisplaySurfaceCreateInfoKHR',
 -- 'vkCreateDisplayModeKHR', 'vkGetDisplayPlaneCapabilitiesKHR'
@@ -259,7 +250,6 @@
 -- available displays
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is a physical device.
 --
@@ -270,7 +260,6 @@
 --     @VkDisplayPropertiesKHR@ structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pProperties@ is @NULL@, then the number of display devices available
 -- for @physicalDevice@ is returned in @pPropertyCount@. Otherwise,
@@ -296,18 +285,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPropertiesKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
@@ -316,7 +304,6 @@
 -- properties
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is a physical device.
 --
@@ -327,7 +314,6 @@
 --     @VkDisplayPlanePropertiesKHR@ structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pProperties@ is @NULL@, then the number of display planes available
 -- for @physicalDevice@ is returned in @pPropertyCount@. Otherwise,
@@ -351,18 +337,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPlanePropertiesKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
@@ -371,7 +356,6 @@
 -- plane supports
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is a physical device.
 --
@@ -385,7 +369,6 @@
 --     @VkDisplayKHR@ handles.
 --
 -- = Description
--- #_description#
 --
 -- If @pDisplays@ is @NULL@, then the number of displays usable with the
 -- specified @planeIndex@ for @physicalDevice@ is returned in
@@ -418,18 +401,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
@@ -438,7 +420,6 @@
 -- supported by the display
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device associated with @display@.
 --
@@ -451,7 +432,6 @@
 --     @VkDisplayModePropertiesKHR@ structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pProperties@ is @NULL@, then the number of display modes available
 -- on the specified @display@ for @physicalDevice@ is returned in
@@ -481,18 +461,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayKHR', 'VkDisplayModePropertiesKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
@@ -500,7 +479,6 @@
 -- | vkCreateDisplayModeKHR - Create a display mode
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device associated with @display@.
 --
@@ -511,14 +489,11 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     display mode object when there is no more specific allocator
---     available (see
---     <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     available (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pMode@ returns the handle of the mode created.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
@@ -539,10 +514,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -550,7 +525,6 @@
 --     -   @VK_ERROR_INITIALIZATION_FAILED@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDisplayKHR', 'VkDisplayModeCreateInfoKHR', 'VkDisplayModeKHR',
@@ -560,7 +534,6 @@
 -- plane combination
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device associated with @display@
 --
@@ -575,9 +548,6 @@
 -- -   @pCapabilities@ is a pointer to a 'VkDisplayPlaneCapabilitiesKHR'
 --     structure in which the capabilities are returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
@@ -593,16 +563,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayModeKHR', 'VkDisplayPlaneCapabilitiesKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
@@ -612,7 +581,6 @@
 -- representing a display plane and mode
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance corresponding to the physical device the
 --     targeted display is on.
@@ -623,14 +591,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -645,16 +611,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkDisplaySurfaceCreateInfoKHR',
@@ -665,7 +630,6 @@
 -- device
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -693,26 +657,32 @@
 -- of the screen needs to be updated in most frames.
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'VkDisplayKHR',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagsKHR',
 -- 'vkGetPhysicalDeviceDisplayPropertiesKHR'
 data VkDisplayPropertiesKHR = VkDisplayPropertiesKHR
-  { -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkDisplay"
+  { -- | @display@ is a handle that is used to refer to the display described
+  -- here. This handle will be valid for the lifetime of the Vulkan instance.
   vkDisplay :: VkDisplayKHR
-  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkDisplayName"
+  , -- | @displayName@ is a pointer to a NULL-terminated string containing the
+  -- name of the display. Generally, this will be the name provided by the
+  -- display’s EDID. It /can/ be @NULL@ if no suitable name is available. If
+  -- not @NULL@, the memory it points to /must/ remain accessible as long as
+  -- @display@ is valid.
   vkDisplayName :: Ptr CChar
-  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPhysicalDimensions"
+  , -- | @physicalDimensions@ describes the physical width and height of the
+  -- visible portion of the display, in millimeters.
   vkPhysicalDimensions :: VkExtent2D
-  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPhysicalResolution"
+  , -- | @physicalResolution@ describes the physical, native, or preferred
+  -- resolution of the display.
   vkPhysicalResolution :: VkExtent2D
-  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkSupportedTransforms"
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "supportedTransforms"
   vkSupportedTransforms :: VkSurfaceTransformFlagsKHR
-  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPlaneReorderPossible"
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "planeReorderPossible"
   vkPlaneReorderPossible :: VkBool32
-  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPersistentContent"
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "persistentContent"
   vkPersistentContent :: VkBool32
   }
   deriving (Eq, Show)
@@ -737,17 +707,17 @@
 -- | VkDisplayPlanePropertiesKHR - Structure describing display plane
 -- properties
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayKHR', 'vkGetPhysicalDeviceDisplayPlanePropertiesKHR'
 data VkDisplayPlanePropertiesKHR = VkDisplayPlanePropertiesKHR
-  { -- No documentation found for Nested "VkDisplayPlanePropertiesKHR" "vkCurrentDisplay"
+  { -- | @currentDisplay@ is the handle of the display the plane is currently
+  -- associated with. If the plane is not currently attached to any displays,
+  -- this will be @VK_NULL_HANDLE@.
   vkCurrentDisplay :: VkDisplayKHR
-  , -- No documentation found for Nested "VkDisplayPlanePropertiesKHR" "vkCurrentStackIndex"
+  , -- | @currentStackIndex@ is the current z-order of the plane. This will be
+  -- between 0 and the value returned by
+  -- @vkGetPhysicalDeviceDisplayPlanePropertiesKHR@ in @pPropertyCount@.
   vkCurrentStackIndex :: Word32
   }
   deriving (Eq, Show)
@@ -763,21 +733,20 @@
 -- associated with a display mode
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
 -- For example, a 60Hz display mode would report a @refreshRate@ of 60,000.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayModeCreateInfoKHR', 'VkDisplayModePropertiesKHR',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D'
 data VkDisplayModeParametersKHR = VkDisplayModeParametersKHR
-  { -- No documentation found for Nested "VkDisplayModeParametersKHR" "vkVisibleRegion"
+  { -- | @visibleRegion@ is the 2D extents of the visible region.
   vkVisibleRegion :: VkExtent2D
-  , -- No documentation found for Nested "VkDisplayModeParametersKHR" "vkRefreshRate"
+  , -- | @refreshRate@ is a @uint32_t@ that is the number of times the display is
+  -- refreshed each second multiplied by 1000.
   vkRefreshRate :: Word32
   }
   deriving (Eq, Show)
@@ -792,18 +761,17 @@
 -- | VkDisplayModePropertiesKHR - Structure describing display mode
 -- properties
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayModeKHR', 'VkDisplayModeParametersKHR',
 -- 'vkGetDisplayModePropertiesKHR'
 data VkDisplayModePropertiesKHR = VkDisplayModePropertiesKHR
-  { -- No documentation found for Nested "VkDisplayModePropertiesKHR" "vkDisplayMode"
+  { -- | @displayMode@ is a handle to the display mode described in this
+  -- structure. This handle will be valid for the lifetime of the Vulkan
+  -- instance.
   vkDisplayMode :: VkDisplayModeKHR
-  , -- No documentation found for Nested "VkDisplayModePropertiesKHR" "vkParameters"
+  , -- | @parameters@ is a @VkDisplayModeParametersKHR@ structure describing the
+  -- display parameters associated with @displayMode@.
   vkParameters :: VkDisplayModeParametersKHR
   }
   deriving (Eq, Show)
@@ -818,9 +786,6 @@
 -- | VkDisplayModeCreateInfoKHR - Structure specifying parameters of a newly
 -- created display mode object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The @width@ and @height@ members of the @visibleRegion@ member of
@@ -837,18 +802,20 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayModeCreateFlagsKHR', 'VkDisplayModeParametersKHR',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateDisplayModeKHR'
 data VkDisplayModeCreateInfoKHR = VkDisplayModeCreateInfoKHR
-  { -- No documentation found for Nested "VkDisplayModeCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDisplayModeCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDisplayModeCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use, and /must/ be zero.
   vkFlags :: VkDisplayModeCreateFlagsKHR
-  , -- No documentation found for Nested "VkDisplayModeCreateInfoKHR" "vkParameters"
+  , -- | @parameters@ is a @VkDisplayModeParametersKHR@ 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 @VK_ERROR_INITIALIZATION_FAILED@.
   vkParameters :: VkDisplayModeParametersKHR
   }
   deriving (Eq, Show)
@@ -868,7 +835,6 @@
 -- mode and plane combination
 --
 -- = Description
--- #_description#
 --
 -- The minimum and maximum position and extent fields describe the
 -- implementation limits, if any, as they apply to the specified display
@@ -901,30 +867,40 @@
 -- unsupported combinations.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPlaneAlphaFlagsKHR',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkOffset2D',
 -- 'vkGetDisplayPlaneCapabilitiesKHR'
 data VkDisplayPlaneCapabilitiesKHR = VkDisplayPlaneCapabilitiesKHR
-  { -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkSupportedAlpha"
+  { -- | @supportedAlpha@ is a bitmask of 'VkDisplayPlaneAlphaFlagBitsKHR'
+  -- describing the supported alpha blending modes.
   vkSupportedAlpha :: VkDisplayPlaneAlphaFlagsKHR
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinSrcPosition"
+  , -- | @minSrcPosition@ is the minimum source rectangle offset supported by
+  -- this plane using the specified mode.
   vkMinSrcPosition :: VkOffset2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxSrcPosition"
+  , -- | @maxSrcPosition@ is the maximum source rectangle offset supported by
+  -- this plane using the specified mode. The @x@ and @y@ components of
+  -- @maxSrcPosition@ /must/ each be greater than or equal to the @x@ and @y@
+  -- components of @minSrcPosition@, respectively.
   vkMaxSrcPosition :: VkOffset2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinSrcExtent"
+  , -- | @minSrcExtent@ is the minimum source rectangle size supported by this
+  -- plane using the specified mode.
   vkMinSrcExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxSrcExtent"
+  , -- | @maxSrcExtent@ is the maximum source rectangle size supported by this
+  -- plane using the specified mode.
   vkMaxSrcExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinDstPosition"
+  , -- | @minDstPosition@, @maxDstPosition@, @minDstExtent@, @maxDstExtent@ all
+  -- have similar semantics to their corresponding @*Src*@ equivalents, but
+  -- apply to the output region within the mode rather than the input region
+  -- within the source image. Unlike the @*Src*@ offsets, @minDstPosition@
+  -- and @maxDstPosition@ /may/ contain negative values.
   vkMinDstPosition :: VkOffset2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxDstPosition"
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "maxDstPosition"
   vkMaxDstPosition :: VkOffset2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinDstExtent"
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "minDstExtent"
   vkMinDstExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxDstExtent"
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "maxDstExtent"
   vkMaxDstExtent :: VkExtent2D
   }
   deriving (Eq, Show)
@@ -954,7 +930,6 @@
 -- newly created display plane surface object
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -1010,7 +985,6 @@
 -- -   @alphaMode@ /must/ be a valid 'VkDisplayPlaneAlphaFlagBitsKHR' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayModeKHR', 'VkDisplayPlaneAlphaFlagBitsKHR',
 -- 'VkDisplaySurfaceCreateFlagsKHR',
@@ -1019,25 +993,32 @@
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR',
 -- 'vkCreateDisplayPlaneSurfaceKHR'
 data VkDisplaySurfaceCreateInfoKHR = VkDisplaySurfaceCreateInfoKHR
-  { -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use, and /must/ be zero.
   vkFlags :: VkDisplaySurfaceCreateFlagsKHR
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkDisplayMode"
+  , -- | @displayMode@ is a 'VkDisplayModeKHR' handle specifying the mode to use
+  -- when displaying this surface.
   vkDisplayMode :: VkDisplayModeKHR
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkPlaneIndex"
+  , -- | @planeIndex@ is the plane on which this surface appears.
   vkPlaneIndex :: Word32
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkPlaneStackIndex"
+  , -- | @planeStackIndex@ is the z-order of the plane.
   vkPlaneStackIndex :: Word32
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkTransform"
+  , -- | @transform@ is a
+  -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR'
+  -- value specifying the transformation to apply to images as part of the
+  -- scanout operation.
   vkTransform :: VkSurfaceTransformFlagBitsKHR
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkGlobalAlpha"
+  , -- | @globalAlpha@ is the global alpha value. This value is ignored if
+  -- @alphaMode@ is not @VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR@.
   vkGlobalAlpha :: CFloat
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkAlphaMode"
+  , -- | @alphaMode@ is a 'VkDisplayPlaneAlphaFlagBitsKHR' value specifying the
+  -- type of alpha blending to use.
   vkAlphaMode :: VkDisplayPlaneAlphaFlagBitsKHR
-  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkImageExtent"
+  , -- | @imageExtent@ The size of the presentable images to use with the
+  -- surface.
   vkImageExtent :: VkExtent2D
   }
   deriving (Eq, Show)
@@ -1068,13 +1049,11 @@
 -- | VkDisplayPlaneAlphaFlagsKHR - Bitmask of VkDisplayPlaneAlphaFlagBitsKHR
 --
 -- = Description
--- #_description#
 --
 -- @VkDisplayPlaneAlphaFlagsKHR@ is a bitmask type for setting a mask of
 -- zero or more 'VkDisplayPlaneAlphaFlagBitsKHR'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDisplayPlaneAlphaFlagBitsKHR', 'VkDisplayPlaneCapabilitiesKHR'
 type VkDisplayPlaneAlphaFlagsKHR = VkDisplayPlaneAlphaFlagBitsKHR
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs
@@ -68,7 +68,6 @@
 -- presentable images
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device to create the swapchains for.
 --
@@ -80,13 +79,13 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     swapchain objects when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSwapchains@ is a pointer to an array of @VkSwapchainKHR@ handles
 --     in which the created swapchain objects will be returned.
 --
 -- = Description
--- #_description#
 --
 -- @vkCreateSharedSwapchains@ is similar to
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR',
@@ -130,10 +129,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -145,7 +144,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -156,7 +154,6 @@
 -- presentation to a swapchain
 --
 -- = Description
--- #_description#
 --
 -- If the extent of the @srcRect@ and @dstRect@ are not equal, the
 -- presented pixels will be scaled accordingly.
@@ -180,20 +177,37 @@
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDisplayPresentInfoKHR = VkDisplayPresentInfoKHR
-  { -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkSrcRect"
+  , -- | @srcRect@ is a rectangular region of pixels to present. It /must/ be a
+  -- subset of the image being presented. If @VkDisplayPresentInfoKHR@ is not
+  -- specified, this region will be assumed to be the entire presentable
+  -- image.
   vkSrcRect :: VkRect2D
-  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkDstRect"
+  , -- | @dstRect@ is a rectangular region within the visible region of the
+  -- swapchain’s display mode. If @VkDisplayPresentInfoKHR@ is not specified,
+  -- this region will be assumed to be the entire visible region of the
+  -- visible region of the swapchain’s mode. If the specified rectangle is a
+  -- subset of the display mode’s visible region, content from display planes
+  -- below the swapchain’s plane will be visible outside the rectangle. If
+  -- there are no planes below the swapchain’s, the area outside the
+  -- specified rectangle will be black. If portions of the specified
+  -- rectangle are outside of the display’s visible region, pixels mapping
+  -- only to those portions of the rectangle will be discarded.
   vkDstRect :: VkRect2D
-  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkPersistent"
+  , -- | @persistent@: If this is @VK_TRUE@, the display engine will enable
+  -- buffered mode on displays that support it. This allows the display
+  -- engine to stop sending content to the display until a new image is
+  -- presented. The display will instead maintain a copy of the last
+  -- presented image. This allows less power to be used, but /may/ increase
+  -- presentation latency. If @VkDisplayPresentInfoKHR@ is not specified,
+  -- persistent mode will not be used.
   vkPersistent :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
@@ -69,7 +69,6 @@
 -- | vkGetFenceFdKHR - Get a POSIX file descriptor handle for a fence
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the fence being
 --     exported.
@@ -82,7 +81,6 @@
 --     payload.
 --
 -- = Description
--- #_description#
 --
 -- Each call to @vkGetFenceFdKHR@ /must/ create a new file descriptor and
 -- transfer ownership of it to the application. To avoid leaking resources,
@@ -106,8 +104,8 @@
 --
 -- Exporting a file descriptor from a fence /may/ have side effects
 -- depending on the transference of the specified handle type, as described
--- in
--- <{html_spec_relative}#synchronization-fences-importing Importing Fence State>.
+-- in [Importing Fence
+-- State](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-importing).
 --
 -- == Valid Usage (Implicit)
 --
@@ -120,16 +118,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkFenceGetFdInfoKHR'
@@ -137,7 +134,6 @@
 -- | vkImportFenceFdKHR - Import a fence from a POSIX file descriptor
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the fence.
 --
@@ -145,7 +141,6 @@
 --     specifying the fence and import parameters.
 --
 -- = Description
--- #_description#
 --
 -- Importing a fence payload from a file descriptor transfers ownership of
 -- the file descriptor from the application to the Vulkan implementation.
@@ -170,16 +165,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkImportFenceFdInfoKHR'
@@ -187,32 +181,29 @@
 -- | VkImportFenceFdInfoKHR - (None)
 --
 -- = Description
--- #_description#
 --
 -- The handle types supported by @handleType@ are:
 --
--- > +-----------------------+-----------------------+-----------------------+
--- > | Handle Type           | Transference          | Permanence Supported  |
--- > +=======================+=======================+=======================+
--- > | @VK_EXTERNAL_FENCE_HA | Reference             | Temporary,Permanent   |
--- > | NDLE_TYPE_OPAQUE_FD_B |                       |                       |
--- > | IT@                   |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @VK_EXTERNAL_FENCE_HA | Copy                  | Temporary             |
--- > | NDLE_TYPE_SYNC_FD_BIT |                       |                       |
--- > | @                     |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- >
--- > Handle Types Supported by VkImportFenceFdInfoKHR
+-- +-----------------------------------------------+-----------------------+-----------------------+
+-- | Handle Type                                   | Transference          | Permanence Supported  |
+-- +===============================================+=======================+=======================+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT@ | Reference             | Temporary,Permanent   |
+-- +-----------------------------------------------+-----------------------+-----------------------+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT@   | Copy                  | Temporary             |
+-- +-----------------------------------------------+-----------------------+-----------------------+
 --
+-- Handle Types Supported by VkImportFenceFdInfoKHR
+--
 -- == Valid Usage
 --
--- -   @handleType@ /must/ be a value included in the
---     <{html_spec_relative}#synchronization-fence-handletypes-fd Handle Types Supported by VkImportFenceFdInfoKHR>
+-- -   @handleType@ /must/ be a value included in the [Handle Types
+--     Supported by
+--     VkImportFenceFdInfoKHR](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fence-handletypes-fd)
 --     table.
 --
 -- -   @fd@ /must/ obey any requirements listed for @handleType@ in
---     <{html_spec_relative}#external-fence-handle-types-compatibility external fence handle types compatibility>.
+--     [external fence handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-fence-handle-types-compatibility).
 --
 -- If @handleType@ is @VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT@, the
 -- special value @-1@ for @fd@ is treated like a valid sync file descriptor
@@ -251,24 +242,25 @@
 -- -   Host access to @fence@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkFenceImportFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkImportFenceFdKHR'
 data VkImportFenceFdInfoKHR = VkImportFenceFdInfoKHR
-  { -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkFence"
+  , -- | @fence@ is the fence into which the payload will be imported.
   vkFence :: VkFence
-  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkFlags"
+  , -- | @flags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkFenceImportFlagBits'
+  -- specifying additional parameters for the fence payload import operation.
   vkFlags :: VkFenceImportFlags
-  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkHandleType"
+  , -- | @handleType@ specifies the type of @fd@.
   vkHandleType :: VkExternalFenceHandleTypeFlagBits
-  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkFd"
+  , -- | @fd@ is the external handle to import.
   vkFd :: CInt
   }
   deriving (Eq, Show)
@@ -292,7 +284,6 @@
 -- operation
 --
 -- = Description
--- #_description#
 --
 -- The properties of the file descriptor returned depend on the value of
 -- @handleType@. See
@@ -308,13 +299,13 @@
 --
 -- -   If @handleType@ refers to a handle type with copy payload
 --     transference semantics, @fence@ /must/ be signaled, or have an
---     associated
---     <{html_spec_relative}#synchronization-fences-signaling fence signal operation>
+--     associated [fence signal
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-signaling)
 --     pending execution.
 --
 -- -   @fence@ /must/ not currently have its payload replaced by an
---     imported payload as described below in
---     <{html_spec_relative}#synchronization-fences-importing Importing Fence Payloads>
+--     imported payload as described below in [Importing Fence
+--     Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-importing)
 --     unless that imported payload’s handle type was included in
 --     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceProperties'::@exportFromImportedHandleTypes@
 --     for @handleType@.
@@ -334,19 +325,18 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkGetFenceFdKHR'
 data VkFenceGetFdInfoKHR = VkFenceGetFdInfoKHR
-  { -- No documentation found for Nested "VkFenceGetFdInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkFenceGetFdInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkFenceGetFdInfoKHR" "vkFence"
+  , -- | @fence@ is the fence from which state will be exported.
   vkFence :: VkFence
-  , -- No documentation found for Nested "VkFenceGetFdInfoKHR" "vkHandleType"
+  , -- | @handleType@ is the type of handle requested.
   vkHandleType :: VkExternalFenceHandleTypeFlagBits
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
@@ -79,7 +79,6 @@
 -- | vkGetFenceWin32HandleKHR - Get a Windows HANDLE for a fence
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the fence being
 --     exported.
@@ -92,7 +91,6 @@
 --     state.
 --
 -- = Description
--- #_description#
 --
 -- For handle types defined as NT handles, the handles returned by
 -- @vkGetFenceWin32HandleKHR@ are owned by the application. To avoid
@@ -101,8 +99,8 @@
 --
 -- Exporting a Windows handle from a fence /may/ have side effects
 -- depending on the transference of the specified handle type, as described
--- in
--- <{html_spec_relative}#synchronization-fences-importing Importing Fence Payloads>.
+-- in [Importing Fence
+-- Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-importing).
 --
 -- == Valid Usage (Implicit)
 --
@@ -115,16 +113,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkFenceGetWin32HandleInfoKHR'
@@ -132,7 +129,6 @@
 -- | vkImportFenceWin32HandleKHR - Import a fence from a Windows HANDLE
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the fence.
 --
@@ -141,7 +137,6 @@
 --     import parameters.
 --
 -- = Description
--- #_description#
 --
 -- Importing a fence payload from Windows handles does not transfer
 -- ownership of the handle to the Vulkan implementation. For handle types
@@ -161,16 +156,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkImportFenceWin32HandleInfoKHR'
@@ -178,28 +172,24 @@
 -- | VkImportFenceWin32HandleInfoKHR - (None)
 --
 -- = Description
--- #_description#
 --
 -- The handle types supported by @handleType@ are:
 --
--- > +-----------------------+-----------------------+-----------------------+
--- > | Handle Type           | Transference          | Permanence Supported  |
--- > +=======================+=======================+=======================+
--- > | @VK_EXTERNAL_FENCE_HA | Reference             | Temporary,Permanent   |
--- > | NDLE_TYPE_OPAQUE_WIN3 |                       |                       |
--- > | 2_BIT@                |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @VK_EXTERNAL_FENCE_HA | Reference             | Temporary,Permanent   |
--- > | NDLE_TYPE_OPAQUE_WIN3 |                       |                       |
--- > | 2_KMT_BIT@            |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- >
--- > Handle Types Supported by VkImportFenceWin32HandleInfoKHR
+-- +------------------------------------------------------+-----------------------+-----------------------+
+-- | Handle Type                                          | Transference          | Permanence Supported  |
+-- +======================================================+=======================+=======================+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT@     | Reference             | Temporary,Permanent   |
+-- +------------------------------------------------------+-----------------------+-----------------------+
+-- | @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@ | Reference             | Temporary,Permanent   |
+-- +------------------------------------------------------+-----------------------+-----------------------+
 --
+-- Handle Types Supported by VkImportFenceWin32HandleInfoKHR
+--
 -- == Valid Usage
 --
--- -   @handleType@ /must/ be a value included in the
---     <{html_spec_relative}#synchronization-fence-handletypes-win32 Handle Types Supported by VkImportFenceWin32HandleInfoKHR>
+-- -   @handleType@ /must/ be a value included in the [Handle Types
+--     Supported by
+--     VkImportFenceWin32HandleInfoKHR](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fence-handletypes-win32)
 --     table.
 --
 -- -   If @handleType@ is not
@@ -216,12 +206,12 @@
 -- -   If @handle@ is not @NULL@, @name@ must be @NULL@.
 --
 -- -   If @handle@ is not @NULL@, it /must/ obey any requirements listed
---     for @handleType@ in
---     <{html_spec_relative}#external-fence-handle-types-compatibility external fence handle types compatibility>.
+--     for @handleType@ in [external fence handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-fence-handle-types-compatibility).
 --
 -- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
---     @handleType@ in
---     <{html_spec_relative}#external-fence-handle-types-compatibility external fence handle types compatibility>.
+--     @handleType@ in [external fence handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-fence-handle-types-compatibility).
 --
 -- == Valid Usage (Implicit)
 --
@@ -245,7 +235,6 @@
 -- -   Host access to @fence@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence',
@@ -253,19 +242,22 @@
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkImportFenceWin32HandleKHR'
 data VkImportFenceWin32HandleInfoKHR = VkImportFenceWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkFence"
+  , -- | @fence@ is the fence into which the state will be imported.
   vkFence :: VkFence
-  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkFlags"
+  , -- | @flags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkFenceImportFlagBits'
+  -- specifying additional parameters for the fence payload import operation.
   vkFlags :: VkFenceImportFlags
-  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkHandleType"
+  , -- | @handleType@ specifies the type of @handle@.
   vkHandleType :: VkExternalFenceHandleTypeFlagBits
-  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkHandle"
+  , -- | @handle@ is the external handle to import, or @NULL@.
   vkHandle :: HANDLE
-  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkName"
+  , -- | @name@ is the NULL-terminated UTF-16 string naming the underlying
+  -- synchronization primitive to import, or @NULL@.
   vkName :: LPCWSTR
   }
   deriving (Eq, Show)
@@ -291,7 +283,6 @@
 -- attributes of Windows handles exported from a fence
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not present, or if @pAttributes@ is set to @NULL@,
 -- default security descriptor values will be used, and child processes
@@ -326,19 +317,21 @@
 --     pointer to a valid @SECURITY_ATTRIBUTES@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportFenceWin32HandleInfoKHR = VkExportFenceWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkPAttributes"
+  , -- | @pAttributes@ is a pointer to a Windows @SECURITY_ATTRIBUTES@ structure
+  -- specifying security attributes of the handle.
   vkPAttributes :: Ptr SECURITY_ATTRIBUTES
-  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkDwAccess"
+  , -- | @dwAccess@ is a @DWORD@ specifying access rights of the handle.
   vkDwAccess :: DWORD
-  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkName"
+  , -- | @name@ is a NULL-terminated UTF-16 string to associate with the
+  -- underlying synchronization primitive referenced by NT handles exported
+  -- from the created fence.
   vkName :: LPCWSTR
   }
   deriving (Eq, Show)
@@ -360,7 +353,6 @@
 -- export operation
 --
 -- = Description
--- #_description#
 --
 -- The properties of the handle returned depend on the value of
 -- @handleType@. See
@@ -379,16 +371,16 @@
 --     each valid unique combination of @fence@ and @handleType@.
 --
 -- -   @fence@ /must/ not currently have its payload replaced by an
---     imported payload as described below in
---     <{html_spec_relative}#synchronization-fences-importing Importing Fence Payloads>
+--     imported payload as described below in [Importing Fence
+--     Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-importing)
 --     unless that imported payload’s handle type was included in
 --     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceProperties'::@exportFromImportedHandleTypes@
 --     for @handleType@.
 --
 -- -   If @handleType@ refers to a handle type with copy payload
 --     transference semantics, @fence@ /must/ be signaled, or have an
---     associated
---     <{html_spec_relative}#synchronization-fences-signaling fence signal operation>
+--     associated [fence signal
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-fences-signaling)
 --     pending execution.
 --
 -- -   @handleType@ /must/ be defined as an NT handle or a global share
@@ -408,20 +400,19 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetFenceWin32HandleKHR'
 data VkFenceGetWin32HandleInfoKHR = VkFenceGetWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkFenceGetWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkFenceGetWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkFenceGetWin32HandleInfoKHR" "vkFence"
+  , -- | @fence@ is the fence from which state will be exported.
   vkFence :: VkFence
-  , -- No documentation found for Nested "VkFenceGetWin32HandleInfoKHR" "vkHandleType"
+  , -- | @handleType@ is the type of handle requested.
   vkHandleType :: VkExternalFenceHandleTypeFlagBits
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
@@ -74,7 +74,6 @@
 -- | vkGetMemoryFdKHR - Get a POSIX file descriptor for a memory object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the device memory being
 --     exported.
@@ -87,7 +86,6 @@
 --     resources of the device memory object.
 --
 -- = Description
--- #_description#
 --
 -- Each call to @vkGetMemoryFdKHR@ /must/ create a new file descriptor and
 -- transfer ownership of it to the application. To avoid leaking resources,
@@ -108,16 +106,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkMemoryGetFdInfoKHR'
@@ -126,7 +123,6 @@
 -- Descriptors
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that will be importing @fd@.
 --
@@ -136,9 +132,6 @@
 --
 -- -   @pMemoryFdProperties@ will return properties of the handle @fd@.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @fd@ /must/ be an external memory handle created outside of the
@@ -160,14 +153,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
@@ -177,7 +169,6 @@
 -- device from a file descriptor
 --
 -- = Description
--- #_description#
 --
 -- Importing memory from a file descriptor transfers ownership of the file
 -- descriptor from the application to the Vulkan implementation. The
@@ -209,10 +200,11 @@
 -- -   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
---     <{html_spec_relative}#external-memory-handle-types-compatibility {html_spec_relative}#external-memory-handle-types-compatibility>.
+--     [{html_spec_relative}#external-memory-handle-types-compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-memory-handle-types-compatibility).
 --
 -- -   @fd@ /must/ obey any requirements listed for @handleType@ in
---     <{html_spec_relative}#external-memory-handle-types-compatibility external memory handle types compatibility>.
+--     [external memory handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-memory-handle-types-compatibility).
 --
 -- == Valid Usage (Implicit)
 --
@@ -223,18 +215,17 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImportMemoryFdInfoKHR = VkImportMemoryFdInfoKHR
-  { -- No documentation found for Nested "VkImportMemoryFdInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportMemoryFdInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportMemoryFdInfoKHR" "vkHandleType"
+  , -- | @handleType@ specifies the handle type of @fd@.
   vkHandleType :: VkExternalMemoryHandleTypeFlagBits
-  , -- No documentation found for Nested "VkImportMemoryFdInfoKHR" "vkFd"
+  , -- | @fd@ is the external handle to import.
   vkFd :: CInt
   }
   deriving (Eq, Show)
@@ -252,20 +243,17 @@
                 *> poke (ptr `plusPtr` 20) (vkFd (poked :: VkImportMemoryFdInfoKHR))
 -- | VkMemoryFdPropertiesKHR - Properties of External Memory File Descriptors
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetMemoryFdPropertiesKHR'
 data VkMemoryFdPropertiesKHR = VkMemoryFdPropertiesKHR
-  { -- No documentation found for Nested "VkMemoryFdPropertiesKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryFdPropertiesKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryFdPropertiesKHR" "vkMemoryTypeBits"
+  , -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
+  -- type which the specified file descriptor /can/ be imported as.
   vkMemoryTypeBits :: Word32
   }
   deriving (Eq, Show)
@@ -283,7 +271,6 @@
 -- operation
 --
 -- = Description
--- #_description#
 --
 -- The properties of the file descriptor exported depend on the value of
 -- @handleType@. See
@@ -291,6 +278,14 @@
 -- for a description of the properties of the defined external memory
 -- handle types.
 --
+-- __Note__
+--
+-- The size of the exported file /may/ be larger than the size requested by
+-- 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo'::allocationSize. If
+-- @handleType@ is @VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT@, then
+-- the application /can/ query the file’s actual size with
+-- [lseek(2)](man:lseek(2)).
+--
 -- == Valid Usage
 --
 -- -   @handleType@ /must/ have been included in
@@ -312,19 +307,18 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkGetMemoryFdKHR'
 data VkMemoryGetFdInfoKHR = VkMemoryGetFdInfoKHR
-  { -- No documentation found for Nested "VkMemoryGetFdInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryGetFdInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryGetFdInfoKHR" "vkMemory"
+  , -- | @memory@ is the memory object from which the handle will be exported.
   vkMemory :: VkDeviceMemory
-  , -- No documentation found for Nested "VkMemoryGetFdInfoKHR" "vkHandleType"
+  , -- | @handleType@ is the type of handle requested.
   vkHandleType :: VkExternalMemoryHandleTypeFlagBits
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
@@ -87,7 +87,6 @@
 -- | vkGetMemoryWin32HandleKHR - Get a Windows HANDLE for a memory object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the device memory being
 --     exported.
@@ -100,7 +99,6 @@
 --     resources of the device memory object.
 --
 -- = Description
--- #_description#
 --
 -- For handle types defined as NT handles, the handles returned by
 -- @vkGetMemoryWin32HandleKHR@ are owned by the application. To avoid
@@ -118,16 +116,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkMemoryGetWin32HandleInfoKHR'
@@ -136,7 +133,6 @@
 -- Win32 Handles
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that will be importing @handle@.
 --
@@ -146,9 +142,6 @@
 --
 -- -   @pMemoryWin32HandleProperties@ will return properties of @handle@.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @handle@ /must/ be an external memory handle created outside of the
@@ -170,14 +163,13 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
@@ -187,7 +179,6 @@
 -- same physical device
 --
 -- = Description
--- #_description#
 --
 -- Importing memory objects from Windows handles does not transfer
 -- ownership of the handle to the Vulkan implementation. For handle types
@@ -230,12 +221,12 @@
 -- -   if @handle@ is not @NULL@, @name@ must be @NULL@.
 --
 -- -   If @handle@ is not @NULL@, it /must/ obey any requirements listed
---     for @handleType@ in
---     <{html_spec_relative}#external-memory-handle-types-compatibility external memory handle types compatibility>.
+--     for @handleType@ in [external memory handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-memory-handle-types-compatibility).
 --
 -- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
---     @handleType@ in
---     <{html_spec_relative}#external-memory-handle-types-compatibility external memory handle types compatibility>.
+--     @handleType@ in [external memory handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-memory-handle-types-compatibility).
 --
 -- == Valid Usage (Implicit)
 --
@@ -247,20 +238,20 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImportMemoryWin32HandleInfoKHR = VkImportMemoryWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkHandleType"
+  , -- | @handleType@ specifies the type of @handle@ or @name@.
   vkHandleType :: VkExternalMemoryHandleTypeFlagBits
-  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkHandle"
+  , -- | @handle@ is the external handle to import, or @NULL@.
   vkHandle :: HANDLE
-  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkName"
+  , -- | @name@ is a NULL-terminated UTF-16 string naming the underlying memory
+  -- resource to import, or @NULL@.
   vkName :: LPCWSTR
   }
   deriving (Eq, Show)
@@ -282,7 +273,6 @@
 -- attributes of Windows handles exported from a memory
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not present, or if @pAttributes@ is set to @NULL@,
 -- default security descriptor values will be used, and child processes
@@ -330,19 +320,21 @@
 --     pointer to a valid @SECURITY_ATTRIBUTES@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportMemoryWin32HandleInfoKHR = VkExportMemoryWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkPAttributes"
+  , -- | @pAttributes@ is a pointer to a Windows @SECURITY_ATTRIBUTES@ structure
+  -- specifying security attributes of the handle.
   vkPAttributes :: Ptr SECURITY_ATTRIBUTES
-  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkDwAccess"
+  , -- | @dwAccess@ is a @DWORD@ specifying access rights of the handle.
   vkDwAccess :: DWORD
-  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkName"
+  , -- | @name@ is a NULL-terminated UTF-16 string to associate with the
+  -- underlying resource referenced by NT handles exported from the created
+  -- memory.
   vkName :: LPCWSTR
   }
   deriving (Eq, Show)
@@ -363,20 +355,17 @@
 -- | VkMemoryWin32HandlePropertiesKHR - Properties of External Memory Windows
 -- Handles
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetMemoryWin32HandlePropertiesKHR'
 data VkMemoryWin32HandlePropertiesKHR = VkMemoryWin32HandlePropertiesKHR
-  { -- No documentation found for Nested "VkMemoryWin32HandlePropertiesKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryWin32HandlePropertiesKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryWin32HandlePropertiesKHR" "vkMemoryTypeBits"
+  , -- | @memoryTypeBits@ is a bitmask containing one bit set for every memory
+  -- type which the specified windows handle /can/ be imported as.
   vkMemoryTypeBits :: Word32
   }
   deriving (Eq, Show)
@@ -394,7 +383,6 @@
 -- semaphore export operation
 --
 -- = Description
--- #_description#
 --
 -- The properties of the handle returned depend on the value of
 -- @handleType@. See
@@ -429,20 +417,19 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetMemoryWin32HandleKHR'
 data VkMemoryGetWin32HandleInfoKHR = VkMemoryGetWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkMemoryGetWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMemoryGetWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMemoryGetWin32HandleInfoKHR" "vkMemory"
+  , -- | @memory@ is the memory object from which the handle will be exported.
   vkMemory :: VkDeviceMemory
-  , -- No documentation found for Nested "VkMemoryGetWin32HandleInfoKHR" "vkHandleType"
+  , -- | @handleType@ is the type of handle requested.
   vkHandleType :: VkExternalMemoryHandleTypeFlagBits
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
@@ -69,7 +69,6 @@
 -- | vkGetSemaphoreFdKHR - Get a POSIX file descriptor handle for a semaphore
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the semaphore being
 --     exported.
@@ -82,7 +81,6 @@
 --     payload.
 --
 -- = Description
--- #_description#
 --
 -- Each call to @vkGetSemaphoreFdKHR@ /must/ create a new file descriptor
 -- and transfer ownership of it to the application. To avoid leaking
@@ -101,8 +99,8 @@
 --
 -- Exporting a file descriptor from a semaphore /may/ have side effects
 -- depending on the transference of the specified handle type, as described
--- in
--- <{html_spec_relative}#synchronization-semaphores-importing Importing Semaphore State>.
+-- in [Importing Semaphore
+-- State](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-importing).
 --
 -- == Valid Usage (Implicit)
 --
@@ -115,16 +113,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkSemaphoreGetFdInfoKHR'
@@ -132,7 +129,6 @@
 -- | vkImportSemaphoreFdKHR - Import a semaphore from a POSIX file descriptor
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the semaphore.
 --
@@ -140,7 +136,6 @@
 --     structure specifying the semaphore and import parameters.
 --
 -- = Description
--- #_description#
 --
 -- Importing a semaphore payload from a file descriptor transfers ownership
 -- of the file descriptor from the application to the Vulkan
@@ -165,16 +160,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkImportSemaphoreFdInfoKHR'
@@ -183,32 +177,29 @@
 -- to import to a semaphore
 --
 -- = Description
--- #_description#
 --
 -- The handle types supported by @handleType@ are:
 --
--- > +-----------------------+-----------------------+-----------------------+
--- > | Handle Type           | Transference          | Permanence Supported  |
--- > +=======================+=======================+=======================+
--- > | @VK_EXTERNAL_SEMAPHOR | Reference             | Temporary,Permanent   |
--- > | E_HANDLE_TYPE_OPAQUE_ |                       |                       |
--- > | FD_BIT@               |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @VK_EXTERNAL_SEMAPHOR | Copy                  | Temporary             |
--- > | E_HANDLE_TYPE_SYNC_FD |                       |                       |
--- > | _BIT@                 |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- >
--- > Handle Types Supported by VkImportSemaphoreFdInfoKHR
+-- +---------------------------------------------------+-----------------------+-----------------------+
+-- | Handle Type                                       | Transference          | Permanence Supported  |
+-- +===================================================+=======================+=======================+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT@ | Reference             | Temporary,Permanent   |
+-- +---------------------------------------------------+-----------------------+-----------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT@   | Copy                  | Temporary             |
+-- +---------------------------------------------------+-----------------------+-----------------------+
 --
+-- Handle Types Supported by VkImportSemaphoreFdInfoKHR
+--
 -- == Valid Usage
 --
--- -   @handleType@ /must/ be a value included in the
---     <{html_spec_relative}#synchronization-semaphore-handletypes-fd Handle Types Supported by VkImportSemaphoreFdInfoKHR>
+-- -   @handleType@ /must/ be a value included in the [Handle Types
+--     Supported by
+--     VkImportSemaphoreFdInfoKHR](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphore-handletypes-fd)
 --     table.
 --
 -- -   @fd@ /must/ obey any requirements listed for @handleType@ in
---     <{html_spec_relative}#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>.
+--     [external semaphore handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility).
 --
 -- == Valid Usage (Implicit)
 --
@@ -231,24 +222,26 @@
 -- -   Host access to @semaphore@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkSemaphore',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkSemaphoreImportFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkImportSemaphoreFdKHR'
 data VkImportSemaphoreFdInfoKHR = VkImportSemaphoreFdInfoKHR
-  { -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkSemaphore"
+  , -- | @semaphore@ is the semaphore into which the payload will be imported.
   vkSemaphore :: VkSemaphore
-  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkFlags"
+  , -- | @flags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkSemaphoreImportFlagBits'
+  -- specifying additional parameters for the semaphore payload import
+  -- operation.
   vkFlags :: VkSemaphoreImportFlags
-  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkHandleType"
+  , -- | @handleType@ specifies the type of @fd@.
   vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
-  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkFd"
+  , -- | @fd@ is the external handle to import.
   vkFd :: CInt
   }
   deriving (Eq, Show)
@@ -272,7 +265,6 @@
 -- export operation
 --
 -- = Description
--- #_description#
 --
 -- The properties of the file descriptor returned depend on the value of
 -- @handleType@. See
@@ -287,21 +279,21 @@
 --     when @semaphore@’s current payload was created.
 --
 -- -   @semaphore@ /must/ not currently have its payload replaced by an
---     imported payload as described below in
---     <{html_spec_relative}#synchronization-semaphores-importing Importing Semaphore Payloads>
+--     imported payload as described below in [Importing Semaphore
+--     Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-importing)
 --     unless that imported payload’s handle type was included in
 --     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreProperties'::@exportFromImportedHandleTypes@
 --     for @handleType@.
 --
 -- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, as defined below in
---     <{html_spec_relative}#synchronization-semaphores-importing Importing Semaphore Payloads>,
+--     transference semantics, as defined below in [Importing Semaphore
+--     Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-importing),
 --     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
---     <{html_spec_relative}#synchronization-semaphores-signaling semaphore signal operation>
+--     associated [semaphore signal
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-signaling)
 --     pending execution.
 --
 -- -   @handleType@ /must/ be defined as a POSIX file descriptor handle.
@@ -319,19 +311,18 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkSemaphore',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkGetSemaphoreFdKHR'
 data VkSemaphoreGetFdInfoKHR = VkSemaphoreGetFdInfoKHR
-  { -- No documentation found for Nested "VkSemaphoreGetFdInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSemaphoreGetFdInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSemaphoreGetFdInfoKHR" "vkSemaphore"
+  , -- | @semaphore@ is the semaphore from which state will be exported.
   vkSemaphore :: VkSemaphore
-  , -- No documentation found for Nested "VkSemaphoreGetFdInfoKHR" "vkHandleType"
+  , -- | @handleType@ is the type of handle requested.
   vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
@@ -88,7 +88,6 @@
 -- | vkGetSemaphoreWin32HandleKHR - Get a Windows HANDLE for a semaphore
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the semaphore being
 --     exported.
@@ -101,7 +100,6 @@
 --     state.
 --
 -- = Description
--- #_description#
 --
 -- For handle types defined as NT handles, the handles returned by
 -- @vkGetSemaphoreWin32HandleKHR@ are owned by the application. To avoid
@@ -110,8 +108,8 @@
 --
 -- Exporting a Windows handle from a semaphore /may/ have side effects
 -- depending on the transference of the specified handle type, as described
--- in
--- <{html_spec_relative}#synchronization-semaphores-importing Importing Semaphore Payloads>.
+-- in [Importing Semaphore
+-- Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-importing).
 --
 -- == Valid Usage (Implicit)
 --
@@ -124,16 +122,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkSemaphoreGetWin32HandleInfoKHR'
@@ -142,7 +139,6 @@
 -- HANDLE
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that created the semaphore.
 --
@@ -151,7 +147,6 @@
 --     semaphore and import parameters.
 --
 -- = Description
--- #_description#
 --
 -- Importing a semaphore payload from Windows handles does not transfer
 -- ownership of the handle to the Vulkan implementation. For handle types
@@ -171,16 +166,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkImportSemaphoreWin32HandleInfoKHR'
@@ -189,32 +183,26 @@
 -- handle to import to a semaphore
 --
 -- = Description
--- #_description#
 --
 -- The handle types supported by @handleType@ are:
 --
--- > +-----------------------+-----------------------+-----------------------+
--- > | Handle Type           | Transference          | Permanence Supported  |
--- > +=======================+=======================+=======================+
--- > | @VK_EXTERNAL_SEMAPHOR | Reference             | Temporary,Permanent   |
--- > | E_HANDLE_TYPE_OPAQUE_ |                       |                       |
--- > | WIN32_BIT@            |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @VK_EXTERNAL_SEMAPHOR | Reference             | Temporary,Permanent   |
--- > | E_HANDLE_TYPE_OPAQUE_ |                       |                       |
--- > | WIN32_KMT_BIT@        |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- > | @VK_EXTERNAL_SEMAPHOR | Reference             | Temporary,Permanent   |
--- > | E_HANDLE_TYPE_D3D12_F |                       |                       |
--- > | ENCE_BIT@             |                       |                       |
--- > +-----------------------+-----------------------+-----------------------+
--- >
--- > Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR
+-- +----------------------------------------------------------+-----------------------+-----------------------+
+-- | Handle Type                                              | Transference          | Permanence Supported  |
+-- +==========================================================+=======================+=======================+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT@     | Reference             | Temporary,Permanent   |
+-- +----------------------------------------------------------+-----------------------+-----------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT@ | Reference             | Temporary,Permanent   |
+-- +----------------------------------------------------------+-----------------------+-----------------------+
+-- | @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT@      | Reference             | Temporary,Permanent   |
+-- +----------------------------------------------------------+-----------------------+-----------------------+
 --
+-- Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR
+--
 -- == Valid Usage
 --
--- -   @handleType@ /must/ be a value included in the
---     <{html_spec_relative}#synchronization-semaphore-handletypes-win32 Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR>
+-- -   @handleType@ /must/ be a value included in the [Handle Types
+--     Supported by
+--     VkImportSemaphoreWin32HandleInfoKHR](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphore-handletypes-win32)
 --     table.
 --
 -- -   If @handleType@ is not
@@ -232,12 +220,12 @@
 -- -   If @handle@ is not @NULL@, @name@ must be @NULL@.
 --
 -- -   If @handle@ is not @NULL@, it /must/ obey any requirements listed
---     for @handleType@ in
---     <{html_spec_relative}#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>.
+--     for @handleType@ in [external semaphore handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility).
 --
 -- -   If @name@ is not @NULL@, it /must/ obey any requirements listed for
---     @handleType@ in
---     <{html_spec_relative}#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>.
+--     @handleType@ in [external semaphore handle types
+--     compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#external-semaphore-handle-types-compatibility).
 --
 -- == Valid Usage (Implicit)
 --
@@ -261,7 +249,6 @@
 -- -   Host access to @semaphore@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkSemaphore',
@@ -269,19 +256,23 @@
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkImportSemaphoreWin32HandleKHR'
 data VkImportSemaphoreWin32HandleInfoKHR = VkImportSemaphoreWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkSemaphore"
+  , -- | @semaphore@ is the semaphore into which the payload will be imported.
   vkSemaphore :: VkSemaphore
-  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkFlags"
+  , -- | @flags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkSemaphoreImportFlagBits'
+  -- specifying additional parameters for the semaphore payload import
+  -- operation.
   vkFlags :: VkSemaphoreImportFlags
-  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkHandleType"
+  , -- | @handleType@ specifies the type of @handle@.
   vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
-  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkHandle"
+  , -- | @handle@ is the external handle to import, or @NULL@.
   vkHandle :: HANDLE
-  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkName"
+  , -- | @name@ is a NULL-terminated UTF-16 string naming the underlying
+  -- synchronization primitive to import, or @NULL@.
   vkName :: LPCWSTR
   }
   deriving (Eq, Show)
@@ -307,7 +298,6 @@
 -- attributes of Windows handles exported from a semaphore
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not present, or if @pAttributes@ is set to @NULL@,
 -- default security descriptor values will be used, and child processes
@@ -353,19 +343,21 @@
 --     pointer to a valid @SECURITY_ATTRIBUTES@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportSemaphoreWin32HandleInfoKHR = VkExportSemaphoreWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkPAttributes"
+  , -- | @pAttributes@ is a pointer to a Windows @SECURITY_ATTRIBUTES@ structure
+  -- specifying security attributes of the handle.
   vkPAttributes :: Ptr SECURITY_ATTRIBUTES
-  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkDwAccess"
+  , -- | @dwAccess@ is a @DWORD@ specifying access rights of the handle.
   vkDwAccess :: DWORD
-  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkName"
+  , -- | @name@ is a NULL-terminated UTF-16 string to associate with the
+  -- underlying synchronization primitive referenced by NT handles exported
+  -- from the created semaphore.
   vkName :: LPCWSTR
   }
   deriving (Eq, Show)
@@ -387,14 +379,13 @@
 -- fence-backed semaphores
 --
 -- = Description
--- #_description#
 --
 -- If the semaphore in
 -- 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@pWaitSemaphores@ or
 -- 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@pSignalSemaphores@
 -- corresponding to an entry in @pWaitSemaphoreValues@ or
 -- @pSignalSemaphoreValues@ respectively does not currently have a
--- <{html_spec_relative}#synchronization-semaphores-payloads payload>
+-- [payload](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-payloads)
 -- referring to a Direct3D 12 fence, the implementation /must/ ignore the
 -- value in the @pWaitSemaphoreValues@ or @pSignalSemaphoreValues@ entry.
 --
@@ -422,21 +413,29 @@
 --     @signalSemaphoreValuesCount@ @uint64_t@ values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkD3D12FenceSubmitInfoKHR = VkD3D12FenceSubmitInfoKHR
-  { -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkWaitSemaphoreValuesCount"
+  , -- | @waitSemaphoreValuesCount@ is the number of semaphore wait values
+  -- specified in @pWaitSemaphoreValues@.
   vkWaitSemaphoreValuesCount :: Word32
-  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkPWaitSemaphoreValues"
+  , -- | @pWaitSemaphoreValues@ is an array of length @waitSemaphoreValuesCount@
+  -- containing values for the corresponding semaphores in
+  -- 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@pWaitSemaphores@ to wait
+  -- for.
   vkPWaitSemaphoreValues :: Ptr Word64
-  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkSignalSemaphoreValuesCount"
+  , -- | @signalSemaphoreValuesCount@ is the number of semaphore signal values
+  -- specified in @pSignalSemaphoreValues@.
   vkSignalSemaphoreValuesCount :: Word32
-  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkPSignalSemaphoreValues"
+  , -- | @pSignalSemaphoreValues@ is an array of length
+  -- @signalSemaphoreValuesCount@ containing values for the corresponding
+  -- semaphores in
+  -- 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo'::@pSignalSemaphores@ to set
+  -- when signaled.
   vkPSignalSemaphoreValues :: Ptr Word64
   }
   deriving (Eq, Show)
@@ -460,7 +459,6 @@
 -- semaphore export operation
 --
 -- = Description
--- #_description#
 --
 -- The properties of the handle returned depend on the value of
 -- @handleType@. See
@@ -479,21 +477,21 @@
 --     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
---     <{html_spec_relative}#synchronization-semaphores-importing Importing Semaphore Payloads>
+--     imported payload as described below in [Importing Semaphore
+--     Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-importing)
 --     unless that imported payload’s handle type was included in
 --     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreProperties'::@exportFromImportedHandleTypes@
 --     for @handleType@.
 --
 -- -   If @handleType@ refers to a handle type with copy payload
---     transference semantics, as defined below in
---     <{html_spec_relative}#synchronization-semaphores-importing Importing Semaphore Payloads>,
+--     transference semantics, as defined below in [Importing Semaphore
+--     Payloads](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-importing),
 --     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
---     <{html_spec_relative}#synchronization-semaphores-signaling semaphore signal operation>
+--     associated [semaphore signal
+--     operation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-signaling)
 --     pending execution.
 --
 -- -   @handleType@ /must/ be defined as an NT handle or a global share
@@ -513,20 +511,19 @@
 --     value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits',
 -- 'Graphics.Vulkan.Core10.Queue.VkSemaphore',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetSemaphoreWin32HandleKHR'
 data VkSemaphoreGetWin32HandleInfoKHR = VkSemaphoreGetWin32HandleInfoKHR
-  { -- No documentation found for Nested "VkSemaphoreGetWin32HandleInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSemaphoreGetWin32HandleInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSemaphoreGetWin32HandleInfoKHR" "vkSemaphore"
+  , -- | @semaphore@ is the semaphore from which state will be exported.
   vkSemaphore :: VkSemaphore
-  , -- No documentation found for Nested "VkSemaphoreGetWin32HandleInfoKHR" "vkHandleType"
+  , -- | @handleType@ is the type of handle requested.
   vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
@@ -71,7 +71,6 @@
 -- surface on a physical device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device that will be associated with
 --     the swapchain to be created, as described for
@@ -87,7 +86,6 @@
 --     returned.
 --
 -- = Description
--- #_description#
 --
 -- @vkGetPhysicalDeviceSurfaceCapabilities2KHR@ behaves similarly to
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
@@ -107,10 +105,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -118,7 +116,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
 -- 'VkPhysicalDeviceSurfaceInfo2KHR', 'VkSurfaceCapabilities2KHR'
@@ -127,7 +124,6 @@
 -- surface
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device that will be associated with
 --     the swapchain to be created, as described for
@@ -145,7 +141,6 @@
 --     'VkSurfaceFormat2KHR' structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pSurfaceFormats@ is @NULL@, then the number of format tuples
 -- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
@@ -178,12 +173,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -191,7 +186,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
 -- 'VkPhysicalDeviceSurfaceInfo2KHR', 'VkSurfaceFormat2KHR'
@@ -200,7 +194,6 @@
 -- related swapchain creation parameters
 --
 -- = Description
--- #_description#
 --
 -- The members of @VkPhysicalDeviceSurfaceInfo2KHR@ correspond to the
 -- arguments to
@@ -217,18 +210,17 @@
 -- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR',
 -- 'vkGetPhysicalDeviceSurfaceCapabilities2KHR',
 -- 'vkGetPhysicalDeviceSurfaceFormats2KHR'
 data VkPhysicalDeviceSurfaceInfo2KHR = VkPhysicalDeviceSurfaceInfo2KHR
-  { -- No documentation found for Nested "VkPhysicalDeviceSurfaceInfo2KHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceSurfaceInfo2KHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceSurfaceInfo2KHR" "vkSurface"
+  , -- | @surface@ is the surface that will be associated with the swapchain.
   vkSurface :: VkSurfaceKHR
   }
   deriving (Eq, Show)
@@ -245,9 +237,6 @@
 -- | VkSurfaceCapabilities2KHR - Structure describing capabilities of a
 -- surface
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR@
@@ -256,17 +245,18 @@
 --     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR'
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR',
 -- 'vkGetPhysicalDeviceSurfaceCapabilities2KHR'
 data VkSurfaceCapabilities2KHR = VkSurfaceCapabilities2KHR
-  { -- No documentation found for Nested "VkSurfaceCapabilities2KHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSurfaceCapabilities2KHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSurfaceCapabilities2KHR" "vkSurfaceCapabilities"
+  , -- | @surfaceCapabilities@ is a structure of type
+  -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR'
+  -- describing the capabilities of the specified surface.
   vkSurfaceCapabilities :: VkSurfaceCapabilitiesKHR
   }
   deriving (Eq, Show)
@@ -283,9 +273,6 @@
 -- | VkSurfaceFormat2KHR - Structure describing a supported swapchain format
 -- tuple
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR@
@@ -293,17 +280,19 @@
 -- -   @pNext@ /must/ be @NULL@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceFormatKHR',
 -- 'vkGetPhysicalDeviceSurfaceFormats2KHR'
 data VkSurfaceFormat2KHR = VkSurfaceFormat2KHR
-  { -- No documentation found for Nested "VkSurfaceFormat2KHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSurfaceFormat2KHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSurfaceFormat2KHR" "vkSurfaceFormat"
+  , -- | @surfaceFormat@ is an instance of
+  -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceFormatKHR'
+  -- describing a format-color space pair that is compatible with the
+  -- specified surface.
   vkSurfaceFormat :: VkSurfaceFormatKHR
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs
@@ -46,7 +46,6 @@
 -- with a particular set of formats
 --
 -- = Description
--- #_description#
 --
 -- If @viewFormatCount@ is zero, @pViewFormats@ is ignored and the image is
 -- created as if the @VkImageFormatListCreateInfoKHR@ structure were not
@@ -58,7 +57,8 @@
 -- -   If @viewFormatCount@ is not @0@, all of the formats in the
 --     @pViewFormats@ array /must/ be compatible with the format specified
 --     in the @format@ field of @VkImageCreateInfo@, as described in the
---     <{html_spec_relative}#resources-image-views-compatibility compatibility table>.
+--     [compatibility
+--     table](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#resources-image-views-compatibility).
 --
 -- -   If @VkImageCreateInfo@::@flags@ does not contain
 --     @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@, @viewFormatCount@ /must/ be
@@ -77,18 +77,18 @@
 --     'Graphics.Vulkan.Core10.Core.VkFormat' values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkFormat',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImageFormatListCreateInfoKHR = VkImageFormatListCreateInfoKHR
-  { -- No documentation found for Nested "VkImageFormatListCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageFormatListCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageFormatListCreateInfoKHR" "vkViewFormatCount"
+  , -- | @viewFormatCount@ is the number of entries in the @pViewFormats@ array.
   vkViewFormatCount :: Word32
-  , -- No documentation found for Nested "VkImageFormatListCreateInfoKHR" "vkPViewFormats"
+  , -- | @pViewFormats@ is an array which lists of all formats which /can/ be
+  -- used when creating views of this image.
   vkPViewFormats :: Ptr VkFormat
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs
@@ -50,9 +50,6 @@
 -- | VkPresentRegionsKHR - Structure hint of rectangular regions changed by
 -- vkQueuePresentKHR
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @swapchainCount@ /must/ be the same value as
@@ -69,17 +66,21 @@
 -- -   @swapchainCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPresentRegionKHR', 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPresentRegionsKHR = VkPresentRegionsKHR
-  { -- No documentation found for Nested "VkPresentRegionsKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPresentRegionsKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPresentRegionsKHR" "vkSwapchainCount"
+  , -- | @swapchainCount@ is the number of swapchains being presented to by this
+  -- command.
   vkSwapchainCount :: Word32
-  , -- No documentation found for Nested "VkPresentRegionsKHR" "vkPRegions"
+  , -- | @pRegions@ is @NULL@ or a pointer to an array of @VkPresentRegionKHR@
+  -- elements with @swapchainCount@ entries. If not @NULL@, each element of
+  -- @pRegions@ contains the region that has changed since the last present
+  -- to the swapchain in the corresponding entry in the
+  -- @VkPresentInfoKHR@::@pSwapchains@ array.
   vkPRegions :: Ptr VkPresentRegionKHR
   }
   deriving (Eq, Show)
@@ -98,9 +99,6 @@
 -- | VkPresentRegionKHR - Structure containing rectangular region changed by
 -- vkQueuePresentKHR for a given VkImage
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   If @rectangleCount@ is not @0@, and @pRectangles@ is not @NULL@,
@@ -108,13 +106,18 @@
 --     @rectangleCount@ @VkRectLayerKHR@ structures
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPresentRegionsKHR', 'VkRectLayerKHR'
 data VkPresentRegionKHR = VkPresentRegionKHR
-  { -- No documentation found for Nested "VkPresentRegionKHR" "vkRectangleCount"
+  { -- | @rectangleCount@ is the number of rectangles in @pRectangles@, or zero
+  -- if the entire image has changed and should be presented.
   vkRectangleCount :: Word32
-  , -- No documentation found for Nested "VkPresentRegionKHR" "vkPRectangles"
+  , -- | @pRectangles@ is either @NULL@ or a pointer to an array of
+  -- @VkRectLayerKHR@ structures. The @VkRectLayerKHR@ structure is the
+  -- framebuffer coordinates, plus layer, of a portion of a presentable image
+  -- that has changed and /must/ be presented. If non-@NULL@, each entry in
+  -- @pRectangles@ is a rectangle of the given image that has changed since
+  -- the last image was presented to the given swapchain.
   vkPRectangles :: Ptr VkRectLayerKHR
   }
   deriving (Eq, Show)
@@ -129,9 +132,6 @@
 -- | VkRectLayerKHR - Structure containing a rectangle, including layer,
 -- changed by vkQueuePresentKHR for a given VkImage
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The sum of @offset@ and @extent@ /must/ be no greater than the
@@ -149,16 +149,16 @@
 -- of the swapchain.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkOffset2D', 'VkPresentRegionKHR'
 data VkRectLayerKHR = VkRectLayerKHR
-  { -- No documentation found for Nested "VkRectLayerKHR" "vkOffset"
+  { -- | @offset@ is the origin of the rectangle, in pixels.
   vkOffset :: VkOffset2D
-  , -- No documentation found for Nested "VkRectLayerKHR" "vkExtent"
+  , -- | @extent@ is the size of the rectangle, in pixels.
   vkExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkRectLayerKHR" "vkLayer"
+  , -- | @layer@ is the layer of the image. For images with only one layer, the
+  -- value of @layer@ /must/ be 0.
   vkLayer :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_mir_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_mir_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_mir_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_mir_surface.hs
@@ -113,7 +113,6 @@
 -- Mir window
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance to associate the surface with.
 --
@@ -123,14 +122,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -145,16 +142,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
@@ -165,7 +161,6 @@
 -- presentation to Mir
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device.
 --
@@ -175,7 +170,6 @@
 --     desired Mir compositor.
 --
 -- = Description
--- #_description#
 --
 -- This platform-specific function /can/ be called prior to creating a
 -- surface.
@@ -193,16 +187,12 @@
 -- -   @connection@ /must/ be a valid pointer to a @MirConnection@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkGetPhysicalDeviceMirPresentationSupportKHR" vkGetPhysicalDeviceMirPresentationSupportKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("queueFamilyIndex" ::: Word32) -> ("connection" ::: Ptr MirConnection) -> IO VkBool32
 -- | VkMirSurfaceCreateInfoKHR - Structure specifying parameters of a newly
 -- created Mir surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @connection@ /must/ point to a valid @MirConnection@.
@@ -218,20 +208,20 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkMirSurfaceCreateFlagsKHR',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateMirSurfaceKHR'
 data VkMirSurfaceCreateInfoKHR = VkMirSurfaceCreateInfoKHR
-  { -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkMirSurfaceCreateFlagsKHR
-  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkConnection"
+  , -- | @connection@ and @surface@ are pointers to the @MirConnection@ and
+  -- @MirSurface@ for the window to associate the surface with.
   vkConnection :: Ptr MirConnection
-  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkMirSurface"
+  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "mirSurface"
   vkMirSurface :: Ptr MirSurface
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs
@@ -61,10 +61,14 @@
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR :: VkStructureType
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR = VkStructureType 1000080000
--- No documentation found for Nested "VkDescriptorUpdateTemplateType" "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR"
+-- | @VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR@ specifies that
+-- the descriptor update template will be used for push descriptor updates
+-- only.
 pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR :: VkDescriptorUpdateTemplateType
 pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR = VkDescriptorUpdateTemplateType 1
--- No documentation found for Nested "VkDescriptorSetLayoutCreateFlagBits" "VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"
+-- | @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@ specifies that
+-- descriptor sets /must/ not be allocated using this layout, and
+-- descriptors are instead pushed by 'vkCmdPushDescriptorSetKHR'.
 pattern VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR :: VkDescriptorSetLayoutCreateFlagBits
 pattern VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR = VkDescriptorSetLayoutCreateFlagBits 0x00000001
 -- No documentation found for TopLevel "VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION"
@@ -77,7 +81,6 @@
 -- buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer that the descriptors will be
 --     recorded in.
@@ -103,7 +106,6 @@
 --     structures describing the descriptors to be updated.
 --
 -- = Description
--- #_description#
 --
 -- /Push descriptors/ are a small bank of descriptors whose storage is
 -- internally managed by the command buffer rather than being written into
@@ -116,8 +118,8 @@
 -- cause shaders to use the updated descriptors for subsequent rendering
 -- commands (either compute or graphics, according to the
 -- @pipelineBindPoint@) until the descriptor is overwritten, or else until
--- the set is disturbed as described in
--- <{html_spec_relative}#descriptorsets-compatibility Pipeline Layout Compatibility>.
+-- the set is disturbed as described in [Pipeline Layout
+-- Compatibility](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#descriptorsets-compatibility).
 -- When the set is disturbed or push descriptors with a different
 -- descriptor set layout are set, all push descriptors become invalid.
 --
@@ -174,8 +176,8 @@
 -- -   @pDescriptorWrites@ /must/ be a valid pointer to an array of
 --     @descriptorWriteCount@ valid @VkWriteDescriptorSet@ structures
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -194,18 +196,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint',
@@ -216,7 +217,6 @@
 -- command buffer using a descriptor update template
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer that the descriptors will be
 --     recorded in.
@@ -235,9 +235,6 @@
 -- -   @pData@ Points to memory which contains the descriptors for the
 --     templated update.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The pipelineBindPoint specified during the creation of the
@@ -261,8 +258,8 @@
 --
 -- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -280,16 +277,16 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- __API example.__
 --
 -- > struct AppBufferView {
@@ -345,7 +342,6 @@
 -- > vkCmdPushDescriptorSetWithTemplateKHR(myCmdBuffer, myDescriptorUpdateTemplate, myPipelineLayout, 0,&appData);
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
 -- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplate',
@@ -355,13 +351,11 @@
 -- descriptor limits that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the @VkPhysicalDevicePushDescriptorPropertiesKHR@
 -- structure describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @maxPushDescriptors@ is the maximum number of descriptors that /can/
 --     be used in a descriptor set created with
@@ -373,15 +367,14 @@
 --     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDevicePushDescriptorPropertiesKHR = VkPhysicalDevicePushDescriptorPropertiesKHR
-  { -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "vkMaxPushDescriptors"
+  , -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "maxPushDescriptors"
   vkMaxPushDescriptors :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
@@ -73,15 +73,11 @@
 -- | vkGetSwapchainStatusKHR - Get a swapchain’s status
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device associated with @swapchain@.
 --
 -- -   @swapchain@ is the swapchain to query.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -97,12 +93,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_SUBOPTIMAL_KHR@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -114,7 +110,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'
@@ -122,25 +117,29 @@
 -- | VkSharedPresentSurfaceCapabilitiesKHR - structure describing
 -- capabilities of a surface for shared presentation
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
 --     @VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkSharedPresentSurfaceCapabilitiesKHR = VkSharedPresentSurfaceCapabilitiesKHR
-  { -- No documentation found for Nested "VkSharedPresentSurfaceCapabilitiesKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSharedPresentSurfaceCapabilitiesKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSharedPresentSurfaceCapabilitiesKHR" "vkSharedPresentSupportedUsageFlags"
+  , -- | @sharedPresentSupportedUsageFlags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+  -- representing the ways the application /can/ use the shared presentable
+  -- image from a swapchain created with
+  -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkPresentModeKHR' set to
+  -- @VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR@ or
+  -- @VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR@ for the surface on the
+  -- specified device. @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ /must/ be
+  -- included in the set but implementations /may/ support additional usages.
   vkSharedPresentSupportedUsageFlags :: VkImageUsageFlags
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs
@@ -112,8 +112,117 @@
 
 -- | VkColorSpaceKHR - supported color space of the presentation engine
 --
+-- = Description
+--
+-- -   @VK_COLOR_SPACE_SRGB_NONLINEAR_KHR@ specifies support for the sRGB
+--     color space.
+--
+-- -   @VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT@ specifies support for the
+--     Display-P3 color space and applies an sRGB-like transfer function
+--     (defined below).
+--
+-- -   @VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT@ specifies support for the
+--     extended sRGB color space and applies a linear transfer function.
+--
+-- -   @VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT@ specifies support for
+--     the extended sRGB color space and applies an sRGB transfer function.
+--
+-- -   @VK_COLOR_SPACE_DCI_P3_LINEAR_EXT@ specifies support for the DCI-P3
+--     color space and applies a linear OETF.
+--
+-- -   @VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT@ specifies support for the
+--     DCI-P3 color space and applies the Gamma 2.6 OETF.
+--
+-- -   @VK_COLOR_SPACE_BT709_LINEAR_EXT@ specifies support for the BT709
+--     color space and applies a linear OETF.
+--
+-- -   @VK_COLOR_SPACE_BT709_NONLINEAR_EXT@ specifies support for the BT709
+--     color space and applies the SMPTE 170M OETF.
+--
+-- -   @VK_COLOR_SPACE_BT2020_LINEAR_EXT@ specifies support for the BT2020
+--     color space and applies a linear OETF.
+--
+-- -   @VK_COLOR_SPACE_HDR10_ST2084_EXT@ specifies support for the HDR10
+--     (BT2020 color) space and applies the SMPTE ST2084 Perceptual
+--     Quantizer (PQ) OETF.
+--
+-- -   @VK_COLOR_SPACE_DOLBYVISION_EXT@ specifies support for the Dolby
+--     Vision (BT2020 color space), proprietary encoding, and applies the
+--     SMPTE ST2084 OETF.
+--
+-- -   @VK_COLOR_SPACE_HDR10_HLG_EXT@ specifies support for the HDR10
+--     (BT2020 color space) and applies the Hybrid Log Gamma (HLG) OETF.
+--
+-- -   @VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT@ specifies support for the
+--     AdobeRGB color space and applies a linear OETF.
+--
+-- -   @VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT@ specifies support for the
+--     AdobeRGB color space and applies the Gamma 2.2 OETF.
+--
+-- -   @VK_COLOR_SPACE_PASS_THROUGH_EXT@ specifies that color components
+--     are used “as is”. This is intended to allow applications to supply
+--     data for color spaces not described here.
+--
+-- The color components of Non-linear color space swap chain images have
+-- had the appropriate transfer function applied. Vulkan requires that all
+-- implementations support the sRGB transfer function when using an SRGB
+-- pixel format. Other transfer functions, such as SMPTE 170M or SMPTE2084,
+-- /must/ not be performed by the implementation, but /can/ be performed by
+-- the application shader. This extension defines enums for
+-- 'VkColorSpaceKHR' that correspond to the following color spaces:
+--
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | Name         | Red      | Green    | Blue     | White-point | Transfer   |
+-- |              | Primary  | Primary  | Primary  |             | function   |
+-- +==============+==========+==========+==========+=============+============+
+-- | DCI-P3       | 0.680,   | 0.265,   | 0.150,   | 0.3127,     | Gamma 2.6  |
+-- |              | 0.320    | 0.690    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | Display-P3   | 0.680,   | 0.265,   | 0.150,   | 0.3127,     | Display-P3 |
+-- |              | 0.320    | 0.690    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | BT709        | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | SMPTE 170M |
+-- |              | 0.330    | 0.600    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | sRGB         | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | sRGB       |
+-- |              | 0.330    | 0.600    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | extended     | 0.640,   | 0.300,   | 0.150,   | 0.3127,     | extended   |
+-- | sRGB         | 0.330    | 0.600    | 0.060    | 0.3290      | sRGB       |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | HDR10_ST2084 | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084     |
+-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | DOLBYVISION  | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | ST2084     |
+-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | HDR10_HLG    | 0.708,   | 0.170,   | 0.131,   | 0.3127,     | HLG        |
+-- |              | 0.292    | 0.797    | 0.046    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+-- | AdobeRGB     | 0.640,   | 0.210,   | 0.150,   | 0.3127,     | AdobeRGB   |
+-- |              | 0.330    | 0.710    | 0.060    | 0.3290      |            |
+-- |              |          |          |          | (D65)       |            |
+-- +--------------+----------+----------+----------+-------------+------------+
+--
+-- Color Spaces and Attributes
+--
+-- For Opto-Electrical Transfer Function (OETF), unless otherwise
+-- specified, the values of L and E are defined as:
+--
+-- L - linear luminance of image \(0 \leq L \leq 1\) for conventional
+-- colorimetry
+--
+-- E - corresponding electrical signal (value stored in memory)
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkSurfaceFormatKHR',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
@@ -164,8 +273,7 @@
                         )
                     )
 
--- | @VK_COLOR_SPACE_SRGB_NONLINEAR_KHR@ specifies support for the sRGB color
--- space.
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_SRGB_NONLINEAR_KHR"
 pattern VK_COLOR_SPACE_SRGB_NONLINEAR_KHR :: VkColorSpaceKHR
 pattern VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = VkColorSpaceKHR 0
 -- ** VkPresentModeKHR
@@ -173,7 +281,6 @@
 -- | VkPresentModeKHR - presentation mode supported for a surface
 --
 -- = Description
--- #_description#
 --
 -- -   @VK_PRESENT_MODE_IMMEDIATE_KHR@ specifies that the presentation
 --     engine does not wait for a vertical blanking period to update the
@@ -216,6 +323,53 @@
 --     during or after each vertical blanking period in which the queue is
 --     non-empty.
 --
+-- -   @VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR@ specifies that the
+--     presentation engine and application have concurrent access to a
+--     single image, which is referred to as a /shared presentable image/.
+--     The presentation engine is only required to update the current image
+--     after a new presentation request is received. Therefore the
+--     application /must/ make a presentation request whenever an update is
+--     required. However, the presentation engine /may/ update the current
+--     image at any point, meaning this mode /may/ result in visible
+--     tearing.
+--
+-- -   @VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR@ specifies that the
+--     presentation engine and application have concurrent access to a
+--     single image, which is referred to as a /shared presentable image/.
+--     The presentation engine periodically updates the current image on
+--     its regular refresh cycle. The application is only required to make
+--     one initial presentation request, after which the presentation
+--     engine /must/ update the current image without any need for further
+--     presentation requests. The application /can/ indicate the image
+--     contents have been updated by making a presentation request, but
+--     this does not guarantee the timing of when it will be updated. This
+--     mode /may/ result in visible tearing if rendering to the image is
+--     not timed correctly.
+--
+-- The supported
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits' of
+-- the presentable images of a swapchain created for a surface /may/ differ
+-- depending on the presentation mode, and can be determined as per the
+-- table below:
+--
+-- +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
+-- | Presentation mode                               | Image usage flags                                                                                                                      |
+-- +=================================================+========================================================================================================================================+
+-- | @VK_PRESENT_MODE_IMMEDIATE_KHR@                 | 'VkSurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                                      |
+-- +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
+-- | @VK_PRESENT_MODE_MAILBOX_KHR@                   | 'VkSurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                                      |
+-- +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
+-- | @VK_PRESENT_MODE_FIFO_KHR@                      | 'VkSurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                                      |
+-- +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
+-- | @VK_PRESENT_MODE_FIFO_RELAXED_KHR@              | 'VkSurfaceCapabilitiesKHR'::@supportedUsageFlags@                                                                                      |
+-- +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
+-- | @VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR@     | 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@ |
+-- +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
+-- | @VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR@ | 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@ |
+-- +-------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------+
+--
+-- Presentable image usage queries
+--
 -- __Note__
 --
 -- For reference, the mode indicated by @VK_PRESENT_MODE_FIFO_KHR@ is
@@ -226,7 +380,6 @@
 -- {WGL|GLX}_EXT_swap_control_tear extensions).
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
 -- 'vkGetPhysicalDeviceSurfacePresentModesKHR'
@@ -280,7 +433,6 @@
 -- device
 --
 -- = Description
--- #_description#
 --
 -- These values are described as follows:
 --
@@ -309,7 +461,6 @@
 --     default will be used.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCompositeAlphaFlagsKHR',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
@@ -357,7 +508,6 @@
 -- device
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplaySurfaceCreateInfoKHR',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
@@ -467,7 +617,6 @@
 -- | VkSurfaceKHR - Opaque handle to a surface object
 --
 -- = Description
--- #_description#
 --
 -- The @VK_KHR_surface@ extension declares the @VkSurfaceKHR@ object, and
 -- provides a function for destroying @VkSurfaceKHR@ objects. Separate
@@ -477,7 +626,6 @@
 -- handles of other Vulkan objects.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.VkPhysicalDeviceSurfaceInfo2KHR',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
@@ -503,7 +651,6 @@
 -- | vkDestroySurfaceKHR - Destroy a VkSurfaceKHR object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance used to create the surface.
 --
@@ -511,10 +658,10 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- = Description
--- #_description#
 --
 -- Destroying a @VkSurfaceKHR@ merely severs the connection between Vulkan
 -- and the native surface, and does not imply destroying the native
@@ -550,7 +697,6 @@
 -- -   Host access to @surface@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance', 'VkSurfaceKHR'
@@ -559,7 +705,6 @@
 -- supported
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device.
 --
@@ -570,9 +715,6 @@
 -- -   @pSupported@ is a pointer to a @VkBool32@, which is set to @VK_TRUE@
 --     to indicate support, and @VK_FALSE@ otherwise.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
@@ -592,10 +734,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -603,7 +745,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@,
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
@@ -612,7 +753,6 @@
 -- | vkGetPhysicalDeviceSurfaceCapabilitiesKHR - Query surface capabilities
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device that will be associated with
 --     the swapchain to be created, as described for
@@ -624,9 +764,6 @@
 --     'VkSurfaceCapabilitiesKHR' structure in which the capabilities are
 --     returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
@@ -641,10 +778,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -652,7 +789,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
 -- 'VkSurfaceCapabilitiesKHR', 'VkSurfaceKHR'
@@ -661,7 +797,6 @@
 -- surface
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device that will be associated with
 --     the swapchain to be created, as described for
@@ -676,7 +811,6 @@
 --     @VkSurfaceFormatKHR@ structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pSurfaceFormats@ is @NULL@, then the number of format pairs
 -- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
@@ -711,12 +845,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -724,7 +858,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
 -- 'VkSurfaceFormatKHR', 'VkSurfaceKHR'
@@ -733,7 +866,6 @@
 -- modes
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device that will be associated with
 --     the swapchain to be created, as described for
@@ -749,7 +881,6 @@
 --     modes.
 --
 -- = Description
--- #_description#
 --
 -- If @pPresentModes@ is @NULL@, then the number of presentation modes
 -- supported for the given @surface@ is returned in @pPresentModeCount@.
@@ -780,12 +911,12 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -793,7 +924,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
 -- 'VkPresentModeKHR', 'VkSurfaceKHR'
@@ -802,15 +932,21 @@
 -- surface
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
+-- Supported usage flags of a presentable image when using
+-- @VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR@ or
+-- @VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR@ presentation mode are
+-- provided by
+-- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR'::@sharedPresentSupportedUsageFlags@.
+--
+-- __Note__
+--
 -- Formulas such as min(N, @maxImageCount@) are not correct, since
 -- @maxImageCount@ /may/ be zero.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCompositeAlphaFlagsKHR',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
@@ -819,25 +955,63 @@
 -- 'VkSurfaceTransformFlagBitsKHR', 'VkSurfaceTransformFlagsKHR',
 -- 'vkGetPhysicalDeviceSurfaceCapabilitiesKHR'
 data VkSurfaceCapabilitiesKHR = VkSurfaceCapabilitiesKHR
-  { -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMinImageCount"
+  { -- | @minImageCount@ is the minimum number of images the specified device
+  -- supports for a swapchain created for the surface, and will be at least
+  -- one.
   vkMinImageCount :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMaxImageCount"
+  , -- | @maxImageCount@ is the maximum number of images the specified device
+  -- supports for a swapchain created for the surface, and will be either 0,
+  -- or greater than or equal to @minImageCount@. A value of 0 means that
+  -- there is no limit on the number of images, though there /may/ be limits
+  -- related to the total amount of memory used by presentable images.
   vkMaxImageCount :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkCurrentExtent"
+  , -- | @currentExtent@ is the current width and height of the surface, or the
+  -- special value (0xFFFFFFFF, 0xFFFFFFFF) indicating that the surface size
+  -- will be determined by the extent of a swapchain targeting the surface.
   vkCurrentExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMinImageExtent"
+  , -- | @minImageExtent@ contains the smallest valid swapchain extent for the
+  -- surface on the specified device. The @width@ and @height@ of the extent
+  -- will each be less than or equal to the corresponding @width@ and
+  -- @height@ of @currentExtent@, unless @currentExtent@ has the special
+  -- value described above.
   vkMinImageExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMaxImageExtent"
+  , -- | @maxImageExtent@ contains the largest valid swapchain extent for the
+  -- surface on the specified device. The @width@ and @height@ of the extent
+  -- will each be greater than or equal to the corresponding @width@ and
+  -- @height@ of @minImageExtent@. The @width@ and @height@ of the extent
+  -- will each be greater than or equal to the corresponding @width@ and
+  -- @height@ of @currentExtent@, unless @currentExtent@ has the special
+  -- value described above.
   vkMaxImageExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMaxImageArrayLayers"
+  , -- | @maxImageArrayLayers@ is the maximum number of layers presentable images
+  -- /can/ have for a swapchain created for this device and surface, and will
+  -- be at least one.
   vkMaxImageArrayLayers :: Word32
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkSupportedTransforms"
+  , -- | @supportedTransforms@ is a bitmask of 'VkSurfaceTransformFlagBitsKHR'
+  -- indicating the presentation transforms supported for the surface on the
+  -- specified device. At least one bit will be set.
   vkSupportedTransforms :: VkSurfaceTransformFlagsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkCurrentTransform"
+  , -- | @currentTransform@ is 'VkSurfaceTransformFlagBitsKHR' value indicating
+  -- the surface’s current transform relative to the presentation engine’s
+  -- natural orientation.
   vkCurrentTransform :: VkSurfaceTransformFlagBitsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkSupportedCompositeAlpha"
+  , -- | @supportedCompositeAlpha@ is a bitmask of 'VkCompositeAlphaFlagBitsKHR',
+  -- representing the alpha compositing modes supported by the presentation
+  -- engine for the surface on the specified device, and at least one bit
+  -- will be set. Opaque composition /can/ be achieved in any alpha
+  -- compositing mode by either using an image format that has no alpha
+  -- component, or by ensuring that all pixels in the presentable images have
+  -- an alpha value of 1.0.
   vkSupportedCompositeAlpha :: VkCompositeAlphaFlagsKHR
-  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkSupportedUsageFlags"
+  , -- | @supportedUsageFlags@ is a bitmask of
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+  -- representing the ways the application /can/ use the presentable images
+  -- of a swapchain created with 'VkPresentModeKHR' set to
+  -- @VK_PRESENT_MODE_IMMEDIATE_KHR@, @VK_PRESENT_MODE_MAILBOX_KHR@,
+  -- @VK_PRESENT_MODE_FIFO_KHR@ or @VK_PRESENT_MODE_FIFO_RELAXED_KHR@ for the
+  -- surface on the specified device. @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@
+  -- /must/ be included in the set but implementations /may/ support
+  -- additional usages.
   vkSupportedUsageFlags :: VkImageUsageFlags
   }
   deriving (Eq, Show)
@@ -868,19 +1042,17 @@
 -- | VkSurfaceFormatKHR - Structure describing a supported swapchain
 -- format-color space pair
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkColorSpaceKHR', 'Graphics.Vulkan.Core10.Core.VkFormat',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.VkSurfaceFormat2KHR',
 -- 'vkGetPhysicalDeviceSurfaceFormatsKHR'
 data VkSurfaceFormatKHR = VkSurfaceFormatKHR
-  { -- No documentation found for Nested "VkSurfaceFormatKHR" "vkFormat"
+  { -- | @format@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' that is compatible
+  -- with the specified surface.
   vkFormat :: VkFormat
-  , -- No documentation found for Nested "VkSurfaceFormatKHR" "vkColorSpace"
+  , -- | @colorSpace@ is a presentation 'VkColorSpaceKHR' that is compatible with
+  -- the surface.
   vkColorSpace :: VkColorSpaceKHR
   }
   deriving (Eq, Show)
@@ -895,13 +1067,11 @@
 -- | VkCompositeAlphaFlagsKHR - Bitmask of VkCompositeAlphaFlagBitsKHR
 --
 -- = Description
--- #_description#
 --
 -- @VkCompositeAlphaFlagsKHR@ is a bitmask type for setting a mask of zero
 -- or more 'VkCompositeAlphaFlagBitsKHR'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkCompositeAlphaFlagBitsKHR',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
@@ -910,13 +1080,11 @@
 -- | VkSurfaceTransformFlagsKHR - Bitmask of VkSurfaceTransformFlagBitsKHR
 --
 -- = Description
--- #_description#
 --
 -- @VkSurfaceTransformFlagsKHR@ is a bitmask type for setting a mask of
 -- zero or more 'VkSurfaceTransformFlagBitsKHR'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPropertiesKHR',
 -- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs
@@ -143,11 +143,7 @@
 
 -- | VkSwapchainCreateFlagBitsKHR - Bitmask controlling swapchain creation
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkSwapchainCreateFlagsKHR'
 newtype VkSwapchainCreateFlagBitsKHR = VkSwapchainCreateFlagBitsKHR VkFlags
@@ -179,7 +175,6 @@
 -- device group present modes
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceGroupPresentInfoKHR', 'VkDeviceGroupPresentModeFlagsKHR'
 newtype VkDeviceGroupPresentModeFlagBitsKHR = VkDeviceGroupPresentModeFlagBitsKHR VkFlags
@@ -264,7 +259,10 @@
 -- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SWAPCHAIN_KHR"
 pattern VK_OBJECT_TYPE_SWAPCHAIN_KHR :: VkObjectType
 pattern VK_OBJECT_TYPE_SWAPCHAIN_KHR = VkObjectType 1000001000
--- No documentation found for Nested "VkSwapchainCreateFlagBitsKHR" "VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"
+-- | @VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR@ specifies that
+-- images created from the swapchain (i.e. with the @swapchain@ member of
+-- 'VkImageSwapchainCreateInfoKHR' set to this swapchain’s handle) /must/
+-- use @VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT@.
 pattern VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR :: VkSwapchainCreateFlagBitsKHR
 pattern VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VkSwapchainCreateFlagBitsKHR 0x00000001
 -- No documentation found for Nested "VkSwapchainCreateFlagBitsKHR" "VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"
@@ -281,7 +279,6 @@
 -- | VkSwapchainKHR - Opaque handle to a swapchain object
 --
 -- = Description
--- #_description#
 --
 -- A swapchain is an abstraction for an array of presentable images that
 -- are associated with a surface. The presentable images are represented by
@@ -333,7 +330,6 @@
 -- the swapchain at initialization time, rather than in its main loop.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAcquireNextImageInfoKHR', 'VkBindImageMemorySwapchainInfoKHR',
 -- 'VkImageSwapchainCreateInfoKHR', 'VkPresentInfoKHR',
@@ -350,7 +346,6 @@
 -- | vkCreateSwapchainKHR - Create a swapchain
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device to create the swapchain for.
 --
@@ -360,14 +355,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     swapchain object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSwapchain@ is a pointer to a @VkSwapchainKHR@ handle in which the
 --     created swapchain object will be returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -390,10 +383,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -405,7 +398,6 @@
 --     -   @VK_ERROR_NATIVE_WINDOW_IN_USE_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -414,7 +406,6 @@
 -- | vkDestroySwapchainKHR - Destroy a swapchain object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the @VkDevice@ associated with @swapchain@.
 --
@@ -422,10 +413,10 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     swapchain object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- = Description
--- #_description#
 --
 -- The application /must/ not destroy a swapchain until after completion of
 -- all outstanding operations on images that were acquired from the
@@ -439,6 +430,14 @@
 -- invalidate the parent @VkSurfaceKHR@, and a new swapchain /can/ be
 -- created with it.
 --
+-- When a swapchain associated with a display surface is destroyed, if the
+-- image most recently presented to the display surface is from the
+-- swapchain being destroyed, then either any display resources modified by
+-- presenting images from any swapchain associated with the display surface
+-- /must/ be reverted by the implementation to their state prior to the
+-- first present performed on one of these swapchains, or such resources
+-- /must/ be left in their current state.
+--
 -- == Valid Usage
 --
 -- -   All uses of presentable images acquired from @swapchain@ /must/ have
@@ -469,7 +468,6 @@
 -- -   Host access to @swapchain@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkSwapchainKHR'
@@ -478,7 +476,6 @@
 -- associated with a swapchain
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device associated with @swapchain@.
 --
@@ -492,7 +489,6 @@
 --     @VkImage@ handles.
 --
 -- = Description
--- #_description#
 --
 -- If @pSwapchainImages@ is @NULL@, then the number of presentable images
 -- for @swapchain@ is returned in @pSwapchainImageCount@. Otherwise,
@@ -526,18 +522,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkSwapchainKHR'
@@ -546,7 +541,6 @@
 -- presentable image
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device associated with @swapchain@.
 --
@@ -566,9 +560,6 @@
 --     of the next image to use (i.e. an index into the array of images
 --     returned by @vkGetSwapchainImagesKHR@).
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @swapchain@ /must/ not be in the retired state
@@ -631,7 +622,7 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_TIMEOUT@
@@ -640,7 +631,7 @@
 --
 --     -   @VK_SUBOPTIMAL_KHR@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -652,7 +643,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Queue.VkFence',
@@ -661,7 +651,6 @@
 -- | vkQueuePresentKHR - Queue an image for presentation
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @queue@ is a queue that is capable of presentation to the target
 --     surface’s platform on the same device as the image’s swapchain.
@@ -670,7 +659,6 @@
 --     structure specifying the parameters of the presentation.
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -685,13 +673,17 @@
 --     supported from @queue@ as determined using a call to
 --     @vkGetPhysicalDeviceSurfaceSupportKHR@
 --
+-- -   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 unsignal operation defined by the elements of the
 --     @pWaitSemaphores@ member of @pPresentInfo@ executes on @queue@, no
 --     other queue /must/ be waiting on the same semaphore.
 --
 -- -   All elements of the @pWaitSemaphores@ member of @pPresentInfo@
---     /must/ be semaphores that are signaled, or have
---     <{html_spec_relative}#synchronization-semaphores-signaling semaphore signal operations>
+--     /must/ be semaphores that are signaled, or have [semaphore signal
+--     operations](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-semaphores-signaling)
 --     previously submitted for execution.
 --
 -- Any writes to memory backing the images referenced by the
@@ -743,23 +735,23 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | -               | -               | Any             | -               |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | -                                                                                                           | -                                                                                                          | Any                                                                                                   | -                                                                                                                          |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_SUBOPTIMAL_KHR@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -771,7 +763,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPresentInfoKHR', 'Graphics.Vulkan.Core10.Queue.VkQueue'
 foreign import ccall "vkQueuePresentKHR" vkQueuePresentKHR :: ("queue" ::: VkQueue) -> ("pPresentInfo" ::: Ptr VkPresentInfoKHR) -> IO VkResult
@@ -779,7 +770,6 @@
 -- other physical devices
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device.
 --
@@ -787,9 +777,6 @@
 --     type 'VkDeviceGroupPresentCapabilitiesKHR' that is filled with the
 --     logical device’s capabilities.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -799,16 +786,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkDeviceGroupPresentCapabilitiesKHR'
@@ -817,7 +803,6 @@
 -- a surface
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device.
 --
@@ -828,7 +813,6 @@
 --     device group present modes for the surface.
 --
 -- = Description
--- #_description#
 --
 -- The modes returned by this command are not invariant, and /may/ change
 -- in response to the surface being moved, resized, or occluded. These
@@ -853,10 +837,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -864,7 +848,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkDeviceGroupPresentModeFlagsKHR',
@@ -874,7 +857,6 @@
 -- presentable image
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the device associated with @swapchain@.
 --
@@ -884,9 +866,6 @@
 -- -   @pImageIndex@ is a pointer to a @uint32_t@ that is set to the index
 --     of the next image to use.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If the number of currently acquired images is greater than the
@@ -909,7 +888,7 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_TIMEOUT@
@@ -918,7 +897,7 @@
 --
 --     -   @VK_SUBOPTIMAL_KHR@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -930,7 +909,6 @@
 --     -   @VK_ERROR_SURFACE_LOST_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkAcquireNextImageInfoKHR',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
@@ -939,7 +917,6 @@
 -- surface on a physical device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device.
 --
@@ -952,7 +929,6 @@
 --     structures.
 --
 -- = Description
--- #_description#
 --
 -- If @pRects@ is @NULL@, then the number of rectangles used when
 -- presenting the given @surface@ is returned in @pRectCount@. Otherwise,
@@ -991,18 +967,17 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
 --     -   @VK_INCOMPLETE@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkRect2D',
@@ -1012,7 +987,6 @@
 -- created swapchain object
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -1116,6 +1090,11 @@
 -- has entered a state that causes @VK_ERROR_OUT_OF_DATE_KHR@ to be
 -- returned.
 --
+-- The application /can/ continue to use a shared presentable image
+-- obtained from @oldSwapchain@ until a presentable image is acquired from
+-- the new swapchain, as long as it has not entered a state that causes it
+-- to return @VK_ERROR_OUT_OF_DATE_KHR@.
+--
 -- == Valid Usage
 --
 -- -   @surface@ /must/ be a surface that is supported by the device as
@@ -1131,6 +1110,10 @@
 --     structure returned by @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@
 --     for the surface if the returned @maxImageCount@ is not zero
 --
+-- -   @minImageCount@ /must/ be @1@ if @presentMode@ is either
+--     @VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR@ or
+--     @VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR@
+--
 -- -   @imageFormat@ and @imageColorSpace@ /must/ match the @format@ and
 --     @colorSpace@ members, respectively, of one of the
 --     @VkSurfaceFormatKHR@ structures returned by
@@ -1149,11 +1132,25 @@
 --     @VkSurfaceCapabilitiesKHR@ structure returned by
 --     @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@ for the surface
 --
--- -   @imageUsage@ /must/ be a subset of the supported usage flags present
---     in the @supportedUsageFlags@ member of the
---     @VkSurfaceCapabilitiesKHR@ structure returned by
---     @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@ for the surface
+-- -   If @presentMode@ is @VK_PRESENT_MODE_IMMEDIATE_KHR@,
+--     @VK_PRESENT_MODE_MAILBOX_KHR@, @VK_PRESENT_MODE_FIFO_KHR@ or
+--     @VK_PRESENT_MODE_FIFO_RELAXED_KHR@, @imageUsage@ /must/ be a subset
+--     of the supported usage flags present in the @supportedUsageFlags@
+--     member of the
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR'
+--     structure returned by
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR'
+--     for @surface@
 --
+-- -   If @presentMode@ is @VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR@ or
+--     @VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR@, @imageUsage@ /must/
+--     be a subset of the supported usage flags present in the
+--     @sharedPresentSupportedUsageFlags@ member of the
+--     'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR'
+--     structure returned by
+--     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceCapabilities2KHR'
+--     for @surface@
+--
 -- -   If @imageSharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
 --     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
 --     @queueFamilyIndexCount@ @uint32_t@ values
@@ -1163,8 +1160,10 @@
 --
 -- -   If @imageSharingMode@ is @VK_SHARING_MODE_CONCURRENT@, each element
 --     of @pQueueFamilyIndices@ /must/ be unique and /must/ be less than
---     @pQueueFamilyPropertyCount@ returned by
+--     @pQueueFamilyPropertyCount@ returned by either
 --     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.vkGetPhysicalDeviceQueueFamilyProperties2'
 --     for the @physicalDevice@ that was used to create @device@
 --
 -- -   @preTransform@ /must/ be one of the bits present in the
@@ -1182,6 +1181,11 @@
 --     returned by @vkGetPhysicalDeviceSurfacePresentModesKHR@ for the
 --     surface
 --
+-- -   If the logical device was created with
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkDeviceGroupDeviceCreateInfo'::@physicalDeviceCount@
+--     equal to 1, @flags@ /must/ not contain
+--     @VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR@
+--
 -- -   @oldSwapchain@ /must/ not be in the retired state
 --
 -- -   @imageFormat@, @imageUsage@, @imageExtent@, and @imageArrayLayers@
@@ -1243,7 +1247,6 @@
 --     @VkInstance@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkColorSpaceKHR',
 -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkCompositeAlphaFlagBitsKHR',
@@ -1259,41 +1262,52 @@
 -- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR',
 -- 'vkCreateSwapchainKHR'
 data VkSwapchainCreateInfoKHR = VkSwapchainCreateInfoKHR
-  { -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkSwapchainCreateFlagBitsKHR' indicating
+  -- parameters of the swapchain creation.
   vkFlags :: VkSwapchainCreateFlagsKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkSurface"
+  , -- | @surface@ is the surface onto which the swapchain will present images.
+  -- If the creation succeeds, the swapchain becomes associated with
+  -- @surface@.
   vkSurface :: VkSurfaceKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkMinImageCount"
+  , -- | @minImageCount@ is the minimum number of presentable images that the
+  -- application needs. The implementation will either create the swapchain
+  -- with at least that many images, or it will fail to create the swapchain.
   vkMinImageCount :: Word32
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageFormat"
+  , -- | @imageFormat@ is a 'Graphics.Vulkan.Core10.Core.VkFormat' value
+  -- specifying the format the swapchain image(s) will be created with.
   vkImageFormat :: VkFormat
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageColorSpace"
+  , -- | @imageColorSpace@ is a
+  -- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkColorSpaceKHR' value
+  -- specifying the way the swapchain interprets image data.
   vkImageColorSpace :: VkColorSpaceKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageExtent"
+  , -- | @imageExtent@ is the size (in pixels) of the swapchain image(s). The
+  -- behavior is platform-dependent if the image extent does not match the
+  -- surface’s @currentExtent@ as returned by
+  -- @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@.
   vkImageExtent :: VkExtent2D
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageArrayLayers"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageArrayLayers"
   vkImageArrayLayers :: Word32
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageUsage"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageUsage"
   vkImageUsage :: VkImageUsageFlags
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageSharingMode"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "imageSharingMode"
   vkImageSharingMode :: VkSharingMode
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkQueueFamilyIndexCount"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "queueFamilyIndexCount"
   vkQueueFamilyIndexCount :: Word32
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPQueueFamilyIndices"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "pQueueFamilyIndices"
   vkPQueueFamilyIndices :: Ptr Word32
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPreTransform"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "preTransform"
   vkPreTransform :: VkSurfaceTransformFlagBitsKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkCompositeAlpha"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "compositeAlpha"
   vkCompositeAlpha :: VkCompositeAlphaFlagBitsKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPresentMode"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "presentMode"
   vkPresentMode :: VkPresentModeKHR
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkClipped"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "clipped"
   vkClipped :: VkBool32
-  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkOldSwapchain"
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "oldSwapchain"
   vkOldSwapchain :: VkSwapchainKHR
   }
   deriving (Eq, Show)
@@ -1341,17 +1355,19 @@
 -- presentation
 --
 -- = Description
--- #_description#
 --
 -- Before an application /can/ present an image, the image’s layout /must/
--- be transitioned to the @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@ layout.
+-- be transitioned to the @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@ layout, or for
+-- a shared presentable image the @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@
+-- layout.
 --
 -- __Note__
 --
--- When transitioning the image to @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@, there
--- is no need to delay subsequent processing, or perform any visibility
--- operations (as 'vkQueuePresentKHR' performs automatic visibility
--- operations). To achieve this, the @dstAccessMask@ member of the
+-- When transitioning the image to @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@ or
+-- @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@, there is no need to delay subsequent
+-- processing, or perform any visibility operations (as 'vkQueuePresentKHR'
+-- performs automatic visibility operations). To achieve this, the
+-- @dstAccessMask@ member of the
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier'
 -- /should/ be set to @0@, and the @dstStageMask@ parameter /should/ be set
 -- to @VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT@.
@@ -1361,8 +1377,9 @@
 -- -   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 @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@
---     layout at the time the operation is executed on a @VkDevice@
+--     subresource /must/ be in the @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@ or
+--     @VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR@ layout at the time the
+--     operation is executed on a @VkDevice@
 --
 -- == Valid Usage (Implicit)
 --
@@ -1399,28 +1416,41 @@
 --     allocated, or retrieved from the same @VkInstance@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkResult',
 -- 'Graphics.Vulkan.Core10.Queue.VkSemaphore',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkSwapchainKHR',
 -- 'vkQueuePresentKHR'
 data VkPresentInfoKHR = VkPresentInfoKHR
-  { -- No documentation found for Nested "VkPresentInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPresentInfoKHR" "vkWaitSemaphoreCount"
+  , -- | @waitSemaphoreCount@ is the number of semaphores to wait for before
+  -- issuing the present request. The number /may/ be zero.
   vkWaitSemaphoreCount :: Word32
-  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPWaitSemaphores"
+  , -- | @pWaitSemaphores@, if not @NULL@, is an array of @VkSemaphore@ objects
+  -- with @waitSemaphoreCount@ entries, and specifies the semaphores to wait
+  -- for before issuing the present request.
   vkPWaitSemaphores :: Ptr VkSemaphore
-  , -- No documentation found for Nested "VkPresentInfoKHR" "vkSwapchainCount"
+  , -- | @swapchainCount@ is the number of swapchains being presented to by this
+  -- command.
   vkSwapchainCount :: Word32
-  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPSwapchains"
+  , -- | @pSwapchains@ is an array of @VkSwapchainKHR@ objects with
+  -- @swapchainCount@ entries. A given swapchain /must/ not appear in this
+  -- list more than once.
   vkPSwapchains :: Ptr VkSwapchainKHR
-  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPImageIndices"
+  , -- | @pImageIndices@ is an array of indices into the array of each
+  -- swapchain’s presentable images, with @swapchainCount@ entries. Each
+  -- entry in this array identifies the image to present on the corresponding
+  -- entry in the @pSwapchains@ array.
   vkPImageIndices :: Ptr Word32
-  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPResults"
+  , -- | @pResults@ is an array of 'Graphics.Vulkan.Core10.Core.VkResult' typed
+  -- elements with @swapchainCount@ entries. Applications that do not need
+  -- per-swapchain results /can/ use @NULL@ for @pResults@. If non-@NULL@,
+  -- each entry in @pResults@ will be set to the
+  -- 'Graphics.Vulkan.Core10.Core.VkResult' for presenting the swapchain
+  -- corresponding to the same index in @pSwapchains@.
   vkPResults :: Ptr VkResult
   }
   deriving (Eq, Show)
@@ -1448,7 +1478,6 @@
 -- physical devices
 --
 -- = Description
--- #_description#
 --
 -- @modes@ always has @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@ set.
 --
@@ -1466,19 +1495,23 @@
 -- -   @pNext@ /must/ be @NULL@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceGroupPresentModeFlagsKHR',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetDeviceGroupPresentCapabilitiesKHR'
 data VkDeviceGroupPresentCapabilitiesKHR = VkDeviceGroupPresentCapabilitiesKHR
-  { -- No documentation found for Nested "VkDeviceGroupPresentCapabilitiesKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupPresentCapabilitiesKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupPresentCapabilitiesKHR" "vkPresentMask"
+  , -- | @presentMask@ is an array of masks, where the mask at element i is
+  -- non-zero if physical device i has a presentation engine, and where bit j
+  -- is set in element i if physical device i /can/ present swapchain images
+  -- from physical device j. If element i is non-zero, then bit i /must/ be
+  -- set.
   vkPresentMask :: Vector VK_MAX_DEVICE_GROUP_SIZE Word32
-  , -- No documentation found for Nested "VkDeviceGroupPresentCapabilitiesKHR" "vkModes"
+  , -- | @modes@ is a bitmask of 'VkDeviceGroupPresentModeFlagBitsKHR' indicating
+  -- which device group presentation modes are supported.
   vkModes :: VkDeviceGroupPresentModeFlagsKHR
   }
   deriving (Eq, Show)
@@ -1497,15 +1530,13 @@
 -- | VkImageSwapchainCreateInfoKHR - Specify that an image will be bound to
 -- swapchain memory
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If @swapchain@ is not
 --     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', the fields of
 --     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' /must/ match the
---     <{html_spec_relative}#swapchain-wsi-image-create-info implied image creation parameters>
+--     [implied image creation
+--     parameters](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#swapchain-wsi-image-create-info)
 --     of the swapchain
 --
 -- == Valid Usage (Implicit)
@@ -1518,15 +1549,15 @@
 --     /must/ be a valid @VkSwapchainKHR@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkSwapchainKHR'
 data VkImageSwapchainCreateInfoKHR = VkImageSwapchainCreateInfoKHR
-  { -- No documentation found for Nested "VkImageSwapchainCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImageSwapchainCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImageSwapchainCreateInfoKHR" "vkSwapchain"
+  , -- | @swapchain@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or a
+  -- handle of a swapchain that the image will be bound to.
   vkSwapchain :: VkSwapchainKHR
   }
   deriving (Eq, Show)
@@ -1544,7 +1575,6 @@
 -- memory to bind to
 --
 -- = Description
--- #_description#
 --
 -- If @swapchain@ is not @NULL@, the @swapchain@ and @imageIndex@ are used
 -- to determine the memory that the image is bound to, instead of @memory@
@@ -1570,17 +1600,17 @@
 -- -   Host access to @swapchain@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkSwapchainKHR'
 data VkBindImageMemorySwapchainInfoKHR = VkBindImageMemorySwapchainInfoKHR
-  { -- No documentation found for Nested "VkBindImageMemorySwapchainInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkBindImageMemorySwapchainInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkBindImageMemorySwapchainInfoKHR" "vkSwapchain"
+  , -- | @swapchain@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or a
+  -- swapchain handle.
   vkSwapchain :: VkSwapchainKHR
-  , -- No documentation found for Nested "VkBindImageMemorySwapchainInfoKHR" "vkImageIndex"
+  , -- | @imageIndex@ is an image index within @swapchain@.
   vkImageIndex :: Word32
   }
   deriving (Eq, Show)
@@ -1600,7 +1630,6 @@
 -- acquire
 --
 -- = Description
--- #_description#
 --
 -- If 'vkAcquireNextImageKHR' is used, the device mask is considered to
 -- include all physical devices in the logical device.
@@ -1671,26 +1700,27 @@
 -- -   Host access to @fence@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkFence',
 -- 'Graphics.Vulkan.Core10.Queue.VkSemaphore',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkSwapchainKHR',
 -- 'vkAcquireNextImage2KHR'
 data VkAcquireNextImageInfoKHR = VkAcquireNextImageInfoKHR
-  { -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkSwapchain"
+  , -- | @swapchain@ is a non-retired swapchain from which an image is acquired.
   vkSwapchain :: VkSwapchainKHR
-  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkTimeout"
+  , -- | @timeout@ specifies how long the function waits, in nanoseconds, if no
+  -- image is available.
   vkTimeout :: Word64
-  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkSemaphore"
+  , -- | @semaphore@ is @VK_NULL_HANDLE@ or a semaphore to signal.
   vkSemaphore :: VkSemaphore
-  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkFence"
+  , -- | @fence@ is @VK_NULL_HANDLE@ or a fence to signal.
   vkFence :: VkFence
-  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkDeviceMask"
+  , -- | @deviceMask@ is a mask of physical devices for which the swapchain image
+  -- will be ready to use when the semaphore or fence is signaled.
   vkDeviceMask :: Word32
   }
   deriving (Eq, Show)
@@ -1716,7 +1746,6 @@
 -- devices\' images are presented
 --
 -- = Description
--- #_description#
 --
 -- If @mode@ is @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@, then each
 -- element of @pDeviceMasks@ selects which instance of the swapchain image
@@ -1794,20 +1823,21 @@
 -- -   @mode@ /must/ be a valid 'VkDeviceGroupPresentModeFlagBitsKHR' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceGroupPresentModeFlagBitsKHR',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceGroupPresentInfoKHR = VkDeviceGroupPresentInfoKHR
-  { -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkSwapchainCount"
+  , -- | @swapchainCount@ is zero or the number of elements in @pDeviceMasks@.
   vkSwapchainCount :: Word32
-  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkPDeviceMasks"
+  , -- | @pDeviceMasks@ is an array of device masks, one for each element of
+  -- 'VkPresentInfoKHR'::pSwapchains.
   vkPDeviceMasks :: Ptr Word32
-  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkMode"
+  , -- | @mode@ is the device group present mode that will be used for this
+  -- present.
   vkMode :: VkDeviceGroupPresentModeFlagBitsKHR
   }
   deriving (Eq, Show)
@@ -1829,7 +1859,6 @@
 -- a newly created swapchain object
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not present, @modes@ is considered to be
 -- @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@.
@@ -1845,16 +1874,15 @@
 -- -   @modes@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceGroupPresentModeFlagsKHR',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDeviceGroupSwapchainCreateInfoKHR = VkDeviceGroupSwapchainCreateInfoKHR
-  { -- No documentation found for Nested "VkDeviceGroupSwapchainCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGroupSwapchainCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGroupSwapchainCreateInfoKHR" "vkModes"
+  , -- | @modes@ is a bitfield of modes that the swapchain /can/ be used with.
   vkModes :: VkDeviceGroupPresentModeFlagsKHR
   }
   deriving (Eq, Show)
@@ -1871,13 +1899,11 @@
 -- | VkSwapchainCreateFlagsKHR - Bitmask of VkSwapchainCreateFlagBitsKHR
 --
 -- = Description
--- #_description#
 --
 -- @VkSwapchainCreateFlagsKHR@ is a bitmask type for setting a mask of zero
 -- or more 'VkSwapchainCreateFlagBitsKHR'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkSwapchainCreateFlagBitsKHR', 'VkSwapchainCreateInfoKHR'
 type VkSwapchainCreateFlagsKHR = VkSwapchainCreateFlagBitsKHR
@@ -1885,13 +1911,11 @@
 -- VkDeviceGroupPresentModeFlagBitsKHR
 --
 -- = Description
--- #_description#
 --
 -- @VkDeviceGroupPresentModeFlagsKHR@ is a bitmask type for setting a mask
 -- of zero or more 'VkDeviceGroupPresentModeFlagBitsKHR'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceGroupPresentCapabilitiesKHR',
 -- 'VkDeviceGroupPresentModeFlagBitsKHR',
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs
@@ -113,7 +113,6 @@
 -- Wayland window
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance to associate the surface with.
 --
@@ -123,14 +122,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -145,16 +142,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
@@ -165,7 +161,6 @@
 -- for presentation to Wayland
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device.
 --
@@ -175,7 +170,6 @@
 --     compositor.
 --
 -- = Description
--- #_description#
 --
 -- This platform-specific function /can/ be called prior to creating a
 -- surface.
@@ -193,16 +187,12 @@
 -- -   @display@ /must/ be a valid pointer to a @wl_display@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkGetPhysicalDeviceWaylandPresentationSupportKHR" vkGetPhysicalDeviceWaylandPresentationSupportKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("queueFamilyIndex" ::: Word32) -> ("display" ::: Ptr Wl_display) -> IO VkBool32
 -- | VkWaylandSurfaceCreateInfoKHR - Structure specifying parameters of a
 -- newly created Wayland surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @display@ /must/ point to a valid Wayland @wl_display@.
@@ -219,20 +209,20 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkWaylandSurfaceCreateFlagsKHR', 'vkCreateWaylandSurfaceKHR'
 data VkWaylandSurfaceCreateInfoKHR = VkWaylandSurfaceCreateInfoKHR
-  { -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkWaylandSurfaceCreateFlagsKHR
-  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkDisplay"
+  , -- | @display@ and @surface@ are pointers to the Wayland @wl_display@ and
+  -- @wl_surface@ to associate the surface with.
   vkDisplay :: Ptr Wl_display
-  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkSurface"
+  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "surface"
   vkSurface :: Ptr Wl_surface
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
@@ -48,9 +48,6 @@
 -- | VkWin32KeyedMutexAcquireReleaseInfoKHR - Use the Windows keyed mutex
 -- mechanism to synchronize work
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   Each member of @pAcquireSyncs@ and @pReleaseSyncs@ /must/ be a
@@ -84,28 +81,37 @@
 --     allocated, or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkWin32KeyedMutexAcquireReleaseInfoKHR = VkWin32KeyedMutexAcquireReleaseInfoKHR
-  { -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkSType"
+  { -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPNext"
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkAcquireCount"
+  , -- | @acquireCount@ is the number of entries in the @pAcquireSyncs@,
+  -- @pAcquireKeys@, and @pAcquireTimeoutMilliseconds@ arrays.
   vkAcquireCount :: Word32
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPAcquireSyncs"
+  , -- | @pAcquireSyncs@ is a pointer to an array of
+  -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory' objects which were
+  -- imported from Direct3D 11 resources.
   vkPAcquireSyncs :: Ptr VkDeviceMemory
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPAcquireKeys"
+  , -- | @pAcquireKeys@ is a pointer to an array of mutex key values to wait for
+  -- prior to beginning the submitted work. Entries refer to the keyed mutex
+  -- associated with the corresponding entries in @pAcquireSyncs@.
   vkPAcquireKeys :: Ptr Word64
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPAcquireTimeouts"
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "pAcquireTimeouts"
   vkPAcquireTimeouts :: Ptr Word32
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkReleaseCount"
+  , -- | @releaseCount@ is the number of entries in the @pReleaseSyncs@ and
+  -- @pReleaseKeys@ arrays.
   vkReleaseCount :: Word32
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPReleaseSyncs"
+  , -- | @pReleaseSyncs@ is a pointer to an array of
+  -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory' objects which were
+  -- imported from Direct3D 11 resources.
   vkPReleaseSyncs :: Ptr VkDeviceMemory
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPReleaseKeys"
+  , -- | @pReleaseKeys@ is a pointer to an array of mutex key values to set when
+  -- the submitted work has completed. Entries refer to the keyed mutex
+  -- associated with the corresponding entries in @pReleaseSyncs@.
   vkPReleaseKeys :: Ptr Word64
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs
@@ -113,7 +113,6 @@
 -- Win32 native window
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance to associate the surface with.
 --
@@ -123,14 +122,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -145,16 +142,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
@@ -165,14 +161,12 @@
 -- support for presentation on a Win32 display
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device.
 --
 -- -   @queueFamilyIndex@ is the queue family index.
 --
 -- = Description
--- #_description#
 --
 -- This platform-specific function /can/ be called prior to creating a
 -- surface.
@@ -188,16 +182,12 @@
 -- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkGetPhysicalDeviceWin32PresentationSupportKHR" vkGetPhysicalDeviceWin32PresentationSupportKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("queueFamilyIndex" ::: Word32) -> IO VkBool32
 -- | VkWin32SurfaceCreateInfoKHR - Structure specifying parameters of a newly
 -- created Win32 surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @hinstance@ /must/ be a valid Win32 @HINSTANCE@.
@@ -213,20 +203,20 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkWin32SurfaceCreateFlagsKHR', 'vkCreateWin32SurfaceKHR'
 data VkWin32SurfaceCreateInfoKHR = VkWin32SurfaceCreateInfoKHR
-  { -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkWin32SurfaceCreateFlagsKHR
-  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkHinstance"
+  , -- | @hinstance@ and @hwnd@ are the Win32 @HINSTANCE@ and @HWND@ for the
+  -- window to associate the surface with.
   vkHinstance :: HINSTANCE
-  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkHwnd"
+  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "hwnd"
   vkHwnd :: HWND
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs
@@ -116,7 +116,6 @@
 -- X11 window, using the XCB client-side library
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance to associate the surface with.
 --
@@ -126,14 +125,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -148,16 +145,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
@@ -168,7 +164,6 @@
 -- presentation to X11 server using XCB
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device.
 --
@@ -178,7 +173,6 @@
 --     @visual_id@ is an X11 visual (@xcb_visualid_t@).
 --
 -- = Description
--- #_description#
 --
 -- This platform-specific function /can/ be called prior to creating a
 -- surface.
@@ -196,16 +190,12 @@
 -- -   @connection@ /must/ be a valid pointer to a @xcb_connection_t@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkGetPhysicalDeviceXcbPresentationSupportKHR" vkGetPhysicalDeviceXcbPresentationSupportKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("queueFamilyIndex" ::: Word32) -> ("connection" ::: Ptr Xcb_connection_t) -> ("visual_id" ::: Xcb_visualid_t) -> IO VkBool32
 -- | VkXcbSurfaceCreateInfoKHR - Structure specifying parameters of a newly
 -- created Xcb surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @connection@ /must/ point to a valid X11 @xcb_connection_t@.
@@ -221,20 +211,20 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkXcbSurfaceCreateFlagsKHR', 'vkCreateXcbSurfaceKHR'
 data VkXcbSurfaceCreateInfoKHR = VkXcbSurfaceCreateInfoKHR
-  { -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkXcbSurfaceCreateFlagsKHR
-  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkConnection"
+  , -- | @connection@ is a pointer to an @xcb_connection_t@ to the X server.
   vkConnection :: Ptr Xcb_connection_t
-  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkWindow"
+  , -- | @window@ is the @xcb_window_t@ for the X11 window to associate the
+  -- surface with.
   vkWindow :: Xcb_window_t
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs
@@ -117,7 +117,6 @@
 -- X11 window, using the Xlib client-side library
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance to associate the surface with.
 --
@@ -127,14 +126,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -149,16 +146,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
@@ -169,7 +165,6 @@
 -- for presentation to X11 server using Xlib
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device.
 --
@@ -180,7 +175,6 @@
 -- -   @visualId@ is an X11 visual (@VisualID@).
 --
 -- = Description
--- #_description#
 --
 -- This platform-specific function /can/ be called prior to creating a
 -- surface.
@@ -198,16 +192,12 @@
 -- -   @dpy@ /must/ be a valid pointer to a @Display@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
 foreign import ccall "vkGetPhysicalDeviceXlibPresentationSupportKHR" vkGetPhysicalDeviceXlibPresentationSupportKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("queueFamilyIndex" ::: Word32) -> ("dpy" ::: Ptr Display) -> ("visualID" ::: VisualID) -> IO VkBool32
 -- | VkXlibSurfaceCreateInfoKHR - Structure specifying parameters of a newly
 -- created Xlib surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @dpy@ /must/ point to a valid Xlib @Display@.
@@ -223,20 +213,19 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkXlibSurfaceCreateFlagsKHR', 'vkCreateXlibSurfaceKHR'
 data VkXlibSurfaceCreateInfoKHR = VkXlibSurfaceCreateInfoKHR
-  { -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkXlibSurfaceCreateFlagsKHR
-  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkDpy"
+  , -- | @dpy@ is a pointer to an Xlib @Display@ connection to the X server.
   vkDpy :: Ptr Display
-  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkWindow"
+  , -- | @window@ is an Xlib @Window@ to associate the surface with.
   vkWindow :: Window
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs b/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs
@@ -99,7 +99,6 @@
 -- | vkCreateIOSSurfaceMVK - Create a VkSurfaceKHR object for an iOS UIView
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance with which to associate the surface.
 --
@@ -109,14 +108,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -131,10 +128,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -142,7 +139,6 @@
 --     -   @VK_ERROR_NATIVE_WINDOW_IN_USE_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'VkIOSSurfaceCreateInfoMVK',
@@ -152,9 +148,6 @@
 -- | VkIOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
 -- created iOS surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @pView@ /must/ be a valid @UIView@ and /must/ be backed by a
@@ -169,18 +162,19 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkIOSSurfaceCreateFlagsMVK',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateIOSSurfaceMVK'
 data VkIOSSurfaceCreateInfoMVK = VkIOSSurfaceCreateInfoMVK
-  { -- No documentation found for Nested "VkIOSSurfaceCreateInfoMVK" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkIOSSurfaceCreateInfoMVK" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkIOSSurfaceCreateInfoMVK" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkIOSSurfaceCreateFlagsMVK
-  , -- No documentation found for Nested "VkIOSSurfaceCreateInfoMVK" "vkPView"
+  , -- | @pView@ is a reference to a @UIView@ object which will display this
+  -- surface. This @UIView@ /must/ be backed by a @CALayer@ instance of type
+  -- @CAMetalLayer@.
   vkPView :: Ptr ()
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs b/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs
@@ -100,7 +100,6 @@
 -- NSView
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance with which to associate the surface.
 --
@@ -110,14 +109,12 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @instance@ /must/ be a valid @VkInstance@ handle
@@ -132,10 +129,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -143,7 +140,6 @@
 --     -   @VK_ERROR_NATIVE_WINDOW_IN_USE_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
@@ -153,9 +149,6 @@
 -- | VkMacOSSurfaceCreateInfoMVK - Structure specifying parameters of a newly
 -- created macOS surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @pView@ /must/ be a valid @NSView@ and /must/ be backed by a
@@ -170,18 +163,19 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkMacOSSurfaceCreateFlagsMVK',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateMacOSSurfaceMVK'
 data VkMacOSSurfaceCreateInfoMVK = VkMacOSSurfaceCreateInfoMVK
-  { -- No documentation found for Nested "VkMacOSSurfaceCreateInfoMVK" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkMacOSSurfaceCreateInfoMVK" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkMacOSSurfaceCreateInfoMVK" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkMacOSSurfaceCreateFlagsMVK
-  , -- No documentation found for Nested "VkMacOSSurfaceCreateInfoMVK" "vkPView"
+  , -- | @pView@ is a reference to a @NSView@ object which will display this
+  -- surface. This @NSView@ /must/ be backed by a @CALayer@ instance of type
+  -- @CAMetalLayer@.
   vkPView :: Ptr ()
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs b/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs
@@ -101,7 +101,6 @@
 -- layer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @instance@ is the instance with which to associate the surface.
 --
@@ -111,13 +110,13 @@
 --
 -- -   @pAllocator@ is the allocator used for host memory allocated for the
 --     surface object when there is no more specific allocator available
---     (see <{html_spec_relative}#memory-allocation Memory Allocation>).
+--     (see [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)).
 --
 -- -   @pSurface@ points to a @VkSurfaceKHR@ handle in which the created
 --     surface object is returned.
 --
 -- = Description
--- #_description#
 --
 -- During the lifetime of a surface created using a particular
 -- @nn@::@vi@::@NativeWindowHandle@ any attempts to create another surface
@@ -144,10 +143,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -155,7 +154,6 @@
 --     -   @VK_ERROR_NATIVE_WINDOW_IN_USE_KHR@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
@@ -165,9 +163,6 @@
 -- | VkViSurfaceCreateInfoNN - Structure specifying parameters of a newly
 -- created VI surface object
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @window@ /must/ be a valid @nn@::@vi@::@NativeWindowHandle@
@@ -181,18 +176,18 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkViSurfaceCreateFlagsNN', 'vkCreateViSurfaceNN'
 data VkViSurfaceCreateInfoNN = VkViSurfaceCreateInfoNN
-  { -- No documentation found for Nested "VkViSurfaceCreateInfoNN" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkViSurfaceCreateInfoNN" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkViSurfaceCreateInfoNN" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkViSurfaceCreateFlagsNN
-  , -- No documentation found for Nested "VkViSurfaceCreateInfoNN" "vkWindow"
+  , -- | @window@ is the @nn@::@vi@::@NativeWindowHandle@ for the
+  -- @nn@::@vi@::@Layer@ with which to associate the surface.
   vkWindow :: Ptr ()
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NVX_device_generated_commands.hs b/src/Graphics/Vulkan/Extensions/VK_NVX_device_generated_commands.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NVX_device_generated_commands.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NVX_device_generated_commands.hs
@@ -159,39 +159,32 @@
 -- | VkIndirectCommandsTokenTypeNVX - Enum specifying
 --
 -- = Description
--- #_description#
 --
--- > +-----------------------------------------------+----------------------+
--- > | Token type                                    | Equivalent command   |
--- > +===============================================+======================+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX | @vkCmdBindPipeline@  |
--- > | @                                             |                      |
--- > +-----------------------------------------------+----------------------+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_S | @vkCmdBindDescriptor |
--- > | ET_NVX@                                       | Sets@                |
--- > +-----------------------------------------------+----------------------+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER | @vkCmdBindIndexBuffe |
--- > | _NVX@                                         | r@                   |
--- > +-----------------------------------------------+----------------------+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFE | @vkCmdBindVertexBuff |
--- > | R_NVX@                                        | ers@                 |
--- > +-----------------------------------------------+----------------------+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTAN | @vkCmdPushConstants@ |
--- > | T_NVX@                                        |                      |
--- > +-----------------------------------------------+----------------------+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED | @vkCmdDrawIndexedInd |
--- > | _NVX@                                         | irect@               |
--- > +-----------------------------------------------+----------------------+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX@    | @vkCmdDrawIndirect@  |
--- > +-----------------------------------------------+----------------------+
--- > | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX | @vkCmdDispatchIndire |
--- > | @                                             | ct@                  |
--- > +-----------------------------------------------+----------------------+
--- >
--- > Supported indirect command tokens
+-- \'
 --
+-- +------------------------------------------------------+----------------------------+
+-- | Token type                                           | Equivalent command         |
+-- +======================================================+============================+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX@       | @vkCmdBindPipeline@        |
+-- +------------------------------------------------------+----------------------------+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX@ | @vkCmdBindDescriptorSets@  |
+-- +------------------------------------------------------+----------------------------+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX@   | @vkCmdBindIndexBuffer@     |
+-- +------------------------------------------------------+----------------------------+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX@  | @vkCmdBindVertexBuffers@   |
+-- +------------------------------------------------------+----------------------------+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX@  | @vkCmdPushConstants@       |
+-- +------------------------------------------------------+----------------------------+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX@   | @vkCmdDrawIndexedIndirect@ |
+-- +------------------------------------------------------+----------------------------+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX@           | @vkCmdDrawIndirect@        |
+-- +------------------------------------------------------+----------------------------+
+-- | @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX@       | @vkCmdDispatchIndirect@    |
+-- +------------------------------------------------------+----------------------------+
+--
+-- Supported indirect command tokens
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkIndirectCommandsLayoutTokenNVX', 'VkIndirectCommandsTokenNVX'
 newtype VkIndirectCommandsTokenTypeNVX = VkIndirectCommandsTokenTypeNVX Int32
@@ -261,7 +254,6 @@
 -- | VkObjectEntryTypeNVX - Enum specifying object table entry type
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkObjectTableCreateInfoNVX', 'VkObjectTableDescriptorSetEntryNVX',
 -- 'VkObjectTableEntryNVX', 'VkObjectTableIndexBufferEntryNVX',
@@ -323,7 +315,6 @@
 -- usage of a indirect commands layout
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkIndirectCommandsLayoutUsageFlagsNVX'
 newtype VkIndirectCommandsLayoutUsageFlagBitsNVX = VkIndirectCommandsLayoutUsageFlagBitsNVX VkFlags
@@ -380,7 +371,6 @@
 -- object entry
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkObjectEntryUsageFlagsNVX'
 newtype VkObjectEntryUsageFlagBitsNVX = VkObjectEntryUsageFlagBitsNVX VkFlags
@@ -454,11 +444,7 @@
 data VkObjectTableNVX_T
 -- | VkObjectTableNVX - Opaque handle to an object table
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkCmdProcessCommandsInfoNVX', 'VkCmdReserveSpaceForCommandsInfoNVX',
 -- 'vkCreateObjectTableNVX', 'vkDestroyObjectTableNVX',
@@ -469,11 +455,7 @@
 -- | VkIndirectCommandsLayoutNVX - Opaque handle to an indirect commands
 -- layout object
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkCmdProcessCommandsInfoNVX', 'VkCmdReserveSpaceForCommandsInfoNVX',
 -- 'vkCreateIndirectCommandsLayoutNVX',
@@ -483,7 +465,6 @@
 -- device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the primary command buffer in which the
 --     generation process takes space.
@@ -492,9 +473,6 @@
 --     'VkCmdProcessCommandsInfoNVX' structure containing parameters
 --     affecting the processing of commands.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
@@ -502,8 +480,8 @@
 -- -   @pProcessCommandsInfo@ /must/ be a valid pointer to a valid
 --     @VkCmdProcessCommandsInfoNVX@ structure
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -519,18 +497,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Inside          | Graphics        |                 |
--- > | Secondary       |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Inside                                                                                                     | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkCmdProcessCommandsInfoNVX',
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
@@ -539,7 +516,6 @@
 -- buffer space
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the secondary command buffer in which the space
 --     for device-generated commands is reserved.
@@ -548,9 +524,6 @@
 --     'vkCmdReserveSpaceForCommandsNVX' structure containing parameters
 --     affecting the reservation of command buffer space.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The provided @commandBuffer@ /must/ not have had a prior space
@@ -567,8 +540,8 @@
 -- -   @pReserveSpaceInfo@ /must/ be a valid pointer to a valid
 --     @VkCmdReserveSpaceForCommandsInfoNVX@ structure
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics, or compute operations
@@ -586,18 +559,17 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Secondary       | Inside          | Graphics        |                 |
--- > |                 |                 | Compute         |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Secondary                                                                                                   | Inside                                                                                                     | Graphics                                                                                              |                                                                                                                            |
+-- |                                                                                                             |                                                                                                            | Compute                                                                                               |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'VkCmdReserveSpaceForCommandsInfoNVX',
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
@@ -606,7 +578,6 @@
 -- object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the indirect command
 --     layout.
@@ -616,14 +587,13 @@
 --     parameters affecting creation of the indirect command layout.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pIndirectCommandsLayout@ points to a @VkIndirectCommandsLayoutNVX@
 --     handle in which the resulting indirect command layout is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -639,16 +609,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -657,17 +626,15 @@
 -- | vkDestroyIndirectCommandsLayoutNVX - Destroy a object table
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the layout.
 --
 -- -   @indirectCommandsLayout@ is the table to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -694,7 +661,6 @@
 --     retrieved from @device@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -703,7 +669,6 @@
 -- | vkCreateObjectTableNVX - Create an object table
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the object table.
 --
@@ -712,14 +677,13 @@
 --     affecting creation of the table.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- -   @pObjectTable@ points to a @VkObjectTableNVX@ handle in which the
 --     resulting object table is returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @device@ /must/ be a valid @VkDevice@ handle
@@ -735,16 +699,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -753,17 +716,15 @@
 -- | vkDestroyObjectTableNVX - Destroy a object table
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that destroys the table.
 --
 -- -   @objectTable@ is the table to destroy.
 --
 -- -   @pAllocator@ controls host memory allocation as described in the
---     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
---
--- = Description
--- #_description#
+--     [Memory
+--     Allocation](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#memory-allocation)
+--     chapter.
 --
 -- == Valid Usage
 --
@@ -793,7 +754,6 @@
 -- -   Host access to @objectTable@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
@@ -802,7 +762,6 @@
 -- | vkRegisterObjectsNVX - Register resource bindings in an object table
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the object table.
 --
@@ -821,9 +780,6 @@
 -- -   @pObjectIndices@ are the indices at which each resource is
 --     registered.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The contents of @pObjectTableEntry@ /must/ yield plausible bindings
@@ -859,16 +815,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkObjectTableEntryNVX', 'VkObjectTableNVX'
@@ -876,7 +831,6 @@
 -- | vkUnregisterObjectsNVX - Unregister resource bindings in an object table
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that creates the object table.
 --
@@ -891,9 +845,6 @@
 --
 -- -   @pObjectIndices@ provides the array of object indices to be removed.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   At any @pObjectIndices@ there /must/ be a registered resource
@@ -928,16 +879,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'VkObjectEntryTypeNVX', 'VkObjectTableNVX'
@@ -946,7 +896,6 @@
 -- device-generated commands related properties of a physical device
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the handle to the physical device whose
 --     properties will be queried.
@@ -959,9 +908,6 @@
 --     'VkDeviceGeneratedCommandsLimitsNVX' structure, that will be filled
 --     with returned information.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
@@ -973,7 +919,6 @@
 --     @VkDeviceGeneratedCommandsLimitsNVX@ structure
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkDeviceGeneratedCommandsFeaturesNVX',
 -- 'VkDeviceGeneratedCommandsLimitsNVX',
@@ -982,9 +927,6 @@
 -- | VkDeviceGeneratedCommandsFeaturesNVX - Structure specifying physical
 -- device support
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -993,16 +935,18 @@
 -- -   @pNext@ /must/ be @NULL@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX'
 data VkDeviceGeneratedCommandsFeaturesNVX = VkDeviceGeneratedCommandsFeaturesNVX
-  { -- No documentation found for Nested "VkDeviceGeneratedCommandsFeaturesNVX" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsFeaturesNVX" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsFeaturesNVX" "vkComputeBindingPointSupport"
+  , -- | @computeBindingPointSupport@ specifies whether the @VkObjectTableNVX@
+  -- supports entries with @VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX@ bit set
+  -- and @VkIndirectCommandsLayoutNVX@ supports
+  -- @VK_PIPELINE_BIND_POINT_COMPUTE@.
   vkComputeBindingPointSupport :: VkBool32
   }
   deriving (Eq, Show)
@@ -1019,9 +963,6 @@
 -- | VkDeviceGeneratedCommandsLimitsNVX - Structure specifying physical
 -- device limits
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -1030,24 +971,28 @@
 -- -   @pNext@ /must/ be @NULL@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX'
 data VkDeviceGeneratedCommandsLimitsNVX = VkDeviceGeneratedCommandsLimitsNVX
-  { -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMaxIndirectCommandsLayoutTokenCount"
+  , -- | @maxIndirectCommandsLayoutTokenCount@ the maximum number of tokens in
+  -- @VkIndirectCommandsLayoutNVX@.
   vkMaxIndirectCommandsLayoutTokenCount :: Word32
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMaxObjectEntryCounts"
+  , -- | @maxObjectEntryCounts@ the maximum number of entries per resource type
+  -- in @VkObjectTableNVX@.
   vkMaxObjectEntryCounts :: Word32
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMinSequenceCountBufferOffsetAlignment"
+  , -- | @minSequenceCountBufferOffsetAlignment@ the minimum alignment for memory
+  -- addresses optionally used in @vkCmdProcessCommandsNVX@.
   vkMinSequenceCountBufferOffsetAlignment :: Word32
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMinSequenceIndexBufferOffsetAlignment"
+  , -- | @minSequenceIndexBufferOffsetAlignment@ the minimum alignment for memory
+  -- addresses optionally used in @vkCmdProcessCommandsNVX@.
   vkMinSequenceIndexBufferOffsetAlignment :: Word32
-  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMinCommandsTokenBufferOffsetAlignment"
+  , -- | @minCommandsTokenBufferOffsetAlignment@ the minimum alignment for memory
+  -- addresses optionally used in @vkCmdProcessCommandsNVX@.
   vkMinCommandsTokenBufferOffsetAlignment :: Word32
   }
   deriving (Eq, Show)
@@ -1072,9 +1017,6 @@
 -- | VkIndirectCommandsTokenNVX - Structure specifying parameters for the
 -- reservation of command buffer space
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The @buffer@’s usage flag /must/ have the
@@ -1090,17 +1032,17 @@
 -- -   @buffer@ /must/ be a valid @VkBuffer@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'VkCmdProcessCommandsInfoNVX', @VkDeviceSize@,
 -- 'VkIndirectCommandsTokenTypeNVX'
 data VkIndirectCommandsTokenNVX = VkIndirectCommandsTokenNVX
-  { -- No documentation found for Nested "VkIndirectCommandsTokenNVX" "vkTokenType"
+  { -- | @tokenType@ specifies the token command type.
   vkTokenType :: VkIndirectCommandsTokenTypeNVX
-  , -- No documentation found for Nested "VkIndirectCommandsTokenNVX" "vkBuffer"
+  , -- | @buffer@ specifies the @VkBuffer@ storing the functional arguments for
+  -- each squence. These argumetns can be written by the device.
   vkBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkIndirectCommandsTokenNVX" "vkOffset"
+  , -- | @offset@ specified an offset into @buffer@ where the arguments start.
   vkOffset :: VkDeviceSize
   }
   deriving (Eq, Show)
@@ -1117,9 +1059,6 @@
 -- | VkIndirectCommandsLayoutTokenNVX - Struct specifying the details of an
 -- indirect command layout token
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @bindingUnit@ /must/ stay within device supported limits for the
@@ -1135,18 +1074,19 @@
 -- -   @tokenType@ /must/ be a valid 'VkIndirectCommandsTokenTypeNVX' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkIndirectCommandsLayoutCreateInfoNVX',
 -- 'VkIndirectCommandsTokenTypeNVX'
 data VkIndirectCommandsLayoutTokenNVX = VkIndirectCommandsLayoutTokenNVX
-  { -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkTokenType"
+  { -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "tokenType"
   vkTokenType :: VkIndirectCommandsTokenTypeNVX
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkBindingUnit"
+  , -- | @bindingUnit@ has a different meaning depending on the type, please
+  -- refer pseudo code further down for details.
   vkBindingUnit :: Word32
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkDynamicCount"
+  , -- | @dynamicCount@ has a different meaning depending on the type, please
+  -- refer pseudo code further down for details.
   vkDynamicCount :: Word32
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkDivisor"
+  , -- | @divisor@ defines the rate at which the input data buffers are accessed.
   vkDivisor :: Word32
   }
   deriving (Eq, Show)
@@ -1166,7 +1106,6 @@
 -- parameters of a newly created indirect commands layout object
 --
 -- = Description
--- #_description#
 --
 -- The following code illustrates some of the key flags:
 --
@@ -1231,7 +1170,6 @@
 -- -   @tokenCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkIndirectCommandsLayoutTokenNVX',
 -- 'VkIndirectCommandsLayoutUsageFlagsNVX',
@@ -1239,17 +1177,21 @@
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCreateIndirectCommandsLayoutNVX'
 data VkIndirectCommandsLayoutCreateInfoNVX = VkIndirectCommandsLayoutCreateInfoNVX
-  { -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkPipelineBindPoint"
+  , -- | @pipelineBindPoint@ is the @VkPipelineBindPoint@ that this layout
+  -- targets.
   vkPipelineBindPoint :: VkPipelineBindPoint
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkFlags"
+  , -- | @flags@ is a bitmask of 'VkIndirectCommandsLayoutUsageFlagBitsNVX'
+  -- specifying usage hints of this layout.
   vkFlags :: VkIndirectCommandsLayoutUsageFlagsNVX
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkTokenCount"
+  , -- | @tokenCount@ is the length of the individual command sequnce.
   vkTokenCount :: Word32
-  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkPTokens"
+  , -- | @pTokens@ is an array describing each command token in detail. See
+  -- 'VkIndirectCommandsTokenTypeNVX' and 'VkIndirectCommandsLayoutTokenNVX'
+  -- below for details.
   vkPTokens :: Ptr VkIndirectCommandsLayoutTokenNVX
   }
   deriving (Eq, Show)
@@ -1272,9 +1214,6 @@
 -- | VkCmdProcessCommandsInfoNVX - Structure specifying parameters for the
 -- generation of commands
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   The provided @objectTable@ /must/ include all objects referenced by
@@ -1355,7 +1294,6 @@
 --     synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
@@ -1363,29 +1301,47 @@
 -- 'VkObjectTableNVX', 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCmdProcessCommandsNVX'
 data VkCmdProcessCommandsInfoNVX = VkCmdProcessCommandsInfoNVX
-  { -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkObjectTable"
+  , -- | @objectTable@ is the @VkObjectTableNVX@ to be used for the generation
+  -- process. Only registered objects at the time
+  -- 'vkCmdReserveSpaceForCommandsNVX' is called, will be taken into account
+  -- for the reservation.
   vkObjectTable :: VkObjectTableNVX
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkIndirectCommandsLayout"
+  , -- | @indirectCommandsLayout@ is the @VkIndirectCommandsLayoutNVX@ that
+  -- provides the command sequence to generate.
   vkIndirectCommandsLayout :: VkIndirectCommandsLayoutNVX
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkIndirectCommandsTokenCount"
+  , -- | @indirectCommandsTokenCount@ defines the number of input tokens used.
   vkIndirectCommandsTokenCount :: Word32
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkPIndirectCommandsTokens"
+  , -- | @pIndirectCommandsTokens@ provides an array of
+  -- 'VkIndirectCommandsTokenNVX' that reference the input data for each
+  -- token command.
   vkPIndirectCommandsTokens :: Ptr VkIndirectCommandsTokenNVX
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkMaxSequencesCount"
+  , -- | @maxSequencesCount@ is the maximum number of sequences for which command
+  -- buffer space will be reserved. If @sequencesCountBuffer@ is
+  -- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', this is also the
+  -- actual number of sequences generated.
   vkMaxSequencesCount :: Word32
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkTargetCommandBuffer"
+  , -- | @targetCommandBuffer@ /can/ be the secondary @VkCommandBuffer@ in which
+  -- the commands should be recorded. If @targetCommandBuffer@ is @NULL@ an
+  -- implicit reservation as well as execution takes place on the processing
+  -- @VkCommandBuffer@.
   vkTargetCommandBuffer :: VkCommandBuffer
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesCountBuffer"
+  , -- | @sequencesCountBuffer@ /can/ be @VkBuffer@ from which the actual amount
+  -- of sequences is sourced from as @uint32_t@ value.
   vkSequencesCountBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesCountOffset"
+  , -- | @sequencesCountOffset@ is the byte offset into @sequencesCountBuffer@
+  -- where the count value is stored.
   vkSequencesCountOffset :: VkDeviceSize
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesIndexBuffer"
+  , -- | @sequencesIndexBuffer@ /must/ be set if @indirectCommandsLayout@’s
+  -- @VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT@ is set and
+  -- provides the used sequence indices as @uint32_t@ array. Otherwise it
+  -- /must/ be 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'.
   vkSequencesIndexBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesIndexOffset"
+  , -- | @sequencesIndexOffset@ is the byte offset into @sequencesIndexBuffer@
+  -- where the index values start.
   vkSequencesIndexOffset :: VkDeviceSize
   }
   deriving (Eq, Show)
@@ -1420,9 +1376,6 @@
 -- | VkCmdReserveSpaceForCommandsInfoNVX - Structure specifying parameters
 -- for the reservation of command buffer space
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -1443,21 +1396,25 @@
 -- -   Host access to @objectTable@ /must/ be externally synchronized
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkIndirectCommandsLayoutNVX', 'VkObjectTableNVX',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'vkCmdReserveSpaceForCommandsNVX'
 data VkCmdReserveSpaceForCommandsInfoNVX = VkCmdReserveSpaceForCommandsInfoNVX
-  { -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkObjectTable"
+  , -- | @objectTable@ is the @VkObjectTableNVX@ to be used for the generation
+  -- process. Only registered objects at the time
+  -- 'vkCmdReserveSpaceForCommandsNVX' is called, will be taken into account
+  -- for the reservation.
   vkObjectTable :: VkObjectTableNVX
-  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkIndirectCommandsLayout"
+  , -- | @indirectCommandsLayout@ is the @VkIndirectCommandsLayoutNVX@ that
+  -- /must/ also be used at generation time.
   vkIndirectCommandsLayout :: VkIndirectCommandsLayoutNVX
-  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkMaxSequencesCount"
+  , -- | @maxSequencesCount@ is the maximum number of sequences for which command
+  -- buffer space will be reserved.
   vkMaxSequencesCount :: Word32
   }
   deriving (Eq, Show)
@@ -1478,9 +1435,6 @@
 -- | VkObjectTableCreateInfoNVX - Structure specifying the parameters of a
 -- newly created object table
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If the
@@ -1524,32 +1478,51 @@
 -- -   @objectCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateObjectTableNVX'
 data VkObjectTableCreateInfoNVX = VkObjectTableCreateInfoNVX
-  { -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkObjectCount"
+  , -- | @objectCount@ is the number of entry configurations that the object
+  -- table supports.
   vkObjectCount :: Word32
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPObjectEntryTypes"
+  , -- | @pObjectEntryTypes@ is an array of 'VkObjectEntryTypeNVX' values
+  -- providing the entry type of a given configuration.
   vkPObjectEntryTypes :: Ptr VkObjectEntryTypeNVX
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPObjectEntryCounts"
+  , -- | @pObjectEntryCounts@ is an array of counts of how many objects can be
+  -- registered in the table.
   vkPObjectEntryCounts :: Ptr Word32
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPObjectEntryUsageFlags"
+  , -- | @pObjectEntryUsageFlags@ is an array of bitmasks of
+  -- 'VkObjectEntryUsageFlagBitsNVX' specifying the binding usage of the
+  -- entry.
   vkPObjectEntryUsageFlags :: Ptr VkObjectEntryUsageFlagsNVX
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxUniformBuffersPerDescriptor"
+  , -- | @maxUniformBuffersPerDescriptor@ is the maximum number of
+  -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+  -- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ used by any single
+  -- registered @VkDescriptorSet@ in this table.
   vkMaxUniformBuffersPerDescriptor :: Word32
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxStorageBuffersPerDescriptor"
+  , -- | @maxStorageBuffersPerDescriptor@ is the maximum number of
+  -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+  -- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ used by any single
+  -- registered @VkDescriptorSet@ in this table.
   vkMaxStorageBuffersPerDescriptor :: Word32
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxStorageImagesPerDescriptor"
+  , -- | @maxStorageImagesPerDescriptor@ is the maximum number of
+  -- @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ or
+  -- @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ used by any single registered
+  -- @VkDescriptorSet@ in this table.
   vkMaxStorageImagesPerDescriptor :: Word32
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxSampledImagesPerDescriptor"
+  , -- | @maxSampledImagesPerDescriptor@ is the maximum number of
+  -- @VK_DESCRIPTOR_TYPE_SAMPLER@,
+  -- @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+  -- @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ or
+  -- @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ used by any single registered
+  -- @VkDescriptorSet@ in this table.
   vkMaxSampledImagesPerDescriptor :: Word32
-  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxPipelineLayouts"
+  , -- | @maxPipelineLayouts@ is the maximum number of unique @VkPipelineLayout@
+  -- used by any registered @VkDescriptorSet@ or @VkPipeline@ in this table.
   vkMaxPipelineLayouts :: Word32
   }
   deriving (Eq, Show)
@@ -1582,9 +1555,6 @@
 -- | VkObjectTableEntryNVX - Common parameters of an object table resource
 -- entry
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   If the
@@ -1602,14 +1572,14 @@
 -- -   @flags@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX',
 -- 'vkRegisterObjectsNVX'
 data VkObjectTableEntryNVX = VkObjectTableEntryNVX
-  { -- No documentation found for Nested "VkObjectTableEntryNVX" "vkType"
+  { -- | @type@ defines the entry type
   vkType :: VkObjectEntryTypeNVX
-  , -- No documentation found for Nested "VkObjectTableEntryNVX" "vkFlags"
+  , -- | @flags@ defines which @VkPipelineBindPoint@ the resource can be used
+  -- with. Some entry types allow only a single flag to be set.
   vkFlags :: VkObjectEntryUsageFlagsNVX
   }
   deriving (Eq, Show)
@@ -1624,9 +1594,6 @@
 -- | VkObjectTablePipelineEntryNVX - Parameters of an object table pipeline
 -- entry
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX@
@@ -1643,16 +1610,16 @@
 -- -   @pipeline@ /must/ be a valid @VkPipeline@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkPipeline'
 data VkObjectTablePipelineEntryNVX = VkObjectTablePipelineEntryNVX
-  { -- No documentation found for Nested "VkObjectTablePipelineEntryNVX" "vkType"
+  { -- No documentation found for Nested "VkObjectTablePipelineEntryNVX" "type"
   vkType :: VkObjectEntryTypeNVX
-  , -- No documentation found for Nested "VkObjectTablePipelineEntryNVX" "vkFlags"
+  , -- No documentation found for Nested "VkObjectTablePipelineEntryNVX" "flags"
   vkFlags :: VkObjectEntryUsageFlagsNVX
-  , -- No documentation found for Nested "VkObjectTablePipelineEntryNVX" "vkPipeline"
+  , -- | @pipeline@ specifies the @VkPipeline@ that this resource entry
+  -- references.
   vkPipeline :: VkPipeline
   }
   deriving (Eq, Show)
@@ -1669,9 +1636,6 @@
 -- | VkObjectTableDescriptorSetEntryNVX - Parameters of an object table
 -- descriptor set entry
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX@
@@ -1693,19 +1657,20 @@
 --     created, allocated, or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSet',
 -- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'
 data VkObjectTableDescriptorSetEntryNVX = VkObjectTableDescriptorSetEntryNVX
-  { -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "vkType"
+  { -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "type"
   vkType :: VkObjectEntryTypeNVX
-  , -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "vkFlags"
+  , -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "flags"
   vkFlags :: VkObjectEntryUsageFlagsNVX
-  , -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "vkPipelineLayout"
+  , -- | @pipelineLayout@ specifies the @VkPipelineLayout@ that the
+  -- @descriptorSet@ is used with.
   vkPipelineLayout :: VkPipelineLayout
-  , -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "vkDescriptorSet"
+  , -- | @descriptorSet@ specifies the @VkDescriptorSet@ that can be bound with
+  -- this entry.
   vkDescriptorSet :: VkDescriptorSet
   }
   deriving (Eq, Show)
@@ -1724,9 +1689,6 @@
 -- | VkObjectTableVertexBufferEntryNVX - Parameters of an object table vertex
 -- buffer entry
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX@
@@ -1743,16 +1705,15 @@
 -- -   @buffer@ /must/ be a valid @VkBuffer@ handle
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX'
 data VkObjectTableVertexBufferEntryNVX = VkObjectTableVertexBufferEntryNVX
-  { -- No documentation found for Nested "VkObjectTableVertexBufferEntryNVX" "vkType"
+  { -- No documentation found for Nested "VkObjectTableVertexBufferEntryNVX" "type"
   vkType :: VkObjectEntryTypeNVX
-  , -- No documentation found for Nested "VkObjectTableVertexBufferEntryNVX" "vkFlags"
+  , -- No documentation found for Nested "VkObjectTableVertexBufferEntryNVX" "flags"
   vkFlags :: VkObjectEntryUsageFlagsNVX
-  , -- No documentation found for Nested "VkObjectTableVertexBufferEntryNVX" "vkBuffer"
+  , -- | @buffer@ specifies the @VkBuffer@ that can be bound as vertex bufer
   vkBuffer :: VkBuffer
   }
   deriving (Eq, Show)
@@ -1769,9 +1730,6 @@
 -- | VkObjectTableIndexBufferEntryNVX - Parameters of an object table index
 -- buffer entry
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX@
@@ -1791,19 +1749,18 @@
 --     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkIndexType',
 -- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX'
 data VkObjectTableIndexBufferEntryNVX = VkObjectTableIndexBufferEntryNVX
-  { -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "vkType"
+  { -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "type"
   vkType :: VkObjectEntryTypeNVX
-  , -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "vkFlags"
+  , -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "flags"
   vkFlags :: VkObjectEntryUsageFlagsNVX
-  , -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "vkBuffer"
+  , -- | @buffer@ specifies the @VkBuffer@ that can be bound as index buffer
   vkBuffer :: VkBuffer
-  , -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "vkIndexType"
+  , -- | @indexType@ specifies the @VkIndexType@ used with this index buffer
   vkIndexType :: VkIndexType
   }
   deriving (Eq, Show)
@@ -1822,9 +1779,6 @@
 -- | VkObjectTablePushConstantEntryNVX - Parameters of an object table push
 -- constant entry
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX@
@@ -1846,19 +1800,20 @@
 -- -   @stageFlags@ /must/ not be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX',
 -- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout',
 -- 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags'
 data VkObjectTablePushConstantEntryNVX = VkObjectTablePushConstantEntryNVX
-  { -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "vkType"
+  { -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "type"
   vkType :: VkObjectEntryTypeNVX
-  , -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "vkFlags"
+  , -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "flags"
   vkFlags :: VkObjectEntryUsageFlagsNVX
-  , -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "vkPipelineLayout"
+  , -- | @pipelineLayout@ specifies the @VkPipelineLayout@ that the pushconstants
+  -- are used with
   vkPipelineLayout :: VkPipelineLayout
-  , -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "vkStageFlags"
+  , -- | @stageFlags@ specifies the @VkShaderStageFlags@ that the pushconstants
+  -- are used with
   vkStageFlags :: VkShaderStageFlags
   }
   deriving (Eq, Show)
@@ -1878,13 +1833,11 @@
 -- VkIndirectCommandsLayoutUsageFlagBitsNVX
 --
 -- = Description
--- #_description#
 --
 -- @VkIndirectCommandsLayoutUsageFlagsNVX@ is a bitmask type for setting a
 -- mask of zero or more 'VkIndirectCommandsLayoutUsageFlagBitsNVX'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkIndirectCommandsLayoutCreateInfoNVX',
 -- 'VkIndirectCommandsLayoutUsageFlagBitsNVX'
@@ -1892,13 +1845,11 @@
 -- | VkObjectEntryUsageFlagsNVX - Bitmask of VkObjectEntryUsageFlagBitsNVX
 --
 -- = Description
--- #_description#
 --
 -- @VkObjectEntryUsageFlagsNVX@ is a bitmask type for setting a mask of
 -- zero or more 'VkObjectEntryUsageFlagBitsNVX'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkObjectEntryUsageFlagBitsNVX', 'VkObjectTableCreateInfoNVX',
 -- 'VkObjectTableDescriptorSetEntryNVX', 'VkObjectTableEntryNVX',
diff --git a/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs b/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs
@@ -38,10 +38,18 @@
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX :: VkStructureType
 pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX = VkStructureType 1000097000
--- No documentation found for Nested "VkSubpassDescriptionFlagBits" "VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"
+-- | @VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX@ specifies that
+-- shaders compiled for this subpass write the attributes for all views in
+-- a single invocation of each vertex processing stage. All pipelines
+-- compiled against a subpass that includes this bit /must/ write per-view
+-- attributes to the code:*PerViewNV[] shader outputs, in addition to the
+-- non-per-view (e.g. @Position@) outputs.
 pattern VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX :: VkSubpassDescriptionFlagBits
 pattern VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX = VkSubpassDescriptionFlagBits 0x00000001
--- No documentation found for Nested "VkSubpassDescriptionFlagBits" "VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"
+-- | @VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX@ specifies that
+-- shaders compiled for this subpass use per-view positions which only
+-- differ in value in the x component. Per-view viewport mask /can/ also be
+-- used.
 pattern VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX :: VkSubpassDescriptionFlagBits
 pattern VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = VkSubpassDescriptionFlagBits 0x00000002
 -- No documentation found for TopLevel "VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION"
@@ -54,14 +62,12 @@
 -- describing multiview limits that can be supported by an implementation
 --
 -- = Members
--- #_members#
 --
 -- The members of the
 -- @VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX@ structure
 -- describe the following implementation-dependent limits:
 --
 -- = Description
--- #_description#
 --
 -- -   @perViewPositionAllComponents@ is @VK_TRUE@ if the implementation
 --     supports per-view position values that differ in components other
@@ -78,15 +84,14 @@
 -- it is filled with the implementation-dependent limits.
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
-  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "vkSType"
+  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "vkPNext"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "vkPerViewPositionAllComponents"
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "perViewPositionAllComponents"
   vkPerViewPositionAllComponents :: VkBool32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs b/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs
@@ -50,7 +50,13 @@
   )
 
 
--- No documentation found for Nested "VkDynamicState" "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"
+-- | @VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV@ specifies that the
+-- @pViewportScalings@ state in
+-- @VkPipelineViewportWScalingStateCreateInfoNV@ will be ignored and /must/
+-- be set dynamically with 'vkCmdSetViewportWScalingNV' before any draws
+-- are performed with a pipeline state with
+-- @VkPipelineViewportWScalingStateCreateInfo@ member
+-- @viewportScalingEnable@ set to @VK_TRUE@
 pattern VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV :: VkDynamicState
 pattern VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = VkDynamicState 1000087000
 -- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"
@@ -66,7 +72,6 @@
 -- buffer
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @commandBuffer@ is the command buffer into which the command will be
 --     recorded.
@@ -81,7 +86,6 @@
 --     'VkViewportWScalingNV' structures specifying viewport parameters.
 --
 -- = Description
--- #_description#
 --
 -- The viewport parameters taken from element i of @pViewportWScalings@
 -- replace the current state for the viewport index @firstViewport@ + i,
@@ -107,8 +111,8 @@
 -- -   @pViewportWScalings@ /must/ be a valid pointer to an array of
 --     @viewportCount@ @VkViewportWScalingNV@ structures
 --
--- -   @commandBuffer@ /must/ be in the
---     <#commandbuffers-lifecycle recording state>
+-- -   @commandBuffer@ /must/ be in the [recording
+--     state](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#commandbuffers-lifecycle)
 --
 -- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
 --     support graphics operations
@@ -124,35 +128,31 @@
 --
 -- == Command Properties
 --
--- > +-----------------+-----------------+-----------------+-----------------+
--- > | <#VkCommandBuff | <#vkCmdBeginRen | <#VkQueueFlagBi | <#synchronizati |
--- > | erLevel Command | derPass Render  | ts Supported Qu | on-pipeline-sta |
--- > |  Buffer Levels> | Pass Scope>     | eue Types>      | ges-types Pipel |
--- > |                 |                 |                 | ine Type>       |
--- > +=================+=================+=================+=================+
--- > | Primary         | Both            | Graphics        |                 |
--- > | Secondary       |                 |                 |                 |
--- > +-----------------+-----------------+-----------------+-----------------+
+-- \'
 --
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+-- | [Command Buffer                                                                                             | [Render Pass                                                                                               | [Supported Queue                                                                                      | [Pipeline                                                                                                                  |
+-- | Levels](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkCommandBufferLevel) | Scope](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vkCmdBeginRenderPass) | Types](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#VkQueueFlagBits) | Type](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#synchronization-pipeline-stages-types) |
+-- +=============================================================================================================+============================================================================================================+=======================================================================================================+============================================================================================================================+
+-- | Primary                                                                                                     | Both                                                                                                       | Graphics                                                                                              |                                                                                                                            |
+-- | Secondary                                                                                                   |                                                                                                            |                                                                                                       |                                                                                                                            |
+-- +-------------------------------------------------------------------------------------------------------------+------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------+
+--
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', 'VkViewportWScalingNV'
 foreign import ccall "vkCmdSetViewportWScalingNV" vkCmdSetViewportWScalingNV :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstViewport" ::: Word32) -> ("viewportCount" ::: Word32) -> ("pViewportWScalings" ::: Ptr VkViewportWScalingNV) -> IO ()
 -- | VkViewportWScalingNV - Structure specifying a viewport
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineViewportWScalingStateCreateInfoNV',
 -- 'vkCmdSetViewportWScalingNV'
 data VkViewportWScalingNV = VkViewportWScalingNV
-  { -- No documentation found for Nested "VkViewportWScalingNV" "vkXcoeff"
+  { -- | @xcoeff@ and @ycoeff@ are the viewport’s W scaling factor for x and y
+  -- respectively.
   vkXcoeff :: CFloat
-  , -- No documentation found for Nested "VkViewportWScalingNV" "vkYcoeff"
+  , -- No documentation found for Nested "VkViewportWScalingNV" "ycoeff"
   vkYcoeff :: CFloat
   }
   deriving (Eq, Show)
@@ -167,9 +167,6 @@
 -- | VkPipelineViewportWScalingStateCreateInfoNV - Structure specifying
 -- parameters of a newly created pipeline viewport W scaling state
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -178,20 +175,25 @@
 -- -   @viewportCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType',
 -- 'VkViewportWScalingNV'
 data VkPipelineViewportWScalingStateCreateInfoNV = VkPipelineViewportWScalingStateCreateInfoNV
-  { -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkViewportWScalingEnable"
+  , -- | @viewportWScalingEnable@ controls whether viewport __W__ scaling is
+  -- enabled.
   vkViewportWScalingEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkViewportCount"
+  , -- | @viewportCount@ is the number of viewports used by __W__ scaling, and
+  -- /must/ match the number of viewports in the pipeline if viewport __W__
+  -- scaling is enabled.
   vkViewportCount :: Word32
-  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkPViewportWScalings"
+  , -- | @pViewportWScalings@ is a pointer to an array of @VkViewportWScalingNV@
+  -- structures, which define the __W__ scaling parameters for the
+  -- corresponding viewport. If the viewport __W__ scaling state is dynamic,
+  -- this member is ignored.
   vkPViewportWScalings :: Ptr VkViewportWScalingNV
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
@@ -57,7 +57,6 @@
 -- to a dedicated memory resource
 --
 -- = Description
--- #_description#
 --
 -- __Note__
 --
@@ -77,15 +76,15 @@
 --     @VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDedicatedAllocationImageCreateInfoNV = VkDedicatedAllocationImageCreateInfoNV
-  { -- No documentation found for Nested "VkDedicatedAllocationImageCreateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDedicatedAllocationImageCreateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDedicatedAllocationImageCreateInfoNV" "vkDedicatedAllocation"
+  , -- | @dedicatedAllocation@ specifies whether the image will have a dedicated
+  -- allocation bound to it.
   vkDedicatedAllocation :: VkBool32
   }
   deriving (Eq, Show)
@@ -102,24 +101,21 @@
 -- | VkDedicatedAllocationBufferCreateInfoNV - Specify that a buffer is bound
 -- to a dedicated memory resource
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
 --     @VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDedicatedAllocationBufferCreateInfoNV = VkDedicatedAllocationBufferCreateInfoNV
-  { -- No documentation found for Nested "VkDedicatedAllocationBufferCreateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDedicatedAllocationBufferCreateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDedicatedAllocationBufferCreateInfoNV" "vkDedicatedAllocation"
+  , -- | @dedicatedAllocation@ specifies whether the buffer will have a dedicated
+  -- allocation bound to it.
   vkDedicatedAllocation :: VkBool32
   }
   deriving (Eq, Show)
@@ -136,9 +132,6 @@
 -- | VkDedicatedAllocationMemoryAllocateInfoNV - Specify a dedicated memory
 -- allocation resource
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   At least one of @image@ and @buffer@ /must/ be
@@ -164,6 +157,18 @@
 --     @VkMemoryAllocateInfo@::@allocationSize@ /must/ equal the
 --     @VkMemoryRequirements@::@size@ of the buffer
 --
+-- -   If @image@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--     and 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo' 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 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--     and 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo' defines a
+--     memory import operation, the memory being imported /must/ also be a
+--     dedicated buffer allocation and @buffer@ /must/ be identical to the
+--     buffer associated with the imported memory.
+--
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -180,19 +185,20 @@
 --     been created, allocated, or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
 -- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkDedicatedAllocationMemoryAllocateInfoNV = VkDedicatedAllocationMemoryAllocateInfoNV
-  { -- No documentation found for Nested "VkDedicatedAllocationMemoryAllocateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkDedicatedAllocationMemoryAllocateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkDedicatedAllocationMemoryAllocateInfoNV" "vkImage"
+  , -- | @image@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or a handle
+  -- of an image which this memory will be bound to.
   vkImage :: VkImage
-  , -- No documentation found for Nested "VkDedicatedAllocationMemoryAllocateInfoNV" "vkBuffer"
+  , -- | @buffer@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or a
+  -- handle of a buffer which this memory will be bound to.
   vkBuffer :: VkBuffer
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs
@@ -49,9 +49,6 @@
 -- | VkExternalMemoryImageCreateInfoNV - Specify that an image may be backed
 -- by external memory
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -62,16 +59,17 @@
 --     values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagsNV',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExternalMemoryImageCreateInfoNV = VkExternalMemoryImageCreateInfoNV
-  { -- No documentation found for Nested "VkExternalMemoryImageCreateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfoNV" "vkHandleTypes"
+  , -- | @handleTypes@ is a bitmask of
+  -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+  -- specifying one or more external memory handle types.
   vkHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
   }
   deriving (Eq, Show)
@@ -88,9 +86,6 @@
 -- | VkExportMemoryAllocateInfoNV - Specify memory handle types that may be
 -- exported
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV@
@@ -100,16 +95,20 @@
 --     values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagsNV',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportMemoryAllocateInfoNV = VkExportMemoryAllocateInfoNV
-  { -- No documentation found for Nested "VkExportMemoryAllocateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportMemoryAllocateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportMemoryAllocateInfoNV" "vkHandleTypes"
+  , -- | @handleTypes@ is a bitmask of
+  -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+  -- specifying one or more memory handle types that /may/ be exported.
+  -- Multiple handle types /may/ be requested for the same allocation as long
+  -- as they are compatible, as reported by
+  -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV'.
   vkHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
@@ -84,7 +84,6 @@
 -- memory handle types
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkExternalMemoryHandleTypeFlagsNV'
 newtype VkExternalMemoryHandleTypeFlagBitsNV = VkExternalMemoryHandleTypeFlagBitsNV VkFlags
@@ -139,7 +138,6 @@
 -- features
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkExternalImageFormatPropertiesNV', 'VkExternalMemoryFeatureFlagsNV',
 -- 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'
@@ -189,7 +187,6 @@
 -- capabilities compatible with external memory handle types
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @physicalDevice@ is the physical device from which to query the
 --     image capabilities
@@ -218,7 +215,6 @@
 --     are returned.
 --
 -- = Description
--- #_description#
 --
 -- If @externalHandleType@ is 0,
 -- @pExternalImageFormatProperties@::imageFormatProperties will return the
@@ -259,10 +255,10 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 --     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
@@ -270,7 +266,6 @@
 --     -   @VK_ERROR_FORMAT_NOT_SUPPORTED@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkExternalImageFormatPropertiesNV',
 -- 'VkExternalMemoryHandleTypeFlagsNV',
@@ -284,23 +279,39 @@
 -- | VkExternalImageFormatPropertiesNV - Structure specifying external image
 -- format properties
 --
--- = Description
--- #_description#
---
 -- = See Also
--- #_see_also#
 --
 -- 'VkExternalMemoryFeatureFlagsNV', 'VkExternalMemoryHandleTypeFlagsNV',
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageFormatProperties',
 -- 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'
 data VkExternalImageFormatPropertiesNV = VkExternalImageFormatPropertiesNV
-  { -- No documentation found for Nested "VkExternalImageFormatPropertiesNV" "vkImageFormatProperties"
+  { -- | @imageFormatProperties@ will be filled in as when calling
+  -- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties',
+  -- but the values returned /may/ vary depending on the external handle type
+  -- requested.
   vkImageFormatProperties :: VkImageFormatProperties
-  , -- No documentation found for Nested "VkExternalImageFormatPropertiesNV" "vkExternalMemoryFeatures"
+  , -- | @externalMemoryFeatures@ is a bitmask of
+  -- 'VkExternalMemoryFeatureFlagBitsNV', indicating properties of the
+  -- external memory handle type
+  -- ('vkGetPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@)
+  -- being queried, or 0 if the external memory handle type is 0.
   vkExternalMemoryFeatures :: VkExternalMemoryFeatureFlagsNV
-  , -- No documentation found for Nested "VkExternalImageFormatPropertiesNV" "vkExportFromImportedHandleTypes"
+  , -- | @exportFromImportedHandleTypes@ is a bitmask of
+  -- 'VkExternalMemoryHandleTypeFlagBitsNV' containing a bit set for every
+  -- external handle type that /may/ be used to create memory from which the
+  -- handles of the type specified in
+  -- 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
+  -- /can/ be exported, or 0 if the external memory handle type is 0.
   vkExportFromImportedHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
-  , -- No documentation found for Nested "VkExternalImageFormatPropertiesNV" "vkCompatibleHandleTypes"
+  , -- | @compatibleHandleTypes@ is a bitmask of
+  -- 'VkExternalMemoryHandleTypeFlagBitsNV' containing a bit set for every
+  -- external handle type that /may/ be specified simultaneously with the
+  -- handle type specified by
+  -- 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
+  -- when calling 'Graphics.Vulkan.Core10.Memory.vkAllocateMemory', or 0 if
+  -- the external memory handle type is 0. @compatibleHandleTypes@ will
+  -- always contain
+  -- 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'::@externalHandleType@
   vkCompatibleHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
   }
   deriving (Eq, Show)
@@ -320,13 +331,11 @@
 -- VkExternalMemoryHandleTypeFlagBitsNV
 --
 -- = Description
--- #_description#
 --
 -- @VkExternalMemoryHandleTypeFlagsNV@ is a bitmask type for setting a mask
 -- of zero or more 'VkExternalMemoryHandleTypeFlagBitsNV'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExportMemoryAllocateInfoNV',
 -- 'VkExternalImageFormatPropertiesNV',
@@ -340,13 +349,11 @@
 -- VkExternalMemoryFeatureFlagBitsNV
 --
 -- = Description
--- #_description#
 --
 -- @VkExternalMemoryFeatureFlagsNV@ is a bitmask type for setting a mask of
 -- zero or more 'VkExternalMemoryFeatureFlagBitsNV'.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkExternalImageFormatPropertiesNV', 'VkExternalMemoryFeatureFlagBitsNV'
 type VkExternalMemoryFeatureFlagsNV = VkExternalMemoryFeatureFlagBitsNV
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs
@@ -76,7 +76,6 @@
 -- object
 --
 -- = Parameters
--- #_parameters#
 --
 -- -   @device@ is the logical device that owns the memory.
 --
@@ -89,9 +88,6 @@
 -- -   @handle@ points to a Windows @HANDLE@ in which the handle is
 --     returned.
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @handleType@ /must/ be a flag specified in
@@ -117,16 +113,15 @@
 --
 -- == Return Codes
 --
--- [<#fundamentals-successcodes Success>]
+-- [[Success](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-successcodes)]
 --     -   @VK_SUCCESS@
 --
--- [<#fundamentals-errorcodes Failure>]
+-- [[Failure](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fundamentals-errorcodes)]
 --     -   @VK_ERROR_TOO_MANY_OBJECTS@
 --
 --     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory',
@@ -136,7 +131,6 @@
 -- same physical device
 --
 -- = Description
--- #_description#
 --
 -- If @handleType@ is @0@, this structure is ignored by consumers of the
 -- 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo' structure it is
@@ -159,18 +153,19 @@
 --     values
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagsNV',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkImportMemoryWin32HandleInfoNV = VkImportMemoryWin32HandleInfoNV
-  { -- No documentation found for Nested "VkImportMemoryWin32HandleInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoNV" "vkHandleType"
+  , -- | @handleType@ is @0@ or a
+  -- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+  -- value specifying the type of memory handle in @handle@.
   vkHandleType :: VkExternalMemoryHandleTypeFlagsNV
-  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoNV" "vkHandle"
+  , -- | @handle@ is a Windows @HANDLE@ referring to the memory.
   vkHandle :: HANDLE
   }
   deriving (Eq, Show)
@@ -190,7 +185,6 @@
 -- rights for Win32 memory handles
 --
 -- = Description
--- #_description#
 --
 -- If this structure is not present, or if @pAttributes@ is set to @NULL@,
 -- default security descriptor values will be used, and child processes
@@ -213,17 +207,17 @@
 --     pointer to a valid @SECURITY_ATTRIBUTES@ value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkExportMemoryWin32HandleInfoNV = VkExportMemoryWin32HandleInfoNV
-  { -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkPAttributes"
+  , -- | @pAttributes@ is a pointer to a Windows @SECURITY_ATTRIBUTES@ structure
+  -- specifying security attributes of the handle.
   vkPAttributes :: Ptr SECURITY_ATTRIBUTES
-  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkDwAccess"
+  , -- | @dwAccess@ is a @DWORD@ specifying access rights of the handle.
   vkDwAccess :: DWORD
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs b/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
@@ -61,13 +61,11 @@
 -- | VkPipelineCoverageToColorStateCreateFlagsNV - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineCoverageToColorStateCreateFlagsNV@ is a bitmask type for
 -- setting a mask, but is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineCoverageToColorStateCreateInfoNV'
 newtype VkPipelineCoverageToColorStateCreateFlagsNV = VkPipelineCoverageToColorStateCreateFlagsNV VkFlags
@@ -101,22 +99,24 @@
 -- whether fragment coverage replaces a color
 --
 -- = Description
--- #_description#
 --
 -- If @coverageToColorEnable@ is @VK_TRUE@, the fragment coverage
 -- information is treated as a bitmask with one bit for each sample (as in
--- the <{html_spec_relative}#fragops-samplemask Sample Mask> section), and
--- this bitmask replaces the first component of the color value
--- corresponding to the fragment shader output location with @Location@
--- equal to @coverageToColorLocation@ and @Index@ equal to zero. If the
--- color attachment format has fewer bits than the sample coverage, the low
--- bits of the sample coverage bitmask are taken without any clamping. If
--- the color attachment format has more bits than the sample coverage, the
--- high bits of the sample coverage bitmask are filled with zeros.
+-- the [Sample
+-- Mask](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#fragops-samplemask)
+-- section), and this bitmask replaces the first component of the color
+-- value corresponding to the fragment shader output location with
+-- @Location@ equal to @coverageToColorLocation@ and @Index@ equal to zero.
+-- If the color attachment format has fewer bits than the sample coverage,
+-- the low bits of the sample coverage bitmask are taken without any
+-- clamping. If the color attachment format has more bits than the sample
+-- coverage, the high bits of the sample coverage bitmask are filled with
+-- zeros.
 --
--- If <{html_spec_relative}#primsrast-sampleshading Sample Shading> is in
--- use, the coverage bitmask only has bits set for samples that correspond
--- to the fragment shader invocation that shades those samples.
+-- If [Sample
+-- Shading](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#primsrast-sampleshading)
+-- is in use, the coverage bitmask only has bits set for samples that
+-- correspond to the fragment shader invocation that shades those samples.
 --
 -- This pipeline stage occurs after sample counting and before blending,
 -- and is always performed after fragment shading regardless of the setting
@@ -147,20 +147,21 @@
 -- -   @flags@ /must/ be @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'VkPipelineCoverageToColorStateCreateFlagsNV',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPipelineCoverageToColorStateCreateInfoNV = VkPipelineCoverageToColorStateCreateInfoNV
-  { -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkPipelineCoverageToColorStateCreateFlagsNV
-  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkCoverageToColorEnable"
+  , -- | @coverageToColorEnable@ controls whether the fragment coverage value
+  -- replaces a fragment color output.
   vkCoverageToColorEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkCoverageToColorLocation"
+  , -- | @coverageToColorLocation@ controls which fragment shader color output
+  -- value is replaced.
   vkCoverageToColorLocation :: Word32
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs b/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
@@ -72,7 +72,6 @@
 -- | VkCoverageModulationModeNV - Specify the discard rectangle mode
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineCoverageModulationStateCreateInfoNV'
 newtype VkCoverageModulationModeNV = VkCoverageModulationModeNV Int32
@@ -122,13 +121,11 @@
 -- | VkPipelineCoverageModulationStateCreateFlagsNV - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineCoverageModulationStateCreateFlagsNV@ is a bitmask type for
 -- setting a mask, but is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineCoverageModulationStateCreateInfoNV'
 newtype VkPipelineCoverageModulationStateCreateFlagsNV = VkPipelineCoverageModulationStateCreateFlagsNV VkFlags
@@ -162,7 +159,6 @@
 -- parameters controlling coverage modulation
 --
 -- = Description
--- #_description#
 --
 -- If @coverageModulationTableEnable@ is @VK_FALSE@, then for each color
 -- sample the associated bits of the fragment’s coverage are counted and
@@ -220,25 +216,28 @@
 -- -   @coverageModulationTableCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- @VkBool32@, 'VkCoverageModulationModeNV',
 -- 'VkPipelineCoverageModulationStateCreateFlagsNV',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkPipelineCoverageModulationStateCreateInfoNV = VkPipelineCoverageModulationStateCreateInfoNV
-  { -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkPipelineCoverageModulationStateCreateFlagsNV
-  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkCoverageModulationMode"
+  , -- | @coverageModulationMode@ controls which color components are modulated
+  -- and is of type 'VkCoverageModulationModeNV'.
   vkCoverageModulationMode :: VkCoverageModulationModeNV
-  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkCoverageModulationTableEnable"
+  , -- | @coverageModulationTableEnable@ controls whether the modulation factor
+  -- is looked up from a table in @pCoverageModulationTable@.
   vkCoverageModulationTableEnable :: VkBool32
-  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkCoverageModulationTableCount"
+  , -- | @coverageModulationTableCount@ is the number of elements in
+  -- @pCoverageModulationTable@.
   vkCoverageModulationTableCount :: Word32
-  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkPCoverageModulationTable"
+  , -- | @pCoverageModulationTable@ is a table of modulation factors containing a
+  -- value for each number of covered samples.
   vkPCoverageModulationTable :: Ptr CFloat
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs b/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
@@ -19,7 +19,9 @@
   )
 
 
--- No documentation found for Nested "VkSubgroupFeatureFlagBits" "VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"
+-- | @VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV@ specifies the device will
+-- accept SPIR-V shader modules that contain the
+-- @GroupNonUniformPartitionedNV@ capability.
 pattern VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV :: VkSubgroupFeatureFlagBits
 pattern VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV = VkSubgroupFeatureFlagBits 0x00000100
 -- No documentation found for TopLevel "VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION"
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
@@ -74,13 +74,11 @@
 -- swizzled
 --
 -- = Description
--- #_description#
 --
--- These values are described in detail in
--- <{html_spec_relative}#vertexpostproc-viewport-swizzle Viewport Swizzle>.
+-- These values are described in detail in [Viewport
+-- Swizzle](https://www.khronos.org/registry/vulkan/specs/1.0-extensions/html/vkspec.html#vertexpostproc-viewport-swizzle).
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkViewportSwizzleNV'
 newtype VkViewportCoordinateSwizzleNV = VkViewportCoordinateSwizzleNV Int32
@@ -150,13 +148,11 @@
 -- | VkPipelineViewportSwizzleStateCreateFlagsNV - Reserved for future use
 --
 -- = Description
--- #_description#
 --
 -- @VkPipelineViewportSwizzleStateCreateFlagsNV@ is a bitmask type for
 -- setting a mask, but is currently reserved for future use.
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineViewportSwizzleStateCreateInfoNV'
 newtype VkPipelineViewportSwizzleStateCreateFlagsNV = VkPipelineViewportSwizzleStateCreateFlagsNV VkFlags
@@ -188,9 +184,6 @@
 pattern VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME = "VK_NV_viewport_swizzle"
 -- | VkViewportSwizzleNV - Structure specifying a viewport swizzle
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @x@ /must/ be a valid 'VkViewportCoordinateSwizzleNV' value
@@ -202,18 +195,21 @@
 -- -   @w@ /must/ be a valid 'VkViewportCoordinateSwizzleNV' value
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineViewportSwizzleStateCreateInfoNV',
 -- 'VkViewportCoordinateSwizzleNV'
 data VkViewportSwizzleNV = VkViewportSwizzleNV
-  { -- No documentation found for Nested "VkViewportSwizzleNV" "vkX"
+  { -- | @x@ is a 'VkViewportCoordinateSwizzleNV' value specifying the swizzle
+  -- operation to apply to the x component of the primitive
   vkX :: VkViewportCoordinateSwizzleNV
-  , -- No documentation found for Nested "VkViewportSwizzleNV" "vkY"
+  , -- | @y@ is a 'VkViewportCoordinateSwizzleNV' value specifying the swizzle
+  -- operation to apply to the y component of the primitive
   vkY :: VkViewportCoordinateSwizzleNV
-  , -- No documentation found for Nested "VkViewportSwizzleNV" "vkZ"
+  , -- | @z@ is a 'VkViewportCoordinateSwizzleNV' value specifying the swizzle
+  -- operation to apply to the z component of the primitive
   vkZ :: VkViewportCoordinateSwizzleNV
-  , -- No documentation found for Nested "VkViewportSwizzleNV" "vkW"
+  , -- | @w@ is a 'VkViewportCoordinateSwizzleNV' value specifying the swizzle
+  -- operation to apply to the w component of the primitive
   vkW :: VkViewportCoordinateSwizzleNV
   }
   deriving (Eq, Show)
@@ -232,9 +228,6 @@
 -- | VkPipelineViewportSwizzleStateCreateInfoNV - Structure specifying
 -- swizzle applied to primitive clip coordinates
 --
--- = Description
--- #_description#
---
 -- == Valid Usage
 --
 -- -   @viewportCount@ /must/ match the @viewportCount@ set in
@@ -250,20 +243,20 @@
 -- -   @viewportCount@ /must/ be greater than @0@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'VkPipelineViewportSwizzleStateCreateFlagsNV',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkViewportSwizzleNV'
 data VkPipelineViewportSwizzleStateCreateInfoNV = VkPipelineViewportSwizzleStateCreateInfoNV
-  { -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkSType"
+  { -- | @sType@ is the type of this structure.
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkPNext"
+  , -- | @pNext@ is @NULL@ or a pointer to an extension-specific structure.
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkFlags"
+  , -- | @flags@ is reserved for future use.
   vkFlags :: VkPipelineViewportSwizzleStateCreateFlagsNV
-  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkViewportCount"
+  , -- | @viewportCount@ is the number of viewport swizzles used by the pipeline.
   vkViewportCount :: Word32
-  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkPViewportSwizzles"
+  , -- | @pViewportSwizzles@ is a pointer to an array of 'VkViewportSwizzleNV'
+  -- structures, defining the viewport swizzles.
   vkPViewportSwizzles :: Ptr VkViewportSwizzleNV
   }
   deriving (Eq, Show)
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs b/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
--- a/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
@@ -48,9 +48,6 @@
 -- | VkWin32KeyedMutexAcquireReleaseInfoNV - use Windows keyex mutex
 -- mechanism to synchronize work
 --
--- = Description
--- #_description#
---
 -- == Valid Usage (Implicit)
 --
 -- -   @sType@ /must/ be
@@ -76,28 +73,38 @@
 --     allocated, or retrieved from the same @VkDevice@
 --
 -- = See Also
--- #_see_also#
 --
 -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory',
 -- 'Graphics.Vulkan.Core10.Core.VkStructureType'
 data VkWin32KeyedMutexAcquireReleaseInfoNV = VkWin32KeyedMutexAcquireReleaseInfoNV
-  { -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkSType"
+  { -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "sType"
   vkSType :: VkStructureType
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPNext"
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "pNext"
   vkPNext :: Ptr ()
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkAcquireCount"
+  , -- | @acquireCount@ is the number of entries in the @pAcquireSyncs@,
+  -- @pAcquireKeys@, and @pAcquireTimeoutMilliseconds@ arrays.
   vkAcquireCount :: Word32
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPAcquireSyncs"
+  , -- | @pAcquireSyncs@ is a pointer to an array of
+  -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory' objects which were
+  -- imported from Direct3D 11 resources.
   vkPAcquireSyncs :: Ptr VkDeviceMemory
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPAcquireKeys"
+  , -- | @pAcquireKeys@ is a pointer to an array of mutex key values to wait for
+  -- prior to beginning the submitted work. Entries refer to the keyed mutex
+  -- associated with the corresponding entries in @pAcquireSyncs@.
   vkPAcquireKeys :: Ptr Word64
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPAcquireTimeoutMilliseconds"
+  , -- | @pAcquireTimeoutMilliseconds@ is an array of timeout values, in
+  -- millisecond units, for each acquire specified in @pAcquireKeys@.
   vkPAcquireTimeoutMilliseconds :: Ptr Word32
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkReleaseCount"
+  , -- | @releaseCount@ is the number of entries in the @pReleaseSyncs@ and
+  -- @pReleaseKeys@ arrays.
   vkReleaseCount :: Word32
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPReleaseSyncs"
+  , -- | @pReleaseSyncs@ is a pointer to an array of
+  -- 'Graphics.Vulkan.Core10.Memory.VkDeviceMemory' objects which were
+  -- imported from Direct3D 11 resources.
   vkPReleaseSyncs :: Ptr VkDeviceMemory
-  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPReleaseKeys"
+  , -- | @pReleaseKeys@ is a pointer to an array of mutex key values to set when
+  -- the submitted work has completed. Entries refer to the keyed mutex
+  -- associated with the corresponding entries in @pReleaseSyncs@.
   vkPReleaseKeys :: Ptr Word64
   }
   deriving (Eq, Show)
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -1,5 +1,8 @@
+-- This file is generated by the 'generate' program in Write.Cabal
+-- Any changes made here will be overwritten when 'generate' is run
+-- again.
 name:                vulkan
-version:             2.0.0.0
+version:             2.0.0.1
 synopsis:            Bindings to the Vulkan graphics API.
 description:         Please see readme.md
 homepage:            http://github.com/expipiplus1/vulkan#readme
@@ -57,7 +60,10 @@
 
 library
   hs-source-dirs:      src
-  ghc-options:         -Wall
+  -- We need to use cpphs, as regular cpp ruins latex math with lines
+  -- ending in backslashes
+  ghc-options:         -Wall -pgmPcpphs -optP--cpp
+  build-depends:       cpphs
   exposed-modules:     Graphics.Vulkan.NamedType
                      , Graphics.Vulkan.Core10.Core
                      , Graphics.Vulkan.Core10.Version
@@ -219,27 +225,27 @@
     cpp-options: -DVK_USE_PLATFORM_ANDROID_KHR
     exposed-modules: Graphics.Vulkan.Extensions.VK_KHR_android_surface
                    , Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
-
+  
   if flag(ios)
     cpp-options: -DVK_USE_PLATFORM_IOS_MVK
     exposed-modules: Graphics.Vulkan.Extensions.VK_MVK_ios_surface
-
+  
   if flag(macos)
     cpp-options: -DVK_USE_PLATFORM_MACOS_MVK
     exposed-modules: Graphics.Vulkan.Extensions.VK_MVK_macos_surface
-
+  
   if flag(mir)
     cpp-options: -DVK_USE_PLATFORM_MIR_KHR
     exposed-modules: Graphics.Vulkan.Extensions.VK_KHR_mir_surface
-
+  
   if flag(vi)
     cpp-options: -DVK_USE_PLATFORM_VI_NN
     exposed-modules: Graphics.Vulkan.Extensions.VK_NN_vi_surface
-
+  
   if flag(wayland)
     cpp-options: -DVK_USE_PLATFORM_WAYLAND_KHR
     exposed-modules: Graphics.Vulkan.Extensions.VK_KHR_wayland_surface
-
+  
   if flag(win32)
     cpp-options: -DVK_USE_PLATFORM_WIN32_KHR
     exposed-modules: Graphics.Vulkan.Extensions.VK_KHR_win32_surface
@@ -249,19 +255,19 @@
                    , Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex
                    , Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32
                    , Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32
-
+  
   if flag(xcb)
     cpp-options: -DVK_USE_PLATFORM_XCB_KHR
     exposed-modules: Graphics.Vulkan.Extensions.VK_KHR_xcb_surface
-
+  
   if flag(xlib)
     cpp-options: -DVK_USE_PLATFORM_XLIB_KHR
     exposed-modules: Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
-
+  
   if flag(xlib_xrandr)
     cpp-options: -DVK_USE_PLATFORM_XLIB_XRANDR_EXT
     exposed-modules: Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display
-
+  
 
   build-depends:       base >= 4.9 && < 5
                      , vector-sized >= 0.1 && < 1.1
