diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,11 @@
 # Change Log
 
+## [2.0.0.0] - 2018-04-20
+  - Total rewrite of the generator
+  - All extensions are in here
+  - Split into core versions
+  - Documentation on most things
+
 ## [1.7.0.0] - 2016-04-13
   - Fix struct member names containing digits being erroneously truncated
 
diff --git a/readme.md b/readme.md
--- a/readme.md
+++ b/readme.md
@@ -9,9 +9,26 @@
 
 ## Current Status
 
-All the core Vulkan functionality is here.
+All the core Vulkan 1.0 and 1.1 functionality is here as well as all the extensions.
 
-This is currently a 64 bit only library, 32 bit support is on the roadmap.
+This is currently a 64 bit only library.
 
 Examples can be found [here](https://github.com/expipiplus1/vulkan-examples)
+
+## Differences from the vulkan API
+
+Bools are strongly typed, this doesn't prevent any valid usage apart from
+passing the numeric literals `0` and `1` to functions.
+
+## Ideas
+
+TODO: Move these to issues:
+
+Wrappers for passing in size, pointer pair
+Wrappers for passing in null terminated list
+
+`withXXX` functions for `create`/`destroy` pairs.
+
+Haddock tables soon:
+https://github.com/haskell/haddock/pull/718
 
diff --git a/src/Graphics/Vulkan.hs b/src/Graphics/Vulkan.hs
--- a/src/Graphics/Vulkan.hs
+++ b/src/Graphics/Vulkan.hs
@@ -1,73 +1,19 @@
+{-# language Strict #-}
+{-# language CPP #-}
+
+
 module Graphics.Vulkan
-  ( module Graphics.Vulkan.Buffer
-  , module Graphics.Vulkan.BufferView
-  , module Graphics.Vulkan.CommandBuffer
-  , module Graphics.Vulkan.CommandBufferBuilding
-  , module Graphics.Vulkan.CommandPool
-  , module Graphics.Vulkan.Constants
-  , module Graphics.Vulkan.Core
-  , module Graphics.Vulkan.DescriptorSet
-  , module Graphics.Vulkan.Device
-  , module Graphics.Vulkan.DeviceInitialization
-  , module Graphics.Vulkan.EXT.DebugReport
-  , module Graphics.Vulkan.Event
-  , module Graphics.Vulkan.ExtensionDiscovery
-  , module Graphics.Vulkan.Fence
-  , module Graphics.Vulkan.Image
-  , module Graphics.Vulkan.ImageView
-  , module Graphics.Vulkan.KHR.Display
-  , module Graphics.Vulkan.KHR.DisplaySwapchain
-  , module Graphics.Vulkan.KHR.Surface
-  , module Graphics.Vulkan.KHR.Swapchain
-  , module Graphics.Vulkan.LayerDiscovery
-  , module Graphics.Vulkan.Memory
-  , module Graphics.Vulkan.MemoryManagement
-  , module Graphics.Vulkan.OtherTypes
-  , module Graphics.Vulkan.Pass
-  , module Graphics.Vulkan.Pipeline
-  , module Graphics.Vulkan.PipelineCache
-  , module Graphics.Vulkan.PipelineLayout
-  , module Graphics.Vulkan.Query
-  , module Graphics.Vulkan.Queue
-  , module Graphics.Vulkan.QueueSemaphore
-  , module Graphics.Vulkan.Sampler
-  , module Graphics.Vulkan.Shader
-  , module Graphics.Vulkan.SparseResourceMemoryManagement
-  , module Graphics.Vulkan.Version
+  (     module Graphics.Vulkan.NamedType
+  , module Graphics.Vulkan.Core10
+  , module Graphics.Vulkan.Core11
+  , module Graphics.Vulkan.Extensions
   ) where
 
-import Graphics.Vulkan.Buffer
-import Graphics.Vulkan.BufferView
-import Graphics.Vulkan.CommandBuffer
-import Graphics.Vulkan.CommandBufferBuilding
-import Graphics.Vulkan.CommandPool
-import Graphics.Vulkan.Constants
-import Graphics.Vulkan.Core
-import Graphics.Vulkan.DescriptorSet
-import Graphics.Vulkan.Device
-import Graphics.Vulkan.DeviceInitialization
-import Graphics.Vulkan.EXT.DebugReport
-import Graphics.Vulkan.Event
-import Graphics.Vulkan.ExtensionDiscovery
-import Graphics.Vulkan.Fence
-import Graphics.Vulkan.Image
-import Graphics.Vulkan.ImageView
-import Graphics.Vulkan.KHR.Display
-import Graphics.Vulkan.KHR.DisplaySwapchain
-import Graphics.Vulkan.KHR.Surface
-import Graphics.Vulkan.KHR.Swapchain
-import Graphics.Vulkan.LayerDiscovery
-import Graphics.Vulkan.Memory
-import Graphics.Vulkan.MemoryManagement
-import Graphics.Vulkan.OtherTypes
-import Graphics.Vulkan.Pass
-import Graphics.Vulkan.Pipeline
-import Graphics.Vulkan.PipelineCache
-import Graphics.Vulkan.PipelineLayout
-import Graphics.Vulkan.Query
-import Graphics.Vulkan.Queue
-import Graphics.Vulkan.QueueSemaphore
-import Graphics.Vulkan.Sampler
-import Graphics.Vulkan.Shader
-import Graphics.Vulkan.SparseResourceMemoryManagement
-import Graphics.Vulkan.Version
+
+import Graphics.Vulkan.NamedType
+import Graphics.Vulkan.Core10
+import Graphics.Vulkan.Core11
+import Graphics.Vulkan.Extensions
+
+
+
diff --git a/src/Graphics/Vulkan/Buffer.hs b/src/Graphics/Vulkan/Buffer.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Buffer.hs
+++ /dev/null
@@ -1,192 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Buffer where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           , VkSharingMode(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** vkCreateBuffer
-foreign import ccall "vkCreateBuffer" vkCreateBuffer ::
-  VkDevice ->
-  Ptr VkBufferCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkBuffer -> IO VkResult
-
--- ** VkBufferCreateFlags
-
-newtype VkBufferCreateFlagBits = VkBufferCreateFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkBufferCreateFlagBits
-type VkBufferCreateFlags = VkBufferCreateFlagBits
-
-instance Show VkBufferCreateFlagBits where
-  showsPrec _ VK_BUFFER_CREATE_SPARSE_BINDING_BIT = showString "VK_BUFFER_CREATE_SPARSE_BINDING_BIT"
-  showsPrec _ VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = showString "VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"
-  showsPrec _ VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = showString "VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"
-  
-  showsPrec p (VkBufferCreateFlagBits x) = showParen (p >= 11) (showString "VkBufferCreateFlagBits " . showsPrec 11 x)
-
-instance Read VkBufferCreateFlagBits where
-  readPrec = parens ( choose [ ("VK_BUFFER_CREATE_SPARSE_BINDING_BIT", pure VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
-                             , ("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT", pure VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
-                             , ("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT", pure VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkBufferCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkBufferCreateFlagBits v)
-                        )
-                    )
-
--- | Buffer should support sparse backing
-pattern VK_BUFFER_CREATE_SPARSE_BINDING_BIT = VkBufferCreateFlagBits 0x1
--- | Buffer should support sparse backing with partial residency
-pattern VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = VkBufferCreateFlagBits 0x2
--- | Buffer should support constent data access to physical memory blocks mapped into multiple locations of sparse buffers
-pattern VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = VkBufferCreateFlagBits 0x4
-
-
--- ** VkBufferUsageFlags
-
-newtype VkBufferUsageFlagBits = VkBufferUsageFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkBufferUsageFlagBits
-type VkBufferUsageFlags = VkBufferUsageFlagBits
-
-instance Show VkBufferUsageFlagBits where
-  showsPrec _ VK_BUFFER_USAGE_TRANSFER_SRC_BIT = showString "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"
-  showsPrec _ VK_BUFFER_USAGE_TRANSFER_DST_BIT = showString "VK_BUFFER_USAGE_TRANSFER_DST_BIT"
-  showsPrec _ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = showString "VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"
-  showsPrec _ VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = showString "VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"
-  showsPrec _ VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = showString "VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"
-  showsPrec _ VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = showString "VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"
-  showsPrec _ VK_BUFFER_USAGE_INDEX_BUFFER_BIT = showString "VK_BUFFER_USAGE_INDEX_BUFFER_BIT"
-  showsPrec _ VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = showString "VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"
-  showsPrec _ VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = showString "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"
-  
-  showsPrec p (VkBufferUsageFlagBits x) = showParen (p >= 11) (showString "VkBufferUsageFlagBits " . showsPrec 11 x)
-
-instance Read VkBufferUsageFlagBits where
-  readPrec = parens ( choose [ ("VK_BUFFER_USAGE_TRANSFER_SRC_BIT", pure VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
-                             , ("VK_BUFFER_USAGE_TRANSFER_DST_BIT", pure VK_BUFFER_USAGE_TRANSFER_DST_BIT)
-                             , ("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT", pure VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
-                             , ("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT", pure VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
-                             , ("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT", pure VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
-                             , ("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT", pure VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
-                             , ("VK_BUFFER_USAGE_INDEX_BUFFER_BIT", pure VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
-                             , ("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT", pure VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
-                             , ("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT", pure VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkBufferUsageFlagBits")
-                        v <- step readPrec
-                        pure (VkBufferUsageFlagBits v)
-                        )
-                    )
-
--- | Can be used as a source of transfer operations
-pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT = VkBufferUsageFlagBits 0x1
--- | Can be used as a destination of transfer operations
-pattern VK_BUFFER_USAGE_TRANSFER_DST_BIT = VkBufferUsageFlagBits 0x2
--- | Can be used as TBO
-pattern VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x4
--- | Can be used as IBO
-pattern VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x8
--- | Can be used as UBO
-pattern VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = VkBufferUsageFlagBits 0x10
--- | Can be used as SSBO
-pattern VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = VkBufferUsageFlagBits 0x20
--- | Can be used as source of fixed-function index fetch (index buffer)
-pattern VK_BUFFER_USAGE_INDEX_BUFFER_BIT = VkBufferUsageFlagBits 0x40
--- | Can be used as source of fixed-function vertex fetch (VBO)
-pattern VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = VkBufferUsageFlagBits 0x80
--- | Can be the source of indirect parameters (e.g. indirect buffer, parameter buffer)
-pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = VkBufferUsageFlagBits 0x100
-
-
--- ** vkDestroyBuffer
-foreign import ccall "vkDestroyBuffer" vkDestroyBuffer ::
-  VkDevice -> VkBuffer -> Ptr VkAllocationCallbacks -> IO ()
-
-newtype VkBuffer = VkBuffer Word64
-  deriving (Eq, Storable)
-
-
-data VkBufferCreateInfo =
-  VkBufferCreateInfo{ vkSType :: VkStructureType 
-                    , vkPNext :: Ptr Void 
-                    , vkFlags :: VkBufferCreateFlags 
-                    , vkSize :: VkDeviceSize 
-                    , vkUsage :: VkBufferUsageFlags 
-                    , vkSharingMode :: VkSharingMode 
-                    , vkQueueFamilyIndexCount :: Word32 
-                    , vkPQueueFamilyIndices :: Ptr Word32 
-                    }
-  deriving (Eq)
-
-instance Storable VkBufferCreateInfo where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkBufferCreateInfo <$> peek (ptr `plusPtr` 0)
-                                <*> peek (ptr `plusPtr` 8)
-                                <*> peek (ptr `plusPtr` 16)
-                                <*> peek (ptr `plusPtr` 24)
-                                <*> 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 :: VkBufferCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkSize (poked :: VkBufferCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkUsage (poked :: VkBufferCreateInfo))
-                *> poke (ptr `plusPtr` 36) (vkSharingMode (poked :: VkBufferCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkQueueFamilyIndexCount (poked :: VkBufferCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkPQueueFamilyIndices (poked :: VkBufferCreateInfo))
-
-
diff --git a/src/Graphics/Vulkan/BufferView.hs b/src/Graphics/Vulkan/BufferView.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/BufferView.hs
+++ /dev/null
@@ -1,86 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.BufferView where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Graphics.Vulkan.Buffer( VkBuffer(..)
-                             )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** vkCreateBufferView
-foreign import ccall "vkCreateBufferView" vkCreateBufferView ::
-  VkDevice ->
-  Ptr VkBufferViewCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkBufferView -> IO VkResult
-
-newtype VkBufferView = VkBufferView Word64
-  deriving (Eq, Storable)
-
-
-data VkBufferViewCreateInfo =
-  VkBufferViewCreateInfo{ vkSType :: VkStructureType 
-                        , vkPNext :: Ptr Void 
-                        , vkFlags :: VkBufferViewCreateFlags 
-                        , vkBuffer :: VkBuffer 
-                        , vkFormat :: VkFormat 
-                        , vkOffset :: VkDeviceSize 
-                        , vkRange :: VkDeviceSize 
-                        }
-  deriving (Eq)
-
-instance Storable VkBufferViewCreateInfo where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkBufferViewCreateInfo <$> 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)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferViewCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferViewCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferViewCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkBuffer (poked :: VkBufferViewCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkFormat (poked :: VkBufferViewCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferViewCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkRange (poked :: VkBufferViewCreateInfo))
-
-
--- ** VkBufferViewCreateFlags
--- | Opaque flag
-newtype VkBufferViewCreateFlags = VkBufferViewCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** vkDestroyBufferView
-foreign import ccall "vkDestroyBufferView" vkDestroyBufferView ::
-  VkDevice -> VkBufferView -> Ptr VkAllocationCallbacks -> IO ()
-
diff --git a/src/Graphics/Vulkan/CommandBuffer.hs b/src/Graphics/Vulkan/CommandBuffer.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/CommandBuffer.hs
+++ /dev/null
@@ -1,245 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.CommandBuffer where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Graphics.Vulkan.Pass( VkFramebuffer(..)
-                           , VkRenderPass(..)
-                           )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Graphics.Vulkan.CommandPool( VkCommandPool(..)
-                                  )
-import Data.Void( Void
-                )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Query( VkQueryPipelineStatisticFlags(..)
-                            , VkQueryControlFlagBits(..)
-                            , VkQueryControlFlags(..)
-                            , VkQueryPipelineStatisticFlagBits(..)
-                            )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-
--- ** VkCommandBufferLevel
-
-newtype VkCommandBufferLevel = VkCommandBufferLevel Int32
-  deriving (Eq, Storable)
-
-instance Show VkCommandBufferLevel where
-  showsPrec _ VK_COMMAND_BUFFER_LEVEL_PRIMARY = showString "VK_COMMAND_BUFFER_LEVEL_PRIMARY"
-  showsPrec _ VK_COMMAND_BUFFER_LEVEL_SECONDARY = showString "VK_COMMAND_BUFFER_LEVEL_SECONDARY"
-  showsPrec p (VkCommandBufferLevel x) = showParen (p >= 11) (showString "VkCommandBufferLevel " . showsPrec 11 x)
-
-instance Read VkCommandBufferLevel where
-  readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_LEVEL_PRIMARY", pure VK_COMMAND_BUFFER_LEVEL_PRIMARY)
-                             , ("VK_COMMAND_BUFFER_LEVEL_SECONDARY", pure VK_COMMAND_BUFFER_LEVEL_SECONDARY)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCommandBufferLevel")
-                        v <- step readPrec
-                        pure (VkCommandBufferLevel v)
-                        )
-                    )
-
-
-pattern VK_COMMAND_BUFFER_LEVEL_PRIMARY = VkCommandBufferLevel 0
-
-pattern VK_COMMAND_BUFFER_LEVEL_SECONDARY = VkCommandBufferLevel 1
-
--- ** vkAllocateCommandBuffers
-foreign import ccall "vkAllocateCommandBuffers" vkAllocateCommandBuffers ::
-  VkDevice ->
-  Ptr VkCommandBufferAllocateInfo ->
-    Ptr VkCommandBuffer -> IO VkResult
-
--- ** vkResetCommandBuffer
-foreign import ccall "vkResetCommandBuffer" vkResetCommandBuffer ::
-  VkCommandBuffer -> VkCommandBufferResetFlags -> IO VkResult
-
--- ** vkFreeCommandBuffers
-foreign import ccall "vkFreeCommandBuffers" vkFreeCommandBuffers ::
-  VkDevice -> VkCommandPool -> Word32 -> Ptr VkCommandBuffer -> IO ()
-
--- ** VkCommandBufferUsageFlags
-
-newtype VkCommandBufferUsageFlagBits = VkCommandBufferUsageFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkCommandBufferUsageFlagBits
-type VkCommandBufferUsageFlags = VkCommandBufferUsageFlagBits
-
-instance Show VkCommandBufferUsageFlagBits where
-  showsPrec _ VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = showString "VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"
-  showsPrec _ VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = showString "VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"
-  showsPrec _ VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = showString "VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"
-  
-  showsPrec p (VkCommandBufferUsageFlagBits x) = showParen (p >= 11) (showString "VkCommandBufferUsageFlagBits " . showsPrec 11 x)
-
-instance Read VkCommandBufferUsageFlagBits where
-  readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT", pure VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
-                             , ("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", pure VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
-                             , ("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT", pure VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCommandBufferUsageFlagBits")
-                        v <- step readPrec
-                        pure (VkCommandBufferUsageFlagBits v)
-                        )
-                    )
-
-
-pattern VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = VkCommandBufferUsageFlagBits 0x1
-
-pattern VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = VkCommandBufferUsageFlagBits 0x2
--- | Command buffer may be submitted/executed more than once simultaneously
-pattern VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = VkCommandBufferUsageFlagBits 0x4
-
-
-
-data VkCommandBufferBeginInfo =
-  VkCommandBufferBeginInfo{ vkSType :: VkStructureType 
-                          , vkPNext :: Ptr Void 
-                          , vkFlags :: VkCommandBufferUsageFlags 
-                          , vkPInheritanceInfo :: Ptr VkCommandBufferInheritanceInfo 
-                          }
-  deriving (Eq)
-
-instance Storable VkCommandBufferBeginInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkCommandBufferBeginInfo <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 8)
-                                      <*> peek (ptr `plusPtr` 16)
-                                      <*> peek (ptr `plusPtr` 24)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferBeginInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferBeginInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkCommandBufferBeginInfo))
-                *> poke (ptr `plusPtr` 24) (vkPInheritanceInfo (poked :: VkCommandBufferBeginInfo))
-
-
-
-data VkCommandBufferInheritanceInfo =
-  VkCommandBufferInheritanceInfo{ vkSType :: VkStructureType 
-                                , vkPNext :: Ptr Void 
-                                , vkRenderPass :: VkRenderPass 
-                                , vkSubpass :: Word32 
-                                , vkFramebuffer :: VkFramebuffer 
-                                , vkOcclusionQueryEnable :: VkBool32 
-                                , vkQueryFlags :: VkQueryControlFlags 
-                                , vkPipelineStatistics :: VkQueryPipelineStatisticFlags 
-                                }
-  deriving (Eq)
-
-instance Storable VkCommandBufferInheritanceInfo where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkCommandBufferInheritanceInfo <$> 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)
-                                            <*> peek (ptr `plusPtr` 48)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferInheritanceInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferInheritanceInfo))
-                *> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkCommandBufferInheritanceInfo))
-                *> poke (ptr `plusPtr` 24) (vkSubpass (poked :: VkCommandBufferInheritanceInfo))
-                *> poke (ptr `plusPtr` 32) (vkFramebuffer (poked :: VkCommandBufferInheritanceInfo))
-                *> poke (ptr `plusPtr` 40) (vkOcclusionQueryEnable (poked :: VkCommandBufferInheritanceInfo))
-                *> poke (ptr `plusPtr` 44) (vkQueryFlags (poked :: VkCommandBufferInheritanceInfo))
-                *> poke (ptr `plusPtr` 48) (vkPipelineStatistics (poked :: VkCommandBufferInheritanceInfo))
-
-
-data VkCommandBuffer_T
-type VkCommandBuffer = Ptr VkCommandBuffer_T
-
--- ** VkCommandBufferResetFlags
-
-newtype VkCommandBufferResetFlagBits = VkCommandBufferResetFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkCommandBufferResetFlagBits
-type VkCommandBufferResetFlags = VkCommandBufferResetFlagBits
-
-instance Show VkCommandBufferResetFlagBits where
-  showsPrec _ VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = showString "VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"
-  
-  showsPrec p (VkCommandBufferResetFlagBits x) = showParen (p >= 11) (showString "VkCommandBufferResetFlagBits " . showsPrec 11 x)
-
-instance Read VkCommandBufferResetFlagBits where
-  readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT", pure VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCommandBufferResetFlagBits")
-                        v <- step readPrec
-                        pure (VkCommandBufferResetFlagBits v)
-                        )
-                    )
-
--- | Release resources owned by the buffer
-pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = VkCommandBufferResetFlagBits 0x1
-
-
--- ** vkEndCommandBuffer
-foreign import ccall "vkEndCommandBuffer" vkEndCommandBuffer ::
-  VkCommandBuffer -> IO VkResult
-
--- ** vkBeginCommandBuffer
-foreign import ccall "vkBeginCommandBuffer" vkBeginCommandBuffer ::
-  VkCommandBuffer -> Ptr VkCommandBufferBeginInfo -> IO VkResult
-
-
-data VkCommandBufferAllocateInfo =
-  VkCommandBufferAllocateInfo{ vkSType :: VkStructureType 
-                             , vkPNext :: Ptr Void 
-                             , vkCommandPool :: VkCommandPool 
-                             , vkLevel :: VkCommandBufferLevel 
-                             , vkCommandBufferCount :: Word32 
-                             }
-  deriving (Eq)
-
-instance Storable VkCommandBufferAllocateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkCommandBufferAllocateInfo <$> peek (ptr `plusPtr` 0)
-                                         <*> peek (ptr `plusPtr` 8)
-                                         <*> peek (ptr `plusPtr` 16)
-                                         <*> peek (ptr `plusPtr` 24)
-                                         <*> peek (ptr `plusPtr` 28)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferAllocateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferAllocateInfo))
-                *> poke (ptr `plusPtr` 16) (vkCommandPool (poked :: VkCommandBufferAllocateInfo))
-                *> poke (ptr `plusPtr` 24) (vkLevel (poked :: VkCommandBufferAllocateInfo))
-                *> poke (ptr `plusPtr` 28) (vkCommandBufferCount (poked :: VkCommandBufferAllocateInfo))
-
-
diff --git a/src/Graphics/Vulkan/CommandBufferBuilding.hs b/src/Graphics/Vulkan/CommandBufferBuilding.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/CommandBufferBuilding.hs
+++ /dev/null
@@ -1,677 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.CommandBufferBuilding where
-
-import Data.Vector.Storable.Sized( Vector
-                                 )
-import Graphics.Vulkan.Buffer( VkBuffer(..)
-                             )
-import Graphics.Vulkan.Pass( VkDependencyFlagBits(..)
-                           , VkFramebuffer(..)
-                           , VkRenderPass(..)
-                           , VkAccessFlags(..)
-                           , VkDependencyFlags(..)
-                           , VkAccessFlagBits(..)
-                           )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import Graphics.Vulkan.Event( VkEvent(..)
-                            )
-import GHC.Read( expectP
-               , choose
-               )
-import Graphics.Vulkan.Pipeline( VkPipelineStageFlagBits(..)
-                               , VkPipelineStageFlags(..)
-                               , VkPipeline(..)
-                               , VkPipelineBindPoint(..)
-                               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , castPtr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.DescriptorSet( VkDescriptorSet(..)
-                                    )
-import Graphics.Vulkan.CommandBuffer( VkCommandBuffer(..)
-                                    )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.PipelineLayout( VkPipelineLayout(..)
-                                     )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)
-                             , VkShaderStageFlags(..)
-                             )
-import Graphics.Vulkan.Sampler( VkFilter(..)
-                              )
-import Graphics.Vulkan.Image( VkImage(..)
-                            , VkImageLayout(..)
-                            , VkImageAspectFlagBits(..)
-                            , VkImageSubresourceRange(..)
-                            , VkImageAspectFlags(..)
-                            )
-import Graphics.Vulkan.Query( VkQueryResultFlagBits(..)
-                            , VkQueryControlFlagBits(..)
-                            , VkQueryControlFlags(..)
-                            , VkQueryPool(..)
-                            , VkQueryResultFlags(..)
-                            )
-import Graphics.Vulkan.OtherTypes( VkImageMemoryBarrier(..)
-                                 , VkMemoryBarrier(..)
-                                 , VkBufferMemoryBarrier(..)
-                                 )
-import Graphics.Vulkan.Core( VkExtent3D(..)
-                           , VkDeviceSize(..)
-                           , VkExtent2D(..)
-                           , VkFlags(..)
-                           , VkOffset2D(..)
-                           , VkOffset3D(..)
-                           , VkRect2D(..)
-                           , VkViewport(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CFloat
-                      , CFloat(..)
-                      )
-
--- ** vkCmdPushConstants
-foreign import ccall "vkCmdPushConstants" vkCmdPushConstants ::
-  VkCommandBuffer ->
-  VkPipelineLayout ->
-    VkShaderStageFlags -> Word32 -> Word32 -> Ptr Void -> IO ()
-
--- ** vkCmdSetStencilWriteMask
-foreign import ccall "vkCmdSetStencilWriteMask" vkCmdSetStencilWriteMask ::
-  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()
-
--- ** vkCmdBindIndexBuffer
-foreign import ccall "vkCmdBindIndexBuffer" vkCmdBindIndexBuffer ::
-  VkCommandBuffer -> VkBuffer -> VkDeviceSize -> VkIndexType -> IO ()
-
--- ** vkCmdResetQueryPool
-foreign import ccall "vkCmdResetQueryPool" vkCmdResetQueryPool ::
-  VkCommandBuffer -> VkQueryPool -> Word32 -> Word32 -> IO ()
-
--- ** vkCmdResolveImage
-foreign import ccall "vkCmdResolveImage" vkCmdResolveImage ::
-  VkCommandBuffer ->
-  VkImage ->
-    VkImageLayout ->
-      VkImage -> VkImageLayout -> Word32 -> Ptr VkImageResolve -> IO ()
-
--- ** vkCmdBindPipeline
-foreign import ccall "vkCmdBindPipeline" vkCmdBindPipeline ::
-  VkCommandBuffer -> VkPipelineBindPoint -> VkPipeline -> IO ()
-
--- ** vkCmdBindVertexBuffers
-foreign import ccall "vkCmdBindVertexBuffers" vkCmdBindVertexBuffers ::
-  VkCommandBuffer ->
-  Word32 -> Word32 -> Ptr VkBuffer -> Ptr VkDeviceSize -> IO ()
-
--- ** vkCmdDraw
-foreign import ccall "vkCmdDraw" vkCmdDraw ::
-  VkCommandBuffer -> Word32 -> Word32 -> Word32 -> Word32 -> IO ()
-
-
-data VkImageCopy =
-  VkImageCopy{ vkSrcSubresource :: VkImageSubresourceLayers 
-             , vkSrcOffset :: VkOffset3D 
-             , vkDstSubresource :: VkImageSubresourceLayers 
-             , vkDstOffset :: VkOffset3D 
-             , vkExtent :: VkExtent3D 
-             }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCmdNextSubpass
-foreign import ccall "vkCmdNextSubpass" vkCmdNextSubpass ::
-  VkCommandBuffer -> VkSubpassContents -> IO ()
-
--- ** vkCmdEndQuery
-foreign import ccall "vkCmdEndQuery" vkCmdEndQuery ::
-  VkCommandBuffer -> VkQueryPool -> Word32 -> IO ()
-
--- ** vkCmdSetScissor
-foreign import ccall "vkCmdSetScissor" vkCmdSetScissor ::
-  VkCommandBuffer -> Word32 -> Word32 -> Ptr VkRect2D -> IO ()
-
--- ** vkCmdSetEvent
-foreign import ccall "vkCmdSetEvent" vkCmdSetEvent ::
-  VkCommandBuffer -> VkEvent -> VkPipelineStageFlags -> IO ()
-
--- ** vkCmdCopyImageToBuffer
-foreign import ccall "vkCmdCopyImageToBuffer" vkCmdCopyImageToBuffer ::
-  VkCommandBuffer ->
-  VkImage ->
-    VkImageLayout ->
-      VkBuffer -> Word32 -> Ptr VkBufferImageCopy -> IO ()
-
--- ** vkCmdDispatchIndirect
-foreign import ccall "vkCmdDispatchIndirect" vkCmdDispatchIndirect ::
-  VkCommandBuffer -> VkBuffer -> VkDeviceSize -> IO ()
-
--- ** vkCmdBeginQuery
-foreign import ccall "vkCmdBeginQuery" vkCmdBeginQuery ::
-  VkCommandBuffer ->
-  VkQueryPool -> Word32 -> VkQueryControlFlags -> IO ()
-
--- ** vkCmdEndRenderPass
-foreign import ccall "vkCmdEndRenderPass" vkCmdEndRenderPass ::
-  VkCommandBuffer -> IO ()
-
--- ** vkCmdFillBuffer
-foreign import ccall "vkCmdFillBuffer" vkCmdFillBuffer ::
-  VkCommandBuffer ->
-  VkBuffer -> VkDeviceSize -> VkDeviceSize -> Word32 -> IO ()
-
-
-data VkClearRect =
-  VkClearRect{ vkRect :: VkRect2D 
-             , vkBaseArrayLayer :: Word32 
-             , vkLayerCount :: Word32 
-             }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCmdWaitEvents
-foreign import ccall "vkCmdWaitEvents" vkCmdWaitEvents ::
-  VkCommandBuffer ->
-  Word32 ->
-    Ptr VkEvent ->
-      VkPipelineStageFlags ->
-        VkPipelineStageFlags ->
-          Word32 ->
-            Ptr VkMemoryBarrier ->
-              Word32 ->
-                Ptr VkBufferMemoryBarrier ->
-                  Word32 -> Ptr VkImageMemoryBarrier -> IO ()
-
--- ** vkCmdClearColorImage
-foreign import ccall "vkCmdClearColorImage" vkCmdClearColorImage ::
-  VkCommandBuffer ->
-  VkImage ->
-    VkImageLayout ->
-      Ptr VkClearColorValue ->
-        Word32 -> Ptr VkImageSubresourceRange -> IO ()
-
--- ** VkIndexType
-
-newtype VkIndexType = VkIndexType Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_INDEX_TYPE_UINT16 = VkIndexType 0
-
-pattern VK_INDEX_TYPE_UINT32 = VkIndexType 1
-
-
-data VkBufferImageCopy =
-  VkBufferImageCopy{ vkBufferOffset :: VkDeviceSize 
-                   , vkBufferRowLength :: Word32 
-                   , vkBufferImageHeight :: Word32 
-                   , vkImageSubresource :: VkImageSubresourceLayers 
-                   , vkImageOffset :: VkOffset3D 
-                   , vkImageExtent :: VkExtent3D 
-                   }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCmdSetDepthBounds
-foreign import ccall "vkCmdSetDepthBounds" vkCmdSetDepthBounds ::
-  VkCommandBuffer -> CFloat -> CFloat -> IO ()
-
--- ** vkCmdCopyBufferToImage
-foreign import ccall "vkCmdCopyBufferToImage" vkCmdCopyBufferToImage ::
-  VkCommandBuffer ->
-  VkBuffer ->
-    VkImage ->
-      VkImageLayout -> Word32 -> Ptr VkBufferImageCopy -> IO ()
-
--- ** vkCmdDrawIndexedIndirect
-foreign import ccall "vkCmdDrawIndexedIndirect" vkCmdDrawIndexedIndirect ::
-  VkCommandBuffer ->
-  VkBuffer -> VkDeviceSize -> Word32 -> Word32 -> IO ()
-
--- ** vkCmdUpdateBuffer
-foreign import ccall "vkCmdUpdateBuffer" vkCmdUpdateBuffer ::
-  VkCommandBuffer ->
-  VkBuffer -> VkDeviceSize -> VkDeviceSize -> Ptr Word32 -> IO ()
-
--- ** vkCmdCopyImage
-foreign import ccall "vkCmdCopyImage" vkCmdCopyImage ::
-  VkCommandBuffer ->
-  VkImage ->
-    VkImageLayout ->
-      VkImage -> VkImageLayout -> Word32 -> Ptr VkImageCopy -> IO ()
-
--- ** vkCmdWriteTimestamp
-foreign import ccall "vkCmdWriteTimestamp" vkCmdWriteTimestamp ::
-  VkCommandBuffer ->
-  VkPipelineStageFlagBits -> VkQueryPool -> Word32 -> IO ()
-
-
-data VkImageSubresourceLayers =
-  VkImageSubresourceLayers{ vkAspectMask :: VkImageAspectFlags 
-                          , vkMipLevel :: Word32 
-                          , vkBaseArrayLayer :: Word32 
-                          , vkLayerCount :: Word32 
-                          }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCmdDrawIndexed
-foreign import ccall "vkCmdDrawIndexed" vkCmdDrawIndexed ::
-  VkCommandBuffer ->
-  Word32 -> Word32 -> Word32 -> Int32 -> Word32 -> IO ()
-
--- ** vkCmdSetDepthBias
-foreign import ccall "vkCmdSetDepthBias" vkCmdSetDepthBias ::
-  VkCommandBuffer -> CFloat -> CFloat -> CFloat -> IO ()
-
--- ** vkCmdDrawIndirect
-foreign import ccall "vkCmdDrawIndirect" vkCmdDrawIndirect ::
-  VkCommandBuffer ->
-  VkBuffer -> VkDeviceSize -> Word32 -> Word32 -> IO ()
-
-
-data VkClearDepthStencilValue =
-  VkClearDepthStencilValue{ vkDepth :: CFloat 
-                          , vkStencil :: Word32 
-                          }
-  deriving (Eq)
-
-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))
-
-
-
-data VkBufferCopy =
-  VkBufferCopy{ vkSrcOffset :: VkDeviceSize 
-              , vkDstOffset :: VkDeviceSize 
-              , vkSize :: VkDeviceSize 
-              }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCmdClearAttachments
-foreign import ccall "vkCmdClearAttachments" vkCmdClearAttachments ::
-  VkCommandBuffer ->
-  Word32 ->
-    Ptr VkClearAttachment -> Word32 -> Ptr VkClearRect -> IO ()
-
--- ** vkCmdSetViewport
-foreign import ccall "vkCmdSetViewport" vkCmdSetViewport ::
-  VkCommandBuffer -> Word32 -> Word32 -> Ptr VkViewport -> IO ()
-
--- ** vkCmdCopyBuffer
-foreign import ccall "vkCmdCopyBuffer" vkCmdCopyBuffer ::
-  VkCommandBuffer ->
-  VkBuffer -> VkBuffer -> Word32 -> Ptr VkBufferCopy -> IO ()
-
--- ** vkCmdBindDescriptorSets
-foreign import ccall "vkCmdBindDescriptorSets" vkCmdBindDescriptorSets ::
-  VkCommandBuffer ->
-  VkPipelineBindPoint ->
-    VkPipelineLayout ->
-      Word32 ->
-        Word32 -> Ptr VkDescriptorSet -> Word32 -> Ptr Word32 -> IO ()
-
--- ** vkCmdSetLineWidth
-foreign import ccall "vkCmdSetLineWidth" vkCmdSetLineWidth ::
-  VkCommandBuffer -> CFloat -> IO ()
-
--- ** vkCmdExecuteCommands
-foreign import ccall "vkCmdExecuteCommands" vkCmdExecuteCommands ::
-  VkCommandBuffer -> Word32 -> Ptr VkCommandBuffer -> IO ()
-
-
-data VkRenderPassBeginInfo =
-  VkRenderPassBeginInfo{ vkSType :: VkStructureType 
-                       , vkPNext :: Ptr Void 
-                       , vkRenderPass :: VkRenderPass 
-                       , vkFramebuffer :: VkFramebuffer 
-                       , vkRenderArea :: VkRect2D 
-                       , vkClearValueCount :: Word32 
-                       , vkPClearValues :: Ptr VkClearValue 
-                       }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCmdSetStencilCompareMask
-foreign import ccall "vkCmdSetStencilCompareMask" vkCmdSetStencilCompareMask ::
-  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()
-
-
-data VkImageBlit =
-  VkImageBlit{ vkSrcSubresource :: VkImageSubresourceLayers 
-             , vkSrcOffsets :: Vector 2 VkOffset3D 
-             , vkDstSubresource :: VkImageSubresourceLayers 
-             , vkDstOffsets :: Vector 2 VkOffset3D 
-             }
-  deriving (Eq)
-
-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))
-
-
-
-data VkClearAttachment =
-  VkClearAttachment{ vkAspectMask :: VkImageAspectFlags 
-                   , vkColorAttachment :: Word32 
-                   , vkClearValue :: VkClearValue 
-                   }
-  deriving (Eq)
-
-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))
-
-
--- | // Union allowing specification of color or depth and stencil values. Actual value selected is based on attachment being cleared.
-data VkClearValue = VkColor VkClearColorValue 
-                  | VkDepthStencil VkClearDepthStencilValue 
-  deriving (Eq)
-
--- | _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 poked = case poked of
-                     VkColor e -> poke (castPtr ptr) e
-                     VkDepthStencil e -> poke (castPtr ptr) e
-
-
--- ** VkStencilFaceFlags
-
-newtype VkStencilFaceFlagBits = VkStencilFaceFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkStencilFaceFlagBits
-type VkStencilFaceFlags = VkStencilFaceFlagBits
-
-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)
-                        )
-                    )
-
--- | Front face
-pattern VK_STENCIL_FACE_FRONT_BIT = VkStencilFaceFlagBits 0x1
--- | Back face
-pattern VK_STENCIL_FACE_BACK_BIT = VkStencilFaceFlagBits 0x2
--- | Front and back faces
-pattern VK_STENCIL_FRONT_AND_BACK = VkStencilFaceFlagBits 0x3
-
--- | // Union allowing specification of floating point, integer, or unsigned integer color data. Actual value selected is based on image/attachment being cleared.
-data VkClearColorValue = VkFloat32 (Vector 4 CFloat) 
-                       | VkInt32 (Vector 4 Int32) 
-                       | VkUint32 (Vector 4 Word32) 
-  deriving (Eq)
-
--- | _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 poked = case poked of
-                     VkFloat32 e -> poke (castPtr ptr) e
-                     VkInt32 e -> poke (castPtr ptr) e
-                     VkUint32 e -> poke (castPtr ptr) e
-
-
--- ** VkSubpassContents
-
-newtype VkSubpassContents = VkSubpassContents Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_SUBPASS_CONTENTS_INLINE = VkSubpassContents 0
-
-pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS = VkSubpassContents 1
-
--- ** vkCmdCopyQueryPoolResults
-foreign import ccall "vkCmdCopyQueryPoolResults" vkCmdCopyQueryPoolResults ::
-  VkCommandBuffer ->
-  VkQueryPool ->
-    Word32 ->
-      Word32 ->
-        VkBuffer ->
-          VkDeviceSize -> VkDeviceSize -> VkQueryResultFlags -> IO ()
-
--- ** vkCmdBlitImage
-foreign import ccall "vkCmdBlitImage" vkCmdBlitImage ::
-  VkCommandBuffer ->
-  VkImage ->
-    VkImageLayout ->
-      VkImage ->
-        VkImageLayout -> Word32 -> Ptr VkImageBlit -> VkFilter -> IO ()
-
--- ** vkCmdSetBlendConstants
-foreign import ccall "vkCmdSetBlendConstants" vkCmdSetBlendConstants ::
-  VkCommandBuffer -> Ptr CFloat -> IO ()
-
--- ** vkCmdClearDepthStencilImage
-foreign import ccall "vkCmdClearDepthStencilImage" vkCmdClearDepthStencilImage ::
-  VkCommandBuffer ->
-  VkImage ->
-    VkImageLayout ->
-      Ptr VkClearDepthStencilValue ->
-        Word32 -> Ptr VkImageSubresourceRange -> IO ()
-
-
-data VkImageResolve =
-  VkImageResolve{ vkSrcSubresource :: VkImageSubresourceLayers 
-                , vkSrcOffset :: VkOffset3D 
-                , vkDstSubresource :: VkImageSubresourceLayers 
-                , vkDstOffset :: VkOffset3D 
-                , vkExtent :: VkExtent3D 
-                }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCmdDispatch
-foreign import ccall "vkCmdDispatch" vkCmdDispatch ::
-  VkCommandBuffer -> Word32 -> Word32 -> Word32 -> IO ()
-
--- ** vkCmdSetStencilReference
-foreign import ccall "vkCmdSetStencilReference" vkCmdSetStencilReference ::
-  VkCommandBuffer -> VkStencilFaceFlags -> Word32 -> IO ()
-
--- ** vkCmdPipelineBarrier
-foreign import ccall "vkCmdPipelineBarrier" vkCmdPipelineBarrier ::
-  VkCommandBuffer ->
-  VkPipelineStageFlags ->
-    VkPipelineStageFlags ->
-      VkDependencyFlags ->
-        Word32 ->
-          Ptr VkMemoryBarrier ->
-            Word32 ->
-              Ptr VkBufferMemoryBarrier ->
-                Word32 -> Ptr VkImageMemoryBarrier -> IO ()
-
--- ** vkCmdBeginRenderPass
-foreign import ccall "vkCmdBeginRenderPass" vkCmdBeginRenderPass ::
-  VkCommandBuffer ->
-  Ptr VkRenderPassBeginInfo -> VkSubpassContents -> IO ()
-
--- ** vkCmdResetEvent
-foreign import ccall "vkCmdResetEvent" vkCmdResetEvent ::
-  VkCommandBuffer -> VkEvent -> VkPipelineStageFlags -> IO ()
-
diff --git a/src/Graphics/Vulkan/CommandPool.hs b/src/Graphics/Vulkan/CommandPool.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/CommandPool.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.CommandPool where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
-
-data VkCommandPoolCreateInfo =
-  VkCommandPoolCreateInfo{ vkSType :: VkStructureType 
-                         , vkPNext :: Ptr Void 
-                         , vkFlags :: VkCommandPoolCreateFlags 
-                         , vkQueueFamilyIndex :: Word32 
-                         }
-  deriving (Eq)
-
-instance Storable VkCommandPoolCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkCommandPoolCreateInfo <$> 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 :: VkCommandPoolCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandPoolCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkCommandPoolCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkCommandPoolCreateInfo))
-
-
--- ** vkDestroyCommandPool
-foreign import ccall "vkDestroyCommandPool" vkDestroyCommandPool ::
-  VkDevice -> VkCommandPool -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** vkResetCommandPool
-foreign import ccall "vkResetCommandPool" vkResetCommandPool ::
-  VkDevice -> VkCommandPool -> VkCommandPoolResetFlags -> IO VkResult
-
--- ** VkCommandPoolCreateFlags
-
-newtype VkCommandPoolCreateFlagBits = VkCommandPoolCreateFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkCommandPoolCreateFlagBits
-type VkCommandPoolCreateFlags = VkCommandPoolCreateFlagBits
-
-instance Show VkCommandPoolCreateFlagBits where
-  showsPrec _ VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = showString "VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"
-  showsPrec _ VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = showString "VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"
-  
-  showsPrec p (VkCommandPoolCreateFlagBits x) = showParen (p >= 11) (showString "VkCommandPoolCreateFlagBits " . showsPrec 11 x)
-
-instance Read VkCommandPoolCreateFlagBits where
-  readPrec = parens ( choose [ ("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT", pure VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
-                             , ("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT", pure VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCommandPoolCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkCommandPoolCreateFlagBits v)
-                        )
-                    )
-
--- | Command buffers have a short lifetime
-pattern VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = VkCommandPoolCreateFlagBits 0x1
--- | Command buffers may release their memory individually
-pattern VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = VkCommandPoolCreateFlagBits 0x2
-
-
--- ** vkCreateCommandPool
-foreign import ccall "vkCreateCommandPool" vkCreateCommandPool ::
-  VkDevice ->
-  Ptr VkCommandPoolCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkCommandPool -> IO VkResult
-
--- ** VkCommandPoolResetFlags
-
-newtype VkCommandPoolResetFlagBits = VkCommandPoolResetFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkCommandPoolResetFlagBits
-type VkCommandPoolResetFlags = VkCommandPoolResetFlagBits
-
-instance Show VkCommandPoolResetFlagBits where
-  showsPrec _ VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = showString "VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"
-  
-  showsPrec p (VkCommandPoolResetFlagBits x) = showParen (p >= 11) (showString "VkCommandPoolResetFlagBits " . showsPrec 11 x)
-
-instance Read VkCommandPoolResetFlagBits where
-  readPrec = parens ( choose [ ("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT", pure VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCommandPoolResetFlagBits")
-                        v <- step readPrec
-                        pure (VkCommandPoolResetFlagBits v)
-                        )
-                    )
-
--- | Release resources owned by the pool
-pattern VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = VkCommandPoolResetFlagBits 0x1
-
-
-newtype VkCommandPool = VkCommandPool Word64
-  deriving (Eq, Storable)
-
diff --git a/src/Graphics/Vulkan/Constants.hs b/src/Graphics/Vulkan/Constants.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Constants.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Constants where
-
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Data.Int( Int32
-               )
-import Foreign.Storable( Storable(..)
-                       )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-
-
-pattern VK_SUBPASS_EXTERNAL = 0xffffffff :: Word32
-
-pattern VK_UUID_SIZE = 16
-type VK_UUID_SIZE = 16
-
-pattern VK_REMAINING_MIP_LEVELS = 0xffffffff :: Word32
-
-pattern VK_LOD_CLAMP_NONE = 1000.0
-
-pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
-type VK_MAX_PHYSICAL_DEVICE_NAME_SIZE = 256
-
-pattern VK_ATTACHMENT_UNUSED = 0xffffffff :: Word32
-
-pattern VK_MAX_MEMORY_TYPES = 32
-type VK_MAX_MEMORY_TYPES = 32
-
-pattern VK_WHOLE_SIZE = 0xffffffffffffffff :: Word64
-
-pattern VK_REMAINING_ARRAY_LAYERS = 0xffffffff :: Word32
-
-pattern VK_QUEUE_FAMILY_IGNORED = 0xffffffff :: Word32
-
-pattern VK_MAX_MEMORY_HEAPS = 16
-type VK_MAX_MEMORY_HEAPS = 16
-
-pattern VK_FALSE = 0
-type VK_FALSE = 0
--- ** VkPipelineCacheHeaderVersion
-
-newtype VkPipelineCacheHeaderVersion = VkPipelineCacheHeaderVersion Int32
-  deriving (Eq, Storable)
-
-instance Show VkPipelineCacheHeaderVersion where
-  showsPrec _ VK_PIPELINE_CACHE_HEADER_VERSION_ONE = showString "VK_PIPELINE_CACHE_HEADER_VERSION_ONE"
-  showsPrec p (VkPipelineCacheHeaderVersion x) = showParen (p >= 11) (showString "VkPipelineCacheHeaderVersion " . showsPrec 11 x)
-
-instance Read VkPipelineCacheHeaderVersion where
-  readPrec = parens ( choose [ ("VK_PIPELINE_CACHE_HEADER_VERSION_ONE", pure VK_PIPELINE_CACHE_HEADER_VERSION_ONE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineCacheHeaderVersion")
-                        v <- step readPrec
-                        pure (VkPipelineCacheHeaderVersion v)
-                        )
-                    )
-
-
-pattern VK_PIPELINE_CACHE_HEADER_VERSION_ONE = VkPipelineCacheHeaderVersion 1
-
-
-pattern VK_MAX_EXTENSION_NAME_SIZE = 256
-type VK_MAX_EXTENSION_NAME_SIZE = 256
-
-pattern VK_MAX_DESCRIPTION_SIZE = 256
-type VK_MAX_DESCRIPTION_SIZE = 256
-
-pattern VK_TRUE = 1
-type VK_TRUE = 1
diff --git a/src/Graphics/Vulkan/Core.hs b/src/Graphics/Vulkan/Core.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Core.hs
+++ /dev/null
@@ -1,1253 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Core where
-
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Foreign.Storable( Storable(..)
-                       )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Foreign.C.Types( CFloat
-                      , CFloat(..)
-                      )
-
-newtype VkDeviceSize = VkDeviceSize Word64
-  deriving (Eq, Storable)
-
--- ** VkFormat
--- | Vulkan format definitions
-newtype VkFormat = VkFormat Int32
-  deriving (Eq, Storable)
-
-instance Show VkFormat where
-  showsPrec _ VK_FORMAT_UNDEFINED = showString "VK_FORMAT_UNDEFINED"
-  showsPrec _ VK_FORMAT_R4G4_UNORM_PACK8 = showString "VK_FORMAT_R4G4_UNORM_PACK8"
-  showsPrec _ VK_FORMAT_R4G4B4A4_UNORM_PACK16 = showString "VK_FORMAT_R4G4B4A4_UNORM_PACK16"
-  showsPrec _ VK_FORMAT_B4G4R4A4_UNORM_PACK16 = showString "VK_FORMAT_B4G4R4A4_UNORM_PACK16"
-  showsPrec _ VK_FORMAT_R5G6B5_UNORM_PACK16 = showString "VK_FORMAT_R5G6B5_UNORM_PACK16"
-  showsPrec _ VK_FORMAT_B5G6R5_UNORM_PACK16 = showString "VK_FORMAT_B5G6R5_UNORM_PACK16"
-  showsPrec _ VK_FORMAT_R5G5B5A1_UNORM_PACK16 = showString "VK_FORMAT_R5G5B5A1_UNORM_PACK16"
-  showsPrec _ VK_FORMAT_B5G5R5A1_UNORM_PACK16 = showString "VK_FORMAT_B5G5R5A1_UNORM_PACK16"
-  showsPrec _ VK_FORMAT_A1R5G5B5_UNORM_PACK16 = showString "VK_FORMAT_A1R5G5B5_UNORM_PACK16"
-  showsPrec _ VK_FORMAT_R8_UNORM = showString "VK_FORMAT_R8_UNORM"
-  showsPrec _ VK_FORMAT_R8_SNORM = showString "VK_FORMAT_R8_SNORM"
-  showsPrec _ VK_FORMAT_R8_USCALED = showString "VK_FORMAT_R8_USCALED"
-  showsPrec _ VK_FORMAT_R8_SSCALED = showString "VK_FORMAT_R8_SSCALED"
-  showsPrec _ VK_FORMAT_R8_UINT = showString "VK_FORMAT_R8_UINT"
-  showsPrec _ VK_FORMAT_R8_SINT = showString "VK_FORMAT_R8_SINT"
-  showsPrec _ VK_FORMAT_R8_SRGB = showString "VK_FORMAT_R8_SRGB"
-  showsPrec _ VK_FORMAT_R8G8_UNORM = showString "VK_FORMAT_R8G8_UNORM"
-  showsPrec _ VK_FORMAT_R8G8_SNORM = showString "VK_FORMAT_R8G8_SNORM"
-  showsPrec _ VK_FORMAT_R8G8_USCALED = showString "VK_FORMAT_R8G8_USCALED"
-  showsPrec _ VK_FORMAT_R8G8_SSCALED = showString "VK_FORMAT_R8G8_SSCALED"
-  showsPrec _ VK_FORMAT_R8G8_UINT = showString "VK_FORMAT_R8G8_UINT"
-  showsPrec _ VK_FORMAT_R8G8_SINT = showString "VK_FORMAT_R8G8_SINT"
-  showsPrec _ VK_FORMAT_R8G8_SRGB = showString "VK_FORMAT_R8G8_SRGB"
-  showsPrec _ VK_FORMAT_R8G8B8_UNORM = showString "VK_FORMAT_R8G8B8_UNORM"
-  showsPrec _ VK_FORMAT_R8G8B8_SNORM = showString "VK_FORMAT_R8G8B8_SNORM"
-  showsPrec _ VK_FORMAT_R8G8B8_USCALED = showString "VK_FORMAT_R8G8B8_USCALED"
-  showsPrec _ VK_FORMAT_R8G8B8_SSCALED = showString "VK_FORMAT_R8G8B8_SSCALED"
-  showsPrec _ VK_FORMAT_R8G8B8_UINT = showString "VK_FORMAT_R8G8B8_UINT"
-  showsPrec _ VK_FORMAT_R8G8B8_SINT = showString "VK_FORMAT_R8G8B8_SINT"
-  showsPrec _ VK_FORMAT_R8G8B8_SRGB = showString "VK_FORMAT_R8G8B8_SRGB"
-  showsPrec _ VK_FORMAT_B8G8R8_UNORM = showString "VK_FORMAT_B8G8R8_UNORM"
-  showsPrec _ VK_FORMAT_B8G8R8_SNORM = showString "VK_FORMAT_B8G8R8_SNORM"
-  showsPrec _ VK_FORMAT_B8G8R8_USCALED = showString "VK_FORMAT_B8G8R8_USCALED"
-  showsPrec _ VK_FORMAT_B8G8R8_SSCALED = showString "VK_FORMAT_B8G8R8_SSCALED"
-  showsPrec _ VK_FORMAT_B8G8R8_UINT = showString "VK_FORMAT_B8G8R8_UINT"
-  showsPrec _ VK_FORMAT_B8G8R8_SINT = showString "VK_FORMAT_B8G8R8_SINT"
-  showsPrec _ VK_FORMAT_B8G8R8_SRGB = showString "VK_FORMAT_B8G8R8_SRGB"
-  showsPrec _ VK_FORMAT_R8G8B8A8_UNORM = showString "VK_FORMAT_R8G8B8A8_UNORM"
-  showsPrec _ VK_FORMAT_R8G8B8A8_SNORM = showString "VK_FORMAT_R8G8B8A8_SNORM"
-  showsPrec _ VK_FORMAT_R8G8B8A8_USCALED = showString "VK_FORMAT_R8G8B8A8_USCALED"
-  showsPrec _ VK_FORMAT_R8G8B8A8_SSCALED = showString "VK_FORMAT_R8G8B8A8_SSCALED"
-  showsPrec _ VK_FORMAT_R8G8B8A8_UINT = showString "VK_FORMAT_R8G8B8A8_UINT"
-  showsPrec _ VK_FORMAT_R8G8B8A8_SINT = showString "VK_FORMAT_R8G8B8A8_SINT"
-  showsPrec _ VK_FORMAT_R8G8B8A8_SRGB = showString "VK_FORMAT_R8G8B8A8_SRGB"
-  showsPrec _ VK_FORMAT_B8G8R8A8_UNORM = showString "VK_FORMAT_B8G8R8A8_UNORM"
-  showsPrec _ VK_FORMAT_B8G8R8A8_SNORM = showString "VK_FORMAT_B8G8R8A8_SNORM"
-  showsPrec _ VK_FORMAT_B8G8R8A8_USCALED = showString "VK_FORMAT_B8G8R8A8_USCALED"
-  showsPrec _ VK_FORMAT_B8G8R8A8_SSCALED = showString "VK_FORMAT_B8G8R8A8_SSCALED"
-  showsPrec _ VK_FORMAT_B8G8R8A8_UINT = showString "VK_FORMAT_B8G8R8A8_UINT"
-  showsPrec _ VK_FORMAT_B8G8R8A8_SINT = showString "VK_FORMAT_B8G8R8A8_SINT"
-  showsPrec _ VK_FORMAT_B8G8R8A8_SRGB = showString "VK_FORMAT_B8G8R8A8_SRGB"
-  showsPrec _ VK_FORMAT_A8B8G8R8_UNORM_PACK32 = showString "VK_FORMAT_A8B8G8R8_UNORM_PACK32"
-  showsPrec _ VK_FORMAT_A8B8G8R8_SNORM_PACK32 = showString "VK_FORMAT_A8B8G8R8_SNORM_PACK32"
-  showsPrec _ VK_FORMAT_A8B8G8R8_USCALED_PACK32 = showString "VK_FORMAT_A8B8G8R8_USCALED_PACK32"
-  showsPrec _ VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = showString "VK_FORMAT_A8B8G8R8_SSCALED_PACK32"
-  showsPrec _ VK_FORMAT_A8B8G8R8_UINT_PACK32 = showString "VK_FORMAT_A8B8G8R8_UINT_PACK32"
-  showsPrec _ VK_FORMAT_A8B8G8R8_SINT_PACK32 = showString "VK_FORMAT_A8B8G8R8_SINT_PACK32"
-  showsPrec _ VK_FORMAT_A8B8G8R8_SRGB_PACK32 = showString "VK_FORMAT_A8B8G8R8_SRGB_PACK32"
-  showsPrec _ VK_FORMAT_A2R10G10B10_UNORM_PACK32 = showString "VK_FORMAT_A2R10G10B10_UNORM_PACK32"
-  showsPrec _ VK_FORMAT_A2R10G10B10_SNORM_PACK32 = showString "VK_FORMAT_A2R10G10B10_SNORM_PACK32"
-  showsPrec _ VK_FORMAT_A2R10G10B10_USCALED_PACK32 = showString "VK_FORMAT_A2R10G10B10_USCALED_PACK32"
-  showsPrec _ VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = showString "VK_FORMAT_A2R10G10B10_SSCALED_PACK32"
-  showsPrec _ VK_FORMAT_A2R10G10B10_UINT_PACK32 = showString "VK_FORMAT_A2R10G10B10_UINT_PACK32"
-  showsPrec _ VK_FORMAT_A2R10G10B10_SINT_PACK32 = showString "VK_FORMAT_A2R10G10B10_SINT_PACK32"
-  showsPrec _ VK_FORMAT_A2B10G10R10_UNORM_PACK32 = showString "VK_FORMAT_A2B10G10R10_UNORM_PACK32"
-  showsPrec _ VK_FORMAT_A2B10G10R10_SNORM_PACK32 = showString "VK_FORMAT_A2B10G10R10_SNORM_PACK32"
-  showsPrec _ VK_FORMAT_A2B10G10R10_USCALED_PACK32 = showString "VK_FORMAT_A2B10G10R10_USCALED_PACK32"
-  showsPrec _ VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = showString "VK_FORMAT_A2B10G10R10_SSCALED_PACK32"
-  showsPrec _ VK_FORMAT_A2B10G10R10_UINT_PACK32 = showString "VK_FORMAT_A2B10G10R10_UINT_PACK32"
-  showsPrec _ VK_FORMAT_A2B10G10R10_SINT_PACK32 = showString "VK_FORMAT_A2B10G10R10_SINT_PACK32"
-  showsPrec _ VK_FORMAT_R16_UNORM = showString "VK_FORMAT_R16_UNORM"
-  showsPrec _ VK_FORMAT_R16_SNORM = showString "VK_FORMAT_R16_SNORM"
-  showsPrec _ VK_FORMAT_R16_USCALED = showString "VK_FORMAT_R16_USCALED"
-  showsPrec _ VK_FORMAT_R16_SSCALED = showString "VK_FORMAT_R16_SSCALED"
-  showsPrec _ VK_FORMAT_R16_UINT = showString "VK_FORMAT_R16_UINT"
-  showsPrec _ VK_FORMAT_R16_SINT = showString "VK_FORMAT_R16_SINT"
-  showsPrec _ VK_FORMAT_R16_SFLOAT = showString "VK_FORMAT_R16_SFLOAT"
-  showsPrec _ VK_FORMAT_R16G16_UNORM = showString "VK_FORMAT_R16G16_UNORM"
-  showsPrec _ VK_FORMAT_R16G16_SNORM = showString "VK_FORMAT_R16G16_SNORM"
-  showsPrec _ VK_FORMAT_R16G16_USCALED = showString "VK_FORMAT_R16G16_USCALED"
-  showsPrec _ VK_FORMAT_R16G16_SSCALED = showString "VK_FORMAT_R16G16_SSCALED"
-  showsPrec _ VK_FORMAT_R16G16_UINT = showString "VK_FORMAT_R16G16_UINT"
-  showsPrec _ VK_FORMAT_R16G16_SINT = showString "VK_FORMAT_R16G16_SINT"
-  showsPrec _ VK_FORMAT_R16G16_SFLOAT = showString "VK_FORMAT_R16G16_SFLOAT"
-  showsPrec _ VK_FORMAT_R16G16B16_UNORM = showString "VK_FORMAT_R16G16B16_UNORM"
-  showsPrec _ VK_FORMAT_R16G16B16_SNORM = showString "VK_FORMAT_R16G16B16_SNORM"
-  showsPrec _ VK_FORMAT_R16G16B16_USCALED = showString "VK_FORMAT_R16G16B16_USCALED"
-  showsPrec _ VK_FORMAT_R16G16B16_SSCALED = showString "VK_FORMAT_R16G16B16_SSCALED"
-  showsPrec _ VK_FORMAT_R16G16B16_UINT = showString "VK_FORMAT_R16G16B16_UINT"
-  showsPrec _ VK_FORMAT_R16G16B16_SINT = showString "VK_FORMAT_R16G16B16_SINT"
-  showsPrec _ VK_FORMAT_R16G16B16_SFLOAT = showString "VK_FORMAT_R16G16B16_SFLOAT"
-  showsPrec _ VK_FORMAT_R16G16B16A16_UNORM = showString "VK_FORMAT_R16G16B16A16_UNORM"
-  showsPrec _ VK_FORMAT_R16G16B16A16_SNORM = showString "VK_FORMAT_R16G16B16A16_SNORM"
-  showsPrec _ VK_FORMAT_R16G16B16A16_USCALED = showString "VK_FORMAT_R16G16B16A16_USCALED"
-  showsPrec _ VK_FORMAT_R16G16B16A16_SSCALED = showString "VK_FORMAT_R16G16B16A16_SSCALED"
-  showsPrec _ VK_FORMAT_R16G16B16A16_UINT = showString "VK_FORMAT_R16G16B16A16_UINT"
-  showsPrec _ VK_FORMAT_R16G16B16A16_SINT = showString "VK_FORMAT_R16G16B16A16_SINT"
-  showsPrec _ VK_FORMAT_R16G16B16A16_SFLOAT = showString "VK_FORMAT_R16G16B16A16_SFLOAT"
-  showsPrec _ VK_FORMAT_R32_UINT = showString "VK_FORMAT_R32_UINT"
-  showsPrec _ VK_FORMAT_R32_SINT = showString "VK_FORMAT_R32_SINT"
-  showsPrec _ VK_FORMAT_R32_SFLOAT = showString "VK_FORMAT_R32_SFLOAT"
-  showsPrec _ VK_FORMAT_R32G32_UINT = showString "VK_FORMAT_R32G32_UINT"
-  showsPrec _ VK_FORMAT_R32G32_SINT = showString "VK_FORMAT_R32G32_SINT"
-  showsPrec _ VK_FORMAT_R32G32_SFLOAT = showString "VK_FORMAT_R32G32_SFLOAT"
-  showsPrec _ VK_FORMAT_R32G32B32_UINT = showString "VK_FORMAT_R32G32B32_UINT"
-  showsPrec _ VK_FORMAT_R32G32B32_SINT = showString "VK_FORMAT_R32G32B32_SINT"
-  showsPrec _ VK_FORMAT_R32G32B32_SFLOAT = showString "VK_FORMAT_R32G32B32_SFLOAT"
-  showsPrec _ VK_FORMAT_R32G32B32A32_UINT = showString "VK_FORMAT_R32G32B32A32_UINT"
-  showsPrec _ VK_FORMAT_R32G32B32A32_SINT = showString "VK_FORMAT_R32G32B32A32_SINT"
-  showsPrec _ VK_FORMAT_R32G32B32A32_SFLOAT = showString "VK_FORMAT_R32G32B32A32_SFLOAT"
-  showsPrec _ VK_FORMAT_R64_UINT = showString "VK_FORMAT_R64_UINT"
-  showsPrec _ VK_FORMAT_R64_SINT = showString "VK_FORMAT_R64_SINT"
-  showsPrec _ VK_FORMAT_R64_SFLOAT = showString "VK_FORMAT_R64_SFLOAT"
-  showsPrec _ VK_FORMAT_R64G64_UINT = showString "VK_FORMAT_R64G64_UINT"
-  showsPrec _ VK_FORMAT_R64G64_SINT = showString "VK_FORMAT_R64G64_SINT"
-  showsPrec _ VK_FORMAT_R64G64_SFLOAT = showString "VK_FORMAT_R64G64_SFLOAT"
-  showsPrec _ VK_FORMAT_R64G64B64_UINT = showString "VK_FORMAT_R64G64B64_UINT"
-  showsPrec _ VK_FORMAT_R64G64B64_SINT = showString "VK_FORMAT_R64G64B64_SINT"
-  showsPrec _ VK_FORMAT_R64G64B64_SFLOAT = showString "VK_FORMAT_R64G64B64_SFLOAT"
-  showsPrec _ VK_FORMAT_R64G64B64A64_UINT = showString "VK_FORMAT_R64G64B64A64_UINT"
-  showsPrec _ VK_FORMAT_R64G64B64A64_SINT = showString "VK_FORMAT_R64G64B64A64_SINT"
-  showsPrec _ VK_FORMAT_R64G64B64A64_SFLOAT = showString "VK_FORMAT_R64G64B64A64_SFLOAT"
-  showsPrec _ VK_FORMAT_B10G11R11_UFLOAT_PACK32 = showString "VK_FORMAT_B10G11R11_UFLOAT_PACK32"
-  showsPrec _ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = showString "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32"
-  showsPrec _ VK_FORMAT_D16_UNORM = showString "VK_FORMAT_D16_UNORM"
-  showsPrec _ VK_FORMAT_X8_D24_UNORM_PACK32 = showString "VK_FORMAT_X8_D24_UNORM_PACK32"
-  showsPrec _ VK_FORMAT_D32_SFLOAT = showString "VK_FORMAT_D32_SFLOAT"
-  showsPrec _ VK_FORMAT_S8_UINT = showString "VK_FORMAT_S8_UINT"
-  showsPrec _ VK_FORMAT_D16_UNORM_S8_UINT = showString "VK_FORMAT_D16_UNORM_S8_UINT"
-  showsPrec _ VK_FORMAT_D24_UNORM_S8_UINT = showString "VK_FORMAT_D24_UNORM_S8_UINT"
-  showsPrec _ VK_FORMAT_D32_SFLOAT_S8_UINT = showString "VK_FORMAT_D32_SFLOAT_S8_UINT"
-  showsPrec _ VK_FORMAT_BC1_RGB_UNORM_BLOCK = showString "VK_FORMAT_BC1_RGB_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC1_RGB_SRGB_BLOCK = showString "VK_FORMAT_BC1_RGB_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_BC1_RGBA_UNORM_BLOCK = showString "VK_FORMAT_BC1_RGBA_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC1_RGBA_SRGB_BLOCK = showString "VK_FORMAT_BC1_RGBA_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_BC2_UNORM_BLOCK = showString "VK_FORMAT_BC2_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC2_SRGB_BLOCK = showString "VK_FORMAT_BC2_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_BC3_UNORM_BLOCK = showString "VK_FORMAT_BC3_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC3_SRGB_BLOCK = showString "VK_FORMAT_BC3_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_BC4_UNORM_BLOCK = showString "VK_FORMAT_BC4_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC4_SNORM_BLOCK = showString "VK_FORMAT_BC4_SNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC5_UNORM_BLOCK = showString "VK_FORMAT_BC5_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC5_SNORM_BLOCK = showString "VK_FORMAT_BC5_SNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC6H_UFLOAT_BLOCK = showString "VK_FORMAT_BC6H_UFLOAT_BLOCK"
-  showsPrec _ VK_FORMAT_BC6H_SFLOAT_BLOCK = showString "VK_FORMAT_BC6H_SFLOAT_BLOCK"
-  showsPrec _ VK_FORMAT_BC7_UNORM_BLOCK = showString "VK_FORMAT_BC7_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_BC7_SRGB_BLOCK = showString "VK_FORMAT_BC7_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_EAC_R11_UNORM_BLOCK = showString "VK_FORMAT_EAC_R11_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_EAC_R11_SNORM_BLOCK = showString "VK_FORMAT_EAC_R11_SNORM_BLOCK"
-  showsPrec _ VK_FORMAT_EAC_R11G11_UNORM_BLOCK = showString "VK_FORMAT_EAC_R11G11_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_EAC_R11G11_SNORM_BLOCK = showString "VK_FORMAT_EAC_R11G11_SNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_4x4_UNORM_BLOCK = showString "VK_FORMAT_ASTC_4x4_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_4x4_SRGB_BLOCK = showString "VK_FORMAT_ASTC_4x4_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_5x4_UNORM_BLOCK = showString "VK_FORMAT_ASTC_5x4_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_5x4_SRGB_BLOCK = showString "VK_FORMAT_ASTC_5x4_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_5x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_5x5_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_5x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_5x5_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_6x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_6x5_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_6x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_6x5_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_6x6_UNORM_BLOCK = showString "VK_FORMAT_ASTC_6x6_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_6x6_SRGB_BLOCK = showString "VK_FORMAT_ASTC_6x6_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_8x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_8x5_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_8x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_8x5_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_8x6_UNORM_BLOCK = showString "VK_FORMAT_ASTC_8x6_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_8x6_SRGB_BLOCK = showString "VK_FORMAT_ASTC_8x6_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_8x8_UNORM_BLOCK = showString "VK_FORMAT_ASTC_8x8_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_8x8_SRGB_BLOCK = showString "VK_FORMAT_ASTC_8x8_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x5_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x5_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x6_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x6_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x6_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x6_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x8_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x8_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x8_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x8_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x10_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x10_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_10x10_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x10_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_12x10_UNORM_BLOCK = showString "VK_FORMAT_ASTC_12x10_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_12x10_SRGB_BLOCK = showString "VK_FORMAT_ASTC_12x10_SRGB_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_12x12_UNORM_BLOCK = showString "VK_FORMAT_ASTC_12x12_UNORM_BLOCK"
-  showsPrec _ VK_FORMAT_ASTC_12x12_SRGB_BLOCK = showString "VK_FORMAT_ASTC_12x12_SRGB_BLOCK"
-  showsPrec p (VkFormat x) = showParen (p >= 11) (showString "VkFormat " . showsPrec 11 x)
-
-instance Read VkFormat where
-  readPrec = parens ( choose [ ("VK_FORMAT_UNDEFINED", pure VK_FORMAT_UNDEFINED)
-                             , ("VK_FORMAT_R4G4_UNORM_PACK8", pure VK_FORMAT_R4G4_UNORM_PACK8)
-                             , ("VK_FORMAT_R4G4B4A4_UNORM_PACK16", pure VK_FORMAT_R4G4B4A4_UNORM_PACK16)
-                             , ("VK_FORMAT_B4G4R4A4_UNORM_PACK16", pure VK_FORMAT_B4G4R4A4_UNORM_PACK16)
-                             , ("VK_FORMAT_R5G6B5_UNORM_PACK16", pure VK_FORMAT_R5G6B5_UNORM_PACK16)
-                             , ("VK_FORMAT_B5G6R5_UNORM_PACK16", pure VK_FORMAT_B5G6R5_UNORM_PACK16)
-                             , ("VK_FORMAT_R5G5B5A1_UNORM_PACK16", pure VK_FORMAT_R5G5B5A1_UNORM_PACK16)
-                             , ("VK_FORMAT_B5G5R5A1_UNORM_PACK16", pure VK_FORMAT_B5G5R5A1_UNORM_PACK16)
-                             , ("VK_FORMAT_A1R5G5B5_UNORM_PACK16", pure VK_FORMAT_A1R5G5B5_UNORM_PACK16)
-                             , ("VK_FORMAT_R8_UNORM", pure VK_FORMAT_R8_UNORM)
-                             , ("VK_FORMAT_R8_SNORM", pure VK_FORMAT_R8_SNORM)
-                             , ("VK_FORMAT_R8_USCALED", pure VK_FORMAT_R8_USCALED)
-                             , ("VK_FORMAT_R8_SSCALED", pure VK_FORMAT_R8_SSCALED)
-                             , ("VK_FORMAT_R8_UINT", pure VK_FORMAT_R8_UINT)
-                             , ("VK_FORMAT_R8_SINT", pure VK_FORMAT_R8_SINT)
-                             , ("VK_FORMAT_R8_SRGB", pure VK_FORMAT_R8_SRGB)
-                             , ("VK_FORMAT_R8G8_UNORM", pure VK_FORMAT_R8G8_UNORM)
-                             , ("VK_FORMAT_R8G8_SNORM", pure VK_FORMAT_R8G8_SNORM)
-                             , ("VK_FORMAT_R8G8_USCALED", pure VK_FORMAT_R8G8_USCALED)
-                             , ("VK_FORMAT_R8G8_SSCALED", pure VK_FORMAT_R8G8_SSCALED)
-                             , ("VK_FORMAT_R8G8_UINT", pure VK_FORMAT_R8G8_UINT)
-                             , ("VK_FORMAT_R8G8_SINT", pure VK_FORMAT_R8G8_SINT)
-                             , ("VK_FORMAT_R8G8_SRGB", pure VK_FORMAT_R8G8_SRGB)
-                             , ("VK_FORMAT_R8G8B8_UNORM", pure VK_FORMAT_R8G8B8_UNORM)
-                             , ("VK_FORMAT_R8G8B8_SNORM", pure VK_FORMAT_R8G8B8_SNORM)
-                             , ("VK_FORMAT_R8G8B8_USCALED", pure VK_FORMAT_R8G8B8_USCALED)
-                             , ("VK_FORMAT_R8G8B8_SSCALED", pure VK_FORMAT_R8G8B8_SSCALED)
-                             , ("VK_FORMAT_R8G8B8_UINT", pure VK_FORMAT_R8G8B8_UINT)
-                             , ("VK_FORMAT_R8G8B8_SINT", pure VK_FORMAT_R8G8B8_SINT)
-                             , ("VK_FORMAT_R8G8B8_SRGB", pure VK_FORMAT_R8G8B8_SRGB)
-                             , ("VK_FORMAT_B8G8R8_UNORM", pure VK_FORMAT_B8G8R8_UNORM)
-                             , ("VK_FORMAT_B8G8R8_SNORM", pure VK_FORMAT_B8G8R8_SNORM)
-                             , ("VK_FORMAT_B8G8R8_USCALED", pure VK_FORMAT_B8G8R8_USCALED)
-                             , ("VK_FORMAT_B8G8R8_SSCALED", pure VK_FORMAT_B8G8R8_SSCALED)
-                             , ("VK_FORMAT_B8G8R8_UINT", pure VK_FORMAT_B8G8R8_UINT)
-                             , ("VK_FORMAT_B8G8R8_SINT", pure VK_FORMAT_B8G8R8_SINT)
-                             , ("VK_FORMAT_B8G8R8_SRGB", pure VK_FORMAT_B8G8R8_SRGB)
-                             , ("VK_FORMAT_R8G8B8A8_UNORM", pure VK_FORMAT_R8G8B8A8_UNORM)
-                             , ("VK_FORMAT_R8G8B8A8_SNORM", pure VK_FORMAT_R8G8B8A8_SNORM)
-                             , ("VK_FORMAT_R8G8B8A8_USCALED", pure VK_FORMAT_R8G8B8A8_USCALED)
-                             , ("VK_FORMAT_R8G8B8A8_SSCALED", pure VK_FORMAT_R8G8B8A8_SSCALED)
-                             , ("VK_FORMAT_R8G8B8A8_UINT", pure VK_FORMAT_R8G8B8A8_UINT)
-                             , ("VK_FORMAT_R8G8B8A8_SINT", pure VK_FORMAT_R8G8B8A8_SINT)
-                             , ("VK_FORMAT_R8G8B8A8_SRGB", pure VK_FORMAT_R8G8B8A8_SRGB)
-                             , ("VK_FORMAT_B8G8R8A8_UNORM", pure VK_FORMAT_B8G8R8A8_UNORM)
-                             , ("VK_FORMAT_B8G8R8A8_SNORM", pure VK_FORMAT_B8G8R8A8_SNORM)
-                             , ("VK_FORMAT_B8G8R8A8_USCALED", pure VK_FORMAT_B8G8R8A8_USCALED)
-                             , ("VK_FORMAT_B8G8R8A8_SSCALED", pure VK_FORMAT_B8G8R8A8_SSCALED)
-                             , ("VK_FORMAT_B8G8R8A8_UINT", pure VK_FORMAT_B8G8R8A8_UINT)
-                             , ("VK_FORMAT_B8G8R8A8_SINT", pure VK_FORMAT_B8G8R8A8_SINT)
-                             , ("VK_FORMAT_B8G8R8A8_SRGB", pure VK_FORMAT_B8G8R8A8_SRGB)
-                             , ("VK_FORMAT_A8B8G8R8_UNORM_PACK32", pure VK_FORMAT_A8B8G8R8_UNORM_PACK32)
-                             , ("VK_FORMAT_A8B8G8R8_SNORM_PACK32", pure VK_FORMAT_A8B8G8R8_SNORM_PACK32)
-                             , ("VK_FORMAT_A8B8G8R8_USCALED_PACK32", pure VK_FORMAT_A8B8G8R8_USCALED_PACK32)
-                             , ("VK_FORMAT_A8B8G8R8_SSCALED_PACK32", pure VK_FORMAT_A8B8G8R8_SSCALED_PACK32)
-                             , ("VK_FORMAT_A8B8G8R8_UINT_PACK32", pure VK_FORMAT_A8B8G8R8_UINT_PACK32)
-                             , ("VK_FORMAT_A8B8G8R8_SINT_PACK32", pure VK_FORMAT_A8B8G8R8_SINT_PACK32)
-                             , ("VK_FORMAT_A8B8G8R8_SRGB_PACK32", pure VK_FORMAT_A8B8G8R8_SRGB_PACK32)
-                             , ("VK_FORMAT_A2R10G10B10_UNORM_PACK32", pure VK_FORMAT_A2R10G10B10_UNORM_PACK32)
-                             , ("VK_FORMAT_A2R10G10B10_SNORM_PACK32", pure VK_FORMAT_A2R10G10B10_SNORM_PACK32)
-                             , ("VK_FORMAT_A2R10G10B10_USCALED_PACK32", pure VK_FORMAT_A2R10G10B10_USCALED_PACK32)
-                             , ("VK_FORMAT_A2R10G10B10_SSCALED_PACK32", pure VK_FORMAT_A2R10G10B10_SSCALED_PACK32)
-                             , ("VK_FORMAT_A2R10G10B10_UINT_PACK32", pure VK_FORMAT_A2R10G10B10_UINT_PACK32)
-                             , ("VK_FORMAT_A2R10G10B10_SINT_PACK32", pure VK_FORMAT_A2R10G10B10_SINT_PACK32)
-                             , ("VK_FORMAT_A2B10G10R10_UNORM_PACK32", pure VK_FORMAT_A2B10G10R10_UNORM_PACK32)
-                             , ("VK_FORMAT_A2B10G10R10_SNORM_PACK32", pure VK_FORMAT_A2B10G10R10_SNORM_PACK32)
-                             , ("VK_FORMAT_A2B10G10R10_USCALED_PACK32", pure VK_FORMAT_A2B10G10R10_USCALED_PACK32)
-                             , ("VK_FORMAT_A2B10G10R10_SSCALED_PACK32", pure VK_FORMAT_A2B10G10R10_SSCALED_PACK32)
-                             , ("VK_FORMAT_A2B10G10R10_UINT_PACK32", pure VK_FORMAT_A2B10G10R10_UINT_PACK32)
-                             , ("VK_FORMAT_A2B10G10R10_SINT_PACK32", pure VK_FORMAT_A2B10G10R10_SINT_PACK32)
-                             , ("VK_FORMAT_R16_UNORM", pure VK_FORMAT_R16_UNORM)
-                             , ("VK_FORMAT_R16_SNORM", pure VK_FORMAT_R16_SNORM)
-                             , ("VK_FORMAT_R16_USCALED", pure VK_FORMAT_R16_USCALED)
-                             , ("VK_FORMAT_R16_SSCALED", pure VK_FORMAT_R16_SSCALED)
-                             , ("VK_FORMAT_R16_UINT", pure VK_FORMAT_R16_UINT)
-                             , ("VK_FORMAT_R16_SINT", pure VK_FORMAT_R16_SINT)
-                             , ("VK_FORMAT_R16_SFLOAT", pure VK_FORMAT_R16_SFLOAT)
-                             , ("VK_FORMAT_R16G16_UNORM", pure VK_FORMAT_R16G16_UNORM)
-                             , ("VK_FORMAT_R16G16_SNORM", pure VK_FORMAT_R16G16_SNORM)
-                             , ("VK_FORMAT_R16G16_USCALED", pure VK_FORMAT_R16G16_USCALED)
-                             , ("VK_FORMAT_R16G16_SSCALED", pure VK_FORMAT_R16G16_SSCALED)
-                             , ("VK_FORMAT_R16G16_UINT", pure VK_FORMAT_R16G16_UINT)
-                             , ("VK_FORMAT_R16G16_SINT", pure VK_FORMAT_R16G16_SINT)
-                             , ("VK_FORMAT_R16G16_SFLOAT", pure VK_FORMAT_R16G16_SFLOAT)
-                             , ("VK_FORMAT_R16G16B16_UNORM", pure VK_FORMAT_R16G16B16_UNORM)
-                             , ("VK_FORMAT_R16G16B16_SNORM", pure VK_FORMAT_R16G16B16_SNORM)
-                             , ("VK_FORMAT_R16G16B16_USCALED", pure VK_FORMAT_R16G16B16_USCALED)
-                             , ("VK_FORMAT_R16G16B16_SSCALED", pure VK_FORMAT_R16G16B16_SSCALED)
-                             , ("VK_FORMAT_R16G16B16_UINT", pure VK_FORMAT_R16G16B16_UINT)
-                             , ("VK_FORMAT_R16G16B16_SINT", pure VK_FORMAT_R16G16B16_SINT)
-                             , ("VK_FORMAT_R16G16B16_SFLOAT", pure VK_FORMAT_R16G16B16_SFLOAT)
-                             , ("VK_FORMAT_R16G16B16A16_UNORM", pure VK_FORMAT_R16G16B16A16_UNORM)
-                             , ("VK_FORMAT_R16G16B16A16_SNORM", pure VK_FORMAT_R16G16B16A16_SNORM)
-                             , ("VK_FORMAT_R16G16B16A16_USCALED", pure VK_FORMAT_R16G16B16A16_USCALED)
-                             , ("VK_FORMAT_R16G16B16A16_SSCALED", pure VK_FORMAT_R16G16B16A16_SSCALED)
-                             , ("VK_FORMAT_R16G16B16A16_UINT", pure VK_FORMAT_R16G16B16A16_UINT)
-                             , ("VK_FORMAT_R16G16B16A16_SINT", pure VK_FORMAT_R16G16B16A16_SINT)
-                             , ("VK_FORMAT_R16G16B16A16_SFLOAT", pure VK_FORMAT_R16G16B16A16_SFLOAT)
-                             , ("VK_FORMAT_R32_UINT", pure VK_FORMAT_R32_UINT)
-                             , ("VK_FORMAT_R32_SINT", pure VK_FORMAT_R32_SINT)
-                             , ("VK_FORMAT_R32_SFLOAT", pure VK_FORMAT_R32_SFLOAT)
-                             , ("VK_FORMAT_R32G32_UINT", pure VK_FORMAT_R32G32_UINT)
-                             , ("VK_FORMAT_R32G32_SINT", pure VK_FORMAT_R32G32_SINT)
-                             , ("VK_FORMAT_R32G32_SFLOAT", pure VK_FORMAT_R32G32_SFLOAT)
-                             , ("VK_FORMAT_R32G32B32_UINT", pure VK_FORMAT_R32G32B32_UINT)
-                             , ("VK_FORMAT_R32G32B32_SINT", pure VK_FORMAT_R32G32B32_SINT)
-                             , ("VK_FORMAT_R32G32B32_SFLOAT", pure VK_FORMAT_R32G32B32_SFLOAT)
-                             , ("VK_FORMAT_R32G32B32A32_UINT", pure VK_FORMAT_R32G32B32A32_UINT)
-                             , ("VK_FORMAT_R32G32B32A32_SINT", pure VK_FORMAT_R32G32B32A32_SINT)
-                             , ("VK_FORMAT_R32G32B32A32_SFLOAT", pure VK_FORMAT_R32G32B32A32_SFLOAT)
-                             , ("VK_FORMAT_R64_UINT", pure VK_FORMAT_R64_UINT)
-                             , ("VK_FORMAT_R64_SINT", pure VK_FORMAT_R64_SINT)
-                             , ("VK_FORMAT_R64_SFLOAT", pure VK_FORMAT_R64_SFLOAT)
-                             , ("VK_FORMAT_R64G64_UINT", pure VK_FORMAT_R64G64_UINT)
-                             , ("VK_FORMAT_R64G64_SINT", pure VK_FORMAT_R64G64_SINT)
-                             , ("VK_FORMAT_R64G64_SFLOAT", pure VK_FORMAT_R64G64_SFLOAT)
-                             , ("VK_FORMAT_R64G64B64_UINT", pure VK_FORMAT_R64G64B64_UINT)
-                             , ("VK_FORMAT_R64G64B64_SINT", pure VK_FORMAT_R64G64B64_SINT)
-                             , ("VK_FORMAT_R64G64B64_SFLOAT", pure VK_FORMAT_R64G64B64_SFLOAT)
-                             , ("VK_FORMAT_R64G64B64A64_UINT", pure VK_FORMAT_R64G64B64A64_UINT)
-                             , ("VK_FORMAT_R64G64B64A64_SINT", pure VK_FORMAT_R64G64B64A64_SINT)
-                             , ("VK_FORMAT_R64G64B64A64_SFLOAT", pure VK_FORMAT_R64G64B64A64_SFLOAT)
-                             , ("VK_FORMAT_B10G11R11_UFLOAT_PACK32", pure VK_FORMAT_B10G11R11_UFLOAT_PACK32)
-                             , ("VK_FORMAT_E5B9G9R9_UFLOAT_PACK32", pure VK_FORMAT_E5B9G9R9_UFLOAT_PACK32)
-                             , ("VK_FORMAT_D16_UNORM", pure VK_FORMAT_D16_UNORM)
-                             , ("VK_FORMAT_X8_D24_UNORM_PACK32", pure VK_FORMAT_X8_D24_UNORM_PACK32)
-                             , ("VK_FORMAT_D32_SFLOAT", pure VK_FORMAT_D32_SFLOAT)
-                             , ("VK_FORMAT_S8_UINT", pure VK_FORMAT_S8_UINT)
-                             , ("VK_FORMAT_D16_UNORM_S8_UINT", pure VK_FORMAT_D16_UNORM_S8_UINT)
-                             , ("VK_FORMAT_D24_UNORM_S8_UINT", pure VK_FORMAT_D24_UNORM_S8_UINT)
-                             , ("VK_FORMAT_D32_SFLOAT_S8_UINT", pure VK_FORMAT_D32_SFLOAT_S8_UINT)
-                             , ("VK_FORMAT_BC1_RGB_UNORM_BLOCK", pure VK_FORMAT_BC1_RGB_UNORM_BLOCK)
-                             , ("VK_FORMAT_BC1_RGB_SRGB_BLOCK", pure VK_FORMAT_BC1_RGB_SRGB_BLOCK)
-                             , ("VK_FORMAT_BC1_RGBA_UNORM_BLOCK", pure VK_FORMAT_BC1_RGBA_UNORM_BLOCK)
-                             , ("VK_FORMAT_BC1_RGBA_SRGB_BLOCK", pure VK_FORMAT_BC1_RGBA_SRGB_BLOCK)
-                             , ("VK_FORMAT_BC2_UNORM_BLOCK", pure VK_FORMAT_BC2_UNORM_BLOCK)
-                             , ("VK_FORMAT_BC2_SRGB_BLOCK", pure VK_FORMAT_BC2_SRGB_BLOCK)
-                             , ("VK_FORMAT_BC3_UNORM_BLOCK", pure VK_FORMAT_BC3_UNORM_BLOCK)
-                             , ("VK_FORMAT_BC3_SRGB_BLOCK", pure VK_FORMAT_BC3_SRGB_BLOCK)
-                             , ("VK_FORMAT_BC4_UNORM_BLOCK", pure VK_FORMAT_BC4_UNORM_BLOCK)
-                             , ("VK_FORMAT_BC4_SNORM_BLOCK", pure VK_FORMAT_BC4_SNORM_BLOCK)
-                             , ("VK_FORMAT_BC5_UNORM_BLOCK", pure VK_FORMAT_BC5_UNORM_BLOCK)
-                             , ("VK_FORMAT_BC5_SNORM_BLOCK", pure VK_FORMAT_BC5_SNORM_BLOCK)
-                             , ("VK_FORMAT_BC6H_UFLOAT_BLOCK", pure VK_FORMAT_BC6H_UFLOAT_BLOCK)
-                             , ("VK_FORMAT_BC6H_SFLOAT_BLOCK", pure VK_FORMAT_BC6H_SFLOAT_BLOCK)
-                             , ("VK_FORMAT_BC7_UNORM_BLOCK", pure VK_FORMAT_BC7_UNORM_BLOCK)
-                             , ("VK_FORMAT_BC7_SRGB_BLOCK", pure VK_FORMAT_BC7_SRGB_BLOCK)
-                             , ("VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK", pure VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK)
-                             , ("VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK", pure VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK)
-                             , ("VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK", pure VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK)
-                             , ("VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK", pure VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK)
-                             , ("VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK", pure VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK)
-                             , ("VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK", pure VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK)
-                             , ("VK_FORMAT_EAC_R11_UNORM_BLOCK", pure VK_FORMAT_EAC_R11_UNORM_BLOCK)
-                             , ("VK_FORMAT_EAC_R11_SNORM_BLOCK", pure VK_FORMAT_EAC_R11_SNORM_BLOCK)
-                             , ("VK_FORMAT_EAC_R11G11_UNORM_BLOCK", pure VK_FORMAT_EAC_R11G11_UNORM_BLOCK)
-                             , ("VK_FORMAT_EAC_R11G11_SNORM_BLOCK", pure VK_FORMAT_EAC_R11G11_SNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_4x4_UNORM_BLOCK", pure VK_FORMAT_ASTC_4x4_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_4x4_SRGB_BLOCK", pure VK_FORMAT_ASTC_4x4_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_5x4_UNORM_BLOCK", pure VK_FORMAT_ASTC_5x4_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_5x4_SRGB_BLOCK", pure VK_FORMAT_ASTC_5x4_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_5x5_UNORM_BLOCK", pure VK_FORMAT_ASTC_5x5_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_5x5_SRGB_BLOCK", pure VK_FORMAT_ASTC_5x5_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_6x5_UNORM_BLOCK", pure VK_FORMAT_ASTC_6x5_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_6x5_SRGB_BLOCK", pure VK_FORMAT_ASTC_6x5_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_6x6_UNORM_BLOCK", pure VK_FORMAT_ASTC_6x6_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_6x6_SRGB_BLOCK", pure VK_FORMAT_ASTC_6x6_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_8x5_UNORM_BLOCK", pure VK_FORMAT_ASTC_8x5_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_8x5_SRGB_BLOCK", pure VK_FORMAT_ASTC_8x5_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_8x6_UNORM_BLOCK", pure VK_FORMAT_ASTC_8x6_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_8x6_SRGB_BLOCK", pure VK_FORMAT_ASTC_8x6_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_8x8_UNORM_BLOCK", pure VK_FORMAT_ASTC_8x8_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_8x8_SRGB_BLOCK", pure VK_FORMAT_ASTC_8x8_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x5_UNORM_BLOCK", pure VK_FORMAT_ASTC_10x5_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x5_SRGB_BLOCK", pure VK_FORMAT_ASTC_10x5_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x6_UNORM_BLOCK", pure VK_FORMAT_ASTC_10x6_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x6_SRGB_BLOCK", pure VK_FORMAT_ASTC_10x6_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x8_UNORM_BLOCK", pure VK_FORMAT_ASTC_10x8_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x8_SRGB_BLOCK", pure VK_FORMAT_ASTC_10x8_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x10_UNORM_BLOCK", pure VK_FORMAT_ASTC_10x10_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_10x10_SRGB_BLOCK", pure VK_FORMAT_ASTC_10x10_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_12x10_UNORM_BLOCK", pure VK_FORMAT_ASTC_12x10_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_12x10_SRGB_BLOCK", pure VK_FORMAT_ASTC_12x10_SRGB_BLOCK)
-                             , ("VK_FORMAT_ASTC_12x12_UNORM_BLOCK", pure VK_FORMAT_ASTC_12x12_UNORM_BLOCK)
-                             , ("VK_FORMAT_ASTC_12x12_SRGB_BLOCK", pure VK_FORMAT_ASTC_12x12_SRGB_BLOCK)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkFormat")
-                        v <- step readPrec
-                        pure (VkFormat v)
-                        )
-                    )
-
-
-pattern VK_FORMAT_UNDEFINED = VkFormat 0
-
-pattern VK_FORMAT_R4G4_UNORM_PACK8 = VkFormat 1
-
-pattern VK_FORMAT_R4G4B4A4_UNORM_PACK16 = VkFormat 2
-
-pattern VK_FORMAT_B4G4R4A4_UNORM_PACK16 = VkFormat 3
-
-pattern VK_FORMAT_R5G6B5_UNORM_PACK16 = VkFormat 4
-
-pattern VK_FORMAT_B5G6R5_UNORM_PACK16 = VkFormat 5
-
-pattern VK_FORMAT_R5G5B5A1_UNORM_PACK16 = VkFormat 6
-
-pattern VK_FORMAT_B5G5R5A1_UNORM_PACK16 = VkFormat 7
-
-pattern VK_FORMAT_A1R5G5B5_UNORM_PACK16 = VkFormat 8
-
-pattern VK_FORMAT_R8_UNORM = VkFormat 9
-
-pattern VK_FORMAT_R8_SNORM = VkFormat 10
-
-pattern VK_FORMAT_R8_USCALED = VkFormat 11
-
-pattern VK_FORMAT_R8_SSCALED = VkFormat 12
-
-pattern VK_FORMAT_R8_UINT = VkFormat 13
-
-pattern VK_FORMAT_R8_SINT = VkFormat 14
-
-pattern VK_FORMAT_R8_SRGB = VkFormat 15
-
-pattern VK_FORMAT_R8G8_UNORM = VkFormat 16
-
-pattern VK_FORMAT_R8G8_SNORM = VkFormat 17
-
-pattern VK_FORMAT_R8G8_USCALED = VkFormat 18
-
-pattern VK_FORMAT_R8G8_SSCALED = VkFormat 19
-
-pattern VK_FORMAT_R8G8_UINT = VkFormat 20
-
-pattern VK_FORMAT_R8G8_SINT = VkFormat 21
-
-pattern VK_FORMAT_R8G8_SRGB = VkFormat 22
-
-pattern VK_FORMAT_R8G8B8_UNORM = VkFormat 23
-
-pattern VK_FORMAT_R8G8B8_SNORM = VkFormat 24
-
-pattern VK_FORMAT_R8G8B8_USCALED = VkFormat 25
-
-pattern VK_FORMAT_R8G8B8_SSCALED = VkFormat 26
-
-pattern VK_FORMAT_R8G8B8_UINT = VkFormat 27
-
-pattern VK_FORMAT_R8G8B8_SINT = VkFormat 28
-
-pattern VK_FORMAT_R8G8B8_SRGB = VkFormat 29
-
-pattern VK_FORMAT_B8G8R8_UNORM = VkFormat 30
-
-pattern VK_FORMAT_B8G8R8_SNORM = VkFormat 31
-
-pattern VK_FORMAT_B8G8R8_USCALED = VkFormat 32
-
-pattern VK_FORMAT_B8G8R8_SSCALED = VkFormat 33
-
-pattern VK_FORMAT_B8G8R8_UINT = VkFormat 34
-
-pattern VK_FORMAT_B8G8R8_SINT = VkFormat 35
-
-pattern VK_FORMAT_B8G8R8_SRGB = VkFormat 36
-
-pattern VK_FORMAT_R8G8B8A8_UNORM = VkFormat 37
-
-pattern VK_FORMAT_R8G8B8A8_SNORM = VkFormat 38
-
-pattern VK_FORMAT_R8G8B8A8_USCALED = VkFormat 39
-
-pattern VK_FORMAT_R8G8B8A8_SSCALED = VkFormat 40
-
-pattern VK_FORMAT_R8G8B8A8_UINT = VkFormat 41
-
-pattern VK_FORMAT_R8G8B8A8_SINT = VkFormat 42
-
-pattern VK_FORMAT_R8G8B8A8_SRGB = VkFormat 43
-
-pattern VK_FORMAT_B8G8R8A8_UNORM = VkFormat 44
-
-pattern VK_FORMAT_B8G8R8A8_SNORM = VkFormat 45
-
-pattern VK_FORMAT_B8G8R8A8_USCALED = VkFormat 46
-
-pattern VK_FORMAT_B8G8R8A8_SSCALED = VkFormat 47
-
-pattern VK_FORMAT_B8G8R8A8_UINT = VkFormat 48
-
-pattern VK_FORMAT_B8G8R8A8_SINT = VkFormat 49
-
-pattern VK_FORMAT_B8G8R8A8_SRGB = VkFormat 50
-
-pattern VK_FORMAT_A8B8G8R8_UNORM_PACK32 = VkFormat 51
-
-pattern VK_FORMAT_A8B8G8R8_SNORM_PACK32 = VkFormat 52
-
-pattern VK_FORMAT_A8B8G8R8_USCALED_PACK32 = VkFormat 53
-
-pattern VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = VkFormat 54
-
-pattern VK_FORMAT_A8B8G8R8_UINT_PACK32 = VkFormat 55
-
-pattern VK_FORMAT_A8B8G8R8_SINT_PACK32 = VkFormat 56
-
-pattern VK_FORMAT_A8B8G8R8_SRGB_PACK32 = VkFormat 57
-
-pattern VK_FORMAT_A2R10G10B10_UNORM_PACK32 = VkFormat 58
-
-pattern VK_FORMAT_A2R10G10B10_SNORM_PACK32 = VkFormat 59
-
-pattern VK_FORMAT_A2R10G10B10_USCALED_PACK32 = VkFormat 60
-
-pattern VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = VkFormat 61
-
-pattern VK_FORMAT_A2R10G10B10_UINT_PACK32 = VkFormat 62
-
-pattern VK_FORMAT_A2R10G10B10_SINT_PACK32 = VkFormat 63
-
-pattern VK_FORMAT_A2B10G10R10_UNORM_PACK32 = VkFormat 64
-
-pattern VK_FORMAT_A2B10G10R10_SNORM_PACK32 = VkFormat 65
-
-pattern VK_FORMAT_A2B10G10R10_USCALED_PACK32 = VkFormat 66
-
-pattern VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = VkFormat 67
-
-pattern VK_FORMAT_A2B10G10R10_UINT_PACK32 = VkFormat 68
-
-pattern VK_FORMAT_A2B10G10R10_SINT_PACK32 = VkFormat 69
-
-pattern VK_FORMAT_R16_UNORM = VkFormat 70
-
-pattern VK_FORMAT_R16_SNORM = VkFormat 71
-
-pattern VK_FORMAT_R16_USCALED = VkFormat 72
-
-pattern VK_FORMAT_R16_SSCALED = VkFormat 73
-
-pattern VK_FORMAT_R16_UINT = VkFormat 74
-
-pattern VK_FORMAT_R16_SINT = VkFormat 75
-
-pattern VK_FORMAT_R16_SFLOAT = VkFormat 76
-
-pattern VK_FORMAT_R16G16_UNORM = VkFormat 77
-
-pattern VK_FORMAT_R16G16_SNORM = VkFormat 78
-
-pattern VK_FORMAT_R16G16_USCALED = VkFormat 79
-
-pattern VK_FORMAT_R16G16_SSCALED = VkFormat 80
-
-pattern VK_FORMAT_R16G16_UINT = VkFormat 81
-
-pattern VK_FORMAT_R16G16_SINT = VkFormat 82
-
-pattern VK_FORMAT_R16G16_SFLOAT = VkFormat 83
-
-pattern VK_FORMAT_R16G16B16_UNORM = VkFormat 84
-
-pattern VK_FORMAT_R16G16B16_SNORM = VkFormat 85
-
-pattern VK_FORMAT_R16G16B16_USCALED = VkFormat 86
-
-pattern VK_FORMAT_R16G16B16_SSCALED = VkFormat 87
-
-pattern VK_FORMAT_R16G16B16_UINT = VkFormat 88
-
-pattern VK_FORMAT_R16G16B16_SINT = VkFormat 89
-
-pattern VK_FORMAT_R16G16B16_SFLOAT = VkFormat 90
-
-pattern VK_FORMAT_R16G16B16A16_UNORM = VkFormat 91
-
-pattern VK_FORMAT_R16G16B16A16_SNORM = VkFormat 92
-
-pattern VK_FORMAT_R16G16B16A16_USCALED = VkFormat 93
-
-pattern VK_FORMAT_R16G16B16A16_SSCALED = VkFormat 94
-
-pattern VK_FORMAT_R16G16B16A16_UINT = VkFormat 95
-
-pattern VK_FORMAT_R16G16B16A16_SINT = VkFormat 96
-
-pattern VK_FORMAT_R16G16B16A16_SFLOAT = VkFormat 97
-
-pattern VK_FORMAT_R32_UINT = VkFormat 98
-
-pattern VK_FORMAT_R32_SINT = VkFormat 99
-
-pattern VK_FORMAT_R32_SFLOAT = VkFormat 100
-
-pattern VK_FORMAT_R32G32_UINT = VkFormat 101
-
-pattern VK_FORMAT_R32G32_SINT = VkFormat 102
-
-pattern VK_FORMAT_R32G32_SFLOAT = VkFormat 103
-
-pattern VK_FORMAT_R32G32B32_UINT = VkFormat 104
-
-pattern VK_FORMAT_R32G32B32_SINT = VkFormat 105
-
-pattern VK_FORMAT_R32G32B32_SFLOAT = VkFormat 106
-
-pattern VK_FORMAT_R32G32B32A32_UINT = VkFormat 107
-
-pattern VK_FORMAT_R32G32B32A32_SINT = VkFormat 108
-
-pattern VK_FORMAT_R32G32B32A32_SFLOAT = VkFormat 109
-
-pattern VK_FORMAT_R64_UINT = VkFormat 110
-
-pattern VK_FORMAT_R64_SINT = VkFormat 111
-
-pattern VK_FORMAT_R64_SFLOAT = VkFormat 112
-
-pattern VK_FORMAT_R64G64_UINT = VkFormat 113
-
-pattern VK_FORMAT_R64G64_SINT = VkFormat 114
-
-pattern VK_FORMAT_R64G64_SFLOAT = VkFormat 115
-
-pattern VK_FORMAT_R64G64B64_UINT = VkFormat 116
-
-pattern VK_FORMAT_R64G64B64_SINT = VkFormat 117
-
-pattern VK_FORMAT_R64G64B64_SFLOAT = VkFormat 118
-
-pattern VK_FORMAT_R64G64B64A64_UINT = VkFormat 119
-
-pattern VK_FORMAT_R64G64B64A64_SINT = VkFormat 120
-
-pattern VK_FORMAT_R64G64B64A64_SFLOAT = VkFormat 121
-
-pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32 = VkFormat 122
-
-pattern VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = VkFormat 123
-
-pattern VK_FORMAT_D16_UNORM = VkFormat 124
-
-pattern VK_FORMAT_X8_D24_UNORM_PACK32 = VkFormat 125
-
-pattern VK_FORMAT_D32_SFLOAT = VkFormat 126
-
-pattern VK_FORMAT_S8_UINT = VkFormat 127
-
-pattern VK_FORMAT_D16_UNORM_S8_UINT = VkFormat 128
-
-pattern VK_FORMAT_D24_UNORM_S8_UINT = VkFormat 129
-
-pattern VK_FORMAT_D32_SFLOAT_S8_UINT = VkFormat 130
-
-pattern VK_FORMAT_BC1_RGB_UNORM_BLOCK = VkFormat 131
-
-pattern VK_FORMAT_BC1_RGB_SRGB_BLOCK = VkFormat 132
-
-pattern VK_FORMAT_BC1_RGBA_UNORM_BLOCK = VkFormat 133
-
-pattern VK_FORMAT_BC1_RGBA_SRGB_BLOCK = VkFormat 134
-
-pattern VK_FORMAT_BC2_UNORM_BLOCK = VkFormat 135
-
-pattern VK_FORMAT_BC2_SRGB_BLOCK = VkFormat 136
-
-pattern VK_FORMAT_BC3_UNORM_BLOCK = VkFormat 137
-
-pattern VK_FORMAT_BC3_SRGB_BLOCK = VkFormat 138
-
-pattern VK_FORMAT_BC4_UNORM_BLOCK = VkFormat 139
-
-pattern VK_FORMAT_BC4_SNORM_BLOCK = VkFormat 140
-
-pattern VK_FORMAT_BC5_UNORM_BLOCK = VkFormat 141
-
-pattern VK_FORMAT_BC5_SNORM_BLOCK = VkFormat 142
-
-pattern VK_FORMAT_BC6H_UFLOAT_BLOCK = VkFormat 143
-
-pattern VK_FORMAT_BC6H_SFLOAT_BLOCK = VkFormat 144
-
-pattern VK_FORMAT_BC7_UNORM_BLOCK = VkFormat 145
-
-pattern VK_FORMAT_BC7_SRGB_BLOCK = VkFormat 146
-
-pattern VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = VkFormat 147
-
-pattern VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = VkFormat 148
-
-pattern VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = VkFormat 149
-
-pattern VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = VkFormat 150
-
-pattern VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = VkFormat 151
-
-pattern VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = VkFormat 152
-
-pattern VK_FORMAT_EAC_R11_UNORM_BLOCK = VkFormat 153
-
-pattern VK_FORMAT_EAC_R11_SNORM_BLOCK = VkFormat 154
-
-pattern VK_FORMAT_EAC_R11G11_UNORM_BLOCK = VkFormat 155
-
-pattern VK_FORMAT_EAC_R11G11_SNORM_BLOCK = VkFormat 156
-
-pattern VK_FORMAT_ASTC_4x4_UNORM_BLOCK = VkFormat 157
-
-pattern VK_FORMAT_ASTC_4x4_SRGB_BLOCK = VkFormat 158
-
-pattern VK_FORMAT_ASTC_5x4_UNORM_BLOCK = VkFormat 159
-
-pattern VK_FORMAT_ASTC_5x4_SRGB_BLOCK = VkFormat 160
-
-pattern VK_FORMAT_ASTC_5x5_UNORM_BLOCK = VkFormat 161
-
-pattern VK_FORMAT_ASTC_5x5_SRGB_BLOCK = VkFormat 162
-
-pattern VK_FORMAT_ASTC_6x5_UNORM_BLOCK = VkFormat 163
-
-pattern VK_FORMAT_ASTC_6x5_SRGB_BLOCK = VkFormat 164
-
-pattern VK_FORMAT_ASTC_6x6_UNORM_BLOCK = VkFormat 165
-
-pattern VK_FORMAT_ASTC_6x6_SRGB_BLOCK = VkFormat 166
-
-pattern VK_FORMAT_ASTC_8x5_UNORM_BLOCK = VkFormat 167
-
-pattern VK_FORMAT_ASTC_8x5_SRGB_BLOCK = VkFormat 168
-
-pattern VK_FORMAT_ASTC_8x6_UNORM_BLOCK = VkFormat 169
-
-pattern VK_FORMAT_ASTC_8x6_SRGB_BLOCK = VkFormat 170
-
-pattern VK_FORMAT_ASTC_8x8_UNORM_BLOCK = VkFormat 171
-
-pattern VK_FORMAT_ASTC_8x8_SRGB_BLOCK = VkFormat 172
-
-pattern VK_FORMAT_ASTC_10x5_UNORM_BLOCK = VkFormat 173
-
-pattern VK_FORMAT_ASTC_10x5_SRGB_BLOCK = VkFormat 174
-
-pattern VK_FORMAT_ASTC_10x6_UNORM_BLOCK = VkFormat 175
-
-pattern VK_FORMAT_ASTC_10x6_SRGB_BLOCK = VkFormat 176
-
-pattern VK_FORMAT_ASTC_10x8_UNORM_BLOCK = VkFormat 177
-
-pattern VK_FORMAT_ASTC_10x8_SRGB_BLOCK = VkFormat 178
-
-pattern VK_FORMAT_ASTC_10x10_UNORM_BLOCK = VkFormat 179
-
-pattern VK_FORMAT_ASTC_10x10_SRGB_BLOCK = VkFormat 180
-
-pattern VK_FORMAT_ASTC_12x10_UNORM_BLOCK = VkFormat 181
-
-pattern VK_FORMAT_ASTC_12x10_SRGB_BLOCK = VkFormat 182
-
-pattern VK_FORMAT_ASTC_12x12_UNORM_BLOCK = VkFormat 183
-
-pattern VK_FORMAT_ASTC_12x12_SRGB_BLOCK = VkFormat 184
-
-type VkFlags = Word32
-
-
-data VkExtent2D =
-  VkExtent2D{ vkWidth :: Word32 
-            , vkHeight :: Word32 
-            }
-  deriving (Eq)
-
-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))
-
-
--- ** VkSharingMode
-
-newtype VkSharingMode = VkSharingMode Int32
-  deriving (Eq, Storable)
-
-instance Show VkSharingMode where
-  showsPrec _ VK_SHARING_MODE_EXCLUSIVE = showString "VK_SHARING_MODE_EXCLUSIVE"
-  showsPrec _ VK_SHARING_MODE_CONCURRENT = showString "VK_SHARING_MODE_CONCURRENT"
-  showsPrec p (VkSharingMode x) = showParen (p >= 11) (showString "VkSharingMode " . showsPrec 11 x)
-
-instance Read VkSharingMode where
-  readPrec = parens ( choose [ ("VK_SHARING_MODE_EXCLUSIVE", pure VK_SHARING_MODE_EXCLUSIVE)
-                             , ("VK_SHARING_MODE_CONCURRENT", pure VK_SHARING_MODE_CONCURRENT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSharingMode")
-                        v <- step readPrec
-                        pure (VkSharingMode v)
-                        )
-                    )
-
-
-pattern VK_SHARING_MODE_EXCLUSIVE = VkSharingMode 0
-
-pattern VK_SHARING_MODE_CONCURRENT = VkSharingMode 1
-
--- ** VkStructureType
--- | Structure type enumerant
-newtype VkStructureType = VkStructureType Int32
-  deriving (Eq, Storable)
-
-instance Show VkStructureType where
-  showsPrec _ VK_STRUCTURE_TYPE_APPLICATION_INFO = showString "VK_STRUCTURE_TYPE_APPLICATION_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_SUBMIT_INFO = showString "VK_STRUCTURE_TYPE_SUBMIT_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = showString "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = showString "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"
-  showsPrec _ VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = showString "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = showString "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = showString "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = showString "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = showString "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = showString "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = showString "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = showString "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"
-  showsPrec _ VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = showString "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"
-  showsPrec _ VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = showString "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = showString "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = showString "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = showString "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"
-  showsPrec _ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = showString "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"
-  showsPrec _ VK_STRUCTURE_TYPE_MEMORY_BARRIER = showString "VK_STRUCTURE_TYPE_MEMORY_BARRIER"
-  showsPrec _ VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"
-  showsPrec _ VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
-  showsPrec p (VkStructureType x) = showParen (p >= 11) (showString "VkStructureType " . showsPrec 11 x)
-
-instance Read VkStructureType where
-  readPrec = parens ( choose [ ("VK_STRUCTURE_TYPE_APPLICATION_INFO", pure VK_STRUCTURE_TYPE_APPLICATION_INFO)
-                             , ("VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO", pure VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO", pure VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO", pure VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_SUBMIT_INFO", pure VK_STRUCTURE_TYPE_SUBMIT_INFO)
-                             , ("VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO", pure VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE", pure VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
-                             , ("VK_STRUCTURE_TYPE_BIND_SPARSE_INFO", pure VK_STRUCTURE_TYPE_BIND_SPARSE_INFO)
-                             , ("VK_STRUCTURE_TYPE_FENCE_CREATE_INFO", pure VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO", pure VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_EVENT_CREATE_INFO", pure VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO", pure VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO", pure VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO", pure VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO", pure VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO", pure VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO", pure VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO", pure VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO", pure VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO", pure VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO", pure VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO", pure VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO", pure VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET", pure VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
-                             , ("VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET", pure VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
-                             , ("VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO", pure VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO", pure VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO", pure VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO", pure VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO", pure VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
-                             , ("VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO", pure VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
-                             , ("VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO", pure VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
-                             , ("VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER", pure VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
-                             , ("VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER", pure VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
-                             , ("VK_STRUCTURE_TYPE_MEMORY_BARRIER", pure VK_STRUCTURE_TYPE_MEMORY_BARRIER)
-                             , ("VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO", pure VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO)
-                             , ("VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO", pure VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkStructureType")
-                        v <- step readPrec
-                        pure (VkStructureType v)
-                        )
-                    )
-
-
-pattern VK_STRUCTURE_TYPE_APPLICATION_INFO = VkStructureType 0
-
-pattern VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = VkStructureType 1
-
-pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = VkStructureType 2
-
-pattern VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = VkStructureType 3
-
-pattern VK_STRUCTURE_TYPE_SUBMIT_INFO = VkStructureType 4
-
-pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = VkStructureType 5
-
-pattern VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = VkStructureType 6
-
-pattern VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = VkStructureType 7
-
-pattern VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = VkStructureType 8
-
-pattern VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = VkStructureType 9
-
-pattern VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = VkStructureType 10
-
-pattern VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = VkStructureType 11
-
-pattern VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = VkStructureType 12
-
-pattern VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = VkStructureType 13
-
-pattern VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = VkStructureType 14
-
-pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = VkStructureType 15
-
-pattern VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = VkStructureType 16
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = VkStructureType 17
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = VkStructureType 18
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = VkStructureType 19
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = VkStructureType 20
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = VkStructureType 21
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = VkStructureType 22
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = VkStructureType 23
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = VkStructureType 24
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = VkStructureType 25
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = VkStructureType 26
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = VkStructureType 27
-
-pattern VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = VkStructureType 28
-
-pattern VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = VkStructureType 29
-
-pattern VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = VkStructureType 30
-
-pattern VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = VkStructureType 31
-
-pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = VkStructureType 32
-
-pattern VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = VkStructureType 33
-
-pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = VkStructureType 34
-
-pattern VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = VkStructureType 35
-
-pattern VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = VkStructureType 36
-
-pattern VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = VkStructureType 37
-
-pattern VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = VkStructureType 38
-
-pattern VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = VkStructureType 39
-
-pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = VkStructureType 40
-
-pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = VkStructureType 41
-
-pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = VkStructureType 42
-
-pattern VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = VkStructureType 43
-
-pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = VkStructureType 44
-
-pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = VkStructureType 45
-
-pattern VK_STRUCTURE_TYPE_MEMORY_BARRIER = VkStructureType 46
-
-pattern VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = VkStructureType 47
-
-pattern VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = VkStructureType 48
-
-newtype VkBool32 = VkBool32 Word32
-  deriving (Eq, Storable)
-
-
-data VkOffset2D =
-  VkOffset2D{ vkX :: Int32 
-            , vkY :: Int32 
-            }
-  deriving (Eq)
-
-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))
-
-
-
-data VkOffset3D =
-  VkOffset3D{ vkX :: Int32 
-            , vkY :: Int32 
-            , vkZ :: Int32 
-            }
-  deriving (Eq)
-
-instance Storable VkOffset3D where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkOffset3D <$> peek (ptr `plusPtr` 0)
-                        <*> peek (ptr `plusPtr` 4)
-                        <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset3D))
-                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset3D))
-                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkOffset3D))
-
-
-
-data VkExtent3D =
-  VkExtent3D{ vkWidth :: Word32 
-            , vkHeight :: Word32 
-            , vkDepth :: Word32 
-            }
-  deriving (Eq)
-
-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))
-
-
-
-data VkRect3D =
-  VkRect3D{ vkOffset :: VkOffset3D 
-          , vkExtent :: VkExtent3D 
-          }
-  deriving (Eq)
-
-instance Storable VkRect3D where
-  sizeOf ~_ = 24
-  alignment ~_ = 4
-  peek ptr = VkRect3D <$> peek (ptr `plusPtr` 0)
-                      <*> peek (ptr `plusPtr` 12)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRect3D))
-                *> poke (ptr `plusPtr` 12) (vkExtent (poked :: VkRect3D))
-
-
--- ** VkResult
--- | Error and return codes
-newtype VkResult = VkResult Int32
-  deriving (Eq, Storable)
-
-instance Show VkResult where
-  showsPrec _ VK_SUCCESS = showString "VK_SUCCESS"
-  showsPrec _ VK_NOT_READY = showString "VK_NOT_READY"
-  showsPrec _ VK_TIMEOUT = showString "VK_TIMEOUT"
-  showsPrec _ VK_EVENT_SET = showString "VK_EVENT_SET"
-  showsPrec _ VK_EVENT_RESET = showString "VK_EVENT_RESET"
-  showsPrec _ VK_INCOMPLETE = showString "VK_INCOMPLETE"
-  showsPrec _ VK_ERROR_OUT_OF_HOST_MEMORY = showString "VK_ERROR_OUT_OF_HOST_MEMORY"
-  showsPrec _ VK_ERROR_OUT_OF_DEVICE_MEMORY = showString "VK_ERROR_OUT_OF_DEVICE_MEMORY"
-  showsPrec _ VK_ERROR_INITIALIZATION_FAILED = showString "VK_ERROR_INITIALIZATION_FAILED"
-  showsPrec _ VK_ERROR_DEVICE_LOST = showString "VK_ERROR_DEVICE_LOST"
-  showsPrec _ VK_ERROR_MEMORY_MAP_FAILED = showString "VK_ERROR_MEMORY_MAP_FAILED"
-  showsPrec _ VK_ERROR_LAYER_NOT_PRESENT = showString "VK_ERROR_LAYER_NOT_PRESENT"
-  showsPrec _ VK_ERROR_EXTENSION_NOT_PRESENT = showString "VK_ERROR_EXTENSION_NOT_PRESENT"
-  showsPrec _ VK_ERROR_FEATURE_NOT_PRESENT = showString "VK_ERROR_FEATURE_NOT_PRESENT"
-  showsPrec _ VK_ERROR_INCOMPATIBLE_DRIVER = showString "VK_ERROR_INCOMPATIBLE_DRIVER"
-  showsPrec _ VK_ERROR_TOO_MANY_OBJECTS = showString "VK_ERROR_TOO_MANY_OBJECTS"
-  showsPrec _ VK_ERROR_FORMAT_NOT_SUPPORTED = showString "VK_ERROR_FORMAT_NOT_SUPPORTED"
-  showsPrec p (VkResult x) = showParen (p >= 11) (showString "VkResult " . showsPrec 11 x)
-
-instance Read VkResult where
-  readPrec = parens ( choose [ ("VK_SUCCESS", pure VK_SUCCESS)
-                             , ("VK_NOT_READY", pure VK_NOT_READY)
-                             , ("VK_TIMEOUT", pure VK_TIMEOUT)
-                             , ("VK_EVENT_SET", pure VK_EVENT_SET)
-                             , ("VK_EVENT_RESET", pure VK_EVENT_RESET)
-                             , ("VK_INCOMPLETE", pure VK_INCOMPLETE)
-                             , ("VK_ERROR_OUT_OF_HOST_MEMORY", pure VK_ERROR_OUT_OF_HOST_MEMORY)
-                             , ("VK_ERROR_OUT_OF_DEVICE_MEMORY", pure VK_ERROR_OUT_OF_DEVICE_MEMORY)
-                             , ("VK_ERROR_INITIALIZATION_FAILED", pure VK_ERROR_INITIALIZATION_FAILED)
-                             , ("VK_ERROR_DEVICE_LOST", pure VK_ERROR_DEVICE_LOST)
-                             , ("VK_ERROR_MEMORY_MAP_FAILED", pure VK_ERROR_MEMORY_MAP_FAILED)
-                             , ("VK_ERROR_LAYER_NOT_PRESENT", pure VK_ERROR_LAYER_NOT_PRESENT)
-                             , ("VK_ERROR_EXTENSION_NOT_PRESENT", pure VK_ERROR_EXTENSION_NOT_PRESENT)
-                             , ("VK_ERROR_FEATURE_NOT_PRESENT", pure VK_ERROR_FEATURE_NOT_PRESENT)
-                             , ("VK_ERROR_INCOMPATIBLE_DRIVER", pure VK_ERROR_INCOMPATIBLE_DRIVER)
-                             , ("VK_ERROR_TOO_MANY_OBJECTS", pure VK_ERROR_TOO_MANY_OBJECTS)
-                             , ("VK_ERROR_FORMAT_NOT_SUPPORTED", pure VK_ERROR_FORMAT_NOT_SUPPORTED)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkResult")
-                        v <- step readPrec
-                        pure (VkResult v)
-                        )
-                    )
-
--- | Command completed successfully
-pattern VK_SUCCESS = VkResult 0
--- | A fence or query has not yet completed
-pattern VK_NOT_READY = VkResult 1
--- | A wait operation has not completed in the specified time
-pattern VK_TIMEOUT = VkResult 2
--- | An event is signaled
-pattern VK_EVENT_SET = VkResult 3
--- | An event is unsignalled
-pattern VK_EVENT_RESET = VkResult 4
--- | A return array was too small for the resul
-pattern VK_INCOMPLETE = VkResult 5
--- | A host memory allocation has failed
-pattern VK_ERROR_OUT_OF_HOST_MEMORY = VkResult (-1)
--- | A device memory allocation has failed
-pattern VK_ERROR_OUT_OF_DEVICE_MEMORY = VkResult (-2)
--- | The logical device has been lost. See <<devsandqueues-lost-device>>
-pattern VK_ERROR_INITIALIZATION_FAILED = VkResult (-3)
--- | Initialization of a object has failed
-pattern VK_ERROR_DEVICE_LOST = VkResult (-4)
--- | Mapping of a memory object has failed
-pattern VK_ERROR_MEMORY_MAP_FAILED = VkResult (-5)
--- | Layer specified does not exist
-pattern VK_ERROR_LAYER_NOT_PRESENT = VkResult (-6)
--- | Extension specified does not exist
-pattern VK_ERROR_EXTENSION_NOT_PRESENT = VkResult (-7)
--- | Requested feature is not available on this device
-pattern VK_ERROR_FEATURE_NOT_PRESENT = VkResult (-8)
--- | Unable to find a Vulkan driver
-pattern VK_ERROR_INCOMPATIBLE_DRIVER = VkResult (-9)
--- | Too many objects of the type have already been created
-pattern VK_ERROR_TOO_MANY_OBJECTS = VkResult (-10)
--- | Requested format is not supported on this device
-pattern VK_ERROR_FORMAT_NOT_SUPPORTED = VkResult (-11)
-
-
-data VkViewport =
-  VkViewport{ vkX :: CFloat 
-            , vkY :: CFloat 
-            , vkWidth :: CFloat 
-            , vkHeight :: CFloat 
-            , vkMinDepth :: CFloat 
-            , vkMaxDepth :: CFloat 
-            }
-  deriving (Eq)
-
-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))
-
-
-
-data VkRect2D =
-  VkRect2D{ vkOffset :: VkOffset2D 
-          , vkExtent :: VkExtent2D 
-          }
-  deriving (Eq)
-
-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))
-
-
diff --git a/src/Graphics/Vulkan/Core10.hs b/src/Graphics/Vulkan/Core10.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10.hs
@@ -0,0 +1,69 @@
+{-# language Strict #-}
+{-# language CPP #-}
+
+
+module Graphics.Vulkan.Core10
+  (     module Graphics.Vulkan.Core10.Core
+  , module Graphics.Vulkan.Core10.Version
+  , module Graphics.Vulkan.Core10.Constants
+  , module Graphics.Vulkan.Core10.DeviceInitialization
+  , module Graphics.Vulkan.Core10.Device
+  , module Graphics.Vulkan.Core10.ExtensionDiscovery
+  , module Graphics.Vulkan.Core10.LayerDiscovery
+  , module Graphics.Vulkan.Core10.Queue
+  , module Graphics.Vulkan.Core10.Memory
+  , module Graphics.Vulkan.Core10.MemoryManagement
+  , module Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  , module Graphics.Vulkan.Core10.Fence
+  , module Graphics.Vulkan.Core10.QueueSemaphore
+  , module Graphics.Vulkan.Core10.Event
+  , module Graphics.Vulkan.Core10.Query
+  , module Graphics.Vulkan.Core10.Buffer
+  , module Graphics.Vulkan.Core10.BufferView
+  , module Graphics.Vulkan.Core10.Image
+  , module Graphics.Vulkan.Core10.ImageView
+  , module Graphics.Vulkan.Core10.Shader
+  , module Graphics.Vulkan.Core10.PipelineCache
+  , module Graphics.Vulkan.Core10.Pipeline
+  , module Graphics.Vulkan.Core10.PipelineLayout
+  , module Graphics.Vulkan.Core10.Sampler
+  , module Graphics.Vulkan.Core10.DescriptorSet
+  , module Graphics.Vulkan.Core10.Pass
+  , module Graphics.Vulkan.Core10.CommandPool
+  , module Graphics.Vulkan.Core10.CommandBuffer
+  , module Graphics.Vulkan.Core10.CommandBufferBuilding
+  ) where
+
+
+import Graphics.Vulkan.Core10.Core
+import Graphics.Vulkan.Core10.Version
+import Graphics.Vulkan.Core10.Constants
+import Graphics.Vulkan.Core10.DeviceInitialization
+import Graphics.Vulkan.Core10.Device
+import Graphics.Vulkan.Core10.ExtensionDiscovery
+import Graphics.Vulkan.Core10.LayerDiscovery
+import Graphics.Vulkan.Core10.Queue
+import Graphics.Vulkan.Core10.Memory
+import Graphics.Vulkan.Core10.MemoryManagement
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+import Graphics.Vulkan.Core10.Fence
+import Graphics.Vulkan.Core10.QueueSemaphore
+import Graphics.Vulkan.Core10.Event
+import Graphics.Vulkan.Core10.Query
+import Graphics.Vulkan.Core10.Buffer
+import Graphics.Vulkan.Core10.BufferView
+import Graphics.Vulkan.Core10.Image
+import Graphics.Vulkan.Core10.ImageView
+import Graphics.Vulkan.Core10.Shader
+import Graphics.Vulkan.Core10.PipelineCache
+import Graphics.Vulkan.Core10.Pipeline
+import Graphics.Vulkan.Core10.PipelineLayout
+import Graphics.Vulkan.Core10.Sampler
+import Graphics.Vulkan.Core10.DescriptorSet
+import Graphics.Vulkan.Core10.Pass
+import Graphics.Vulkan.Core10.CommandPool
+import Graphics.Vulkan.Core10.CommandBuffer
+import Graphics.Vulkan.Core10.CommandBufferBuilding
+
+
+
diff --git a/src/Graphics/Vulkan/Core10/Buffer.hs b/src/Graphics/Vulkan/Core10/Buffer.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Buffer.hs
@@ -0,0 +1,580 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Buffer
+  ( VkSharingMode(..)
+  , pattern VK_SHARING_MODE_EXCLUSIVE
+  , pattern VK_SHARING_MODE_CONCURRENT
+  , VkBufferUsageFlagBits(..)
+  , pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT
+  , pattern VK_BUFFER_USAGE_TRANSFER_DST_BIT
+  , pattern VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT
+  , pattern VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT
+  , pattern VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT
+  , pattern VK_BUFFER_USAGE_STORAGE_BUFFER_BIT
+  , pattern VK_BUFFER_USAGE_INDEX_BUFFER_BIT
+  , pattern VK_BUFFER_USAGE_VERTEX_BUFFER_BIT
+  , pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT
+  , VkBufferCreateFlagBits(..)
+  , pattern VK_BUFFER_CREATE_SPARSE_BINDING_BIT
+  , pattern VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT
+  , pattern VK_BUFFER_CREATE_SPARSE_ALIASED_BIT
+  , vkCreateBuffer
+  , vkDestroyBuffer
+  , VkBufferCreateInfo(..)
+  , VkBufferUsageFlags
+  , VkBufferCreateFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  )
+
+
+-- ** VkSharingMode
+
+-- | 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
+--     family at a time.
+--
+-- -   @VK_SHARING_MODE_CONCURRENT@ specifies that concurrent access to any
+--     range or image subresource of the object from multiple queue
+--     families is supported.
+--
+-- __Note__
+--
+-- @VK_SHARING_MODE_CONCURRENT@ /may/ result in lower performance access to
+-- the buffer or image than @VK_SHARING_MODE_EXCLUSIVE@.
+--
+-- Ranges of buffers and image subresources of image objects created using
+-- @VK_SHARING_MODE_EXCLUSIVE@ /must/ only be accessed by queues in the
+-- queue family that has /ownership/ of the resource. Upon creation, such
+-- 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>
+-- 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.
+--
+-- A queue family /can/ take ownership of an image subresource or buffer
+-- range of a resource created with @VK_SHARING_MODE_EXCLUSIVE@, without an
+-- ownership transfer, in the same way as for a resource that was just
+-- created; however, taking ownership in this way has the effect that the
+-- contents of the image subresource or buffer range are undefined.
+--
+-- Ranges of buffers and image subresources of image objects created using
+-- @VK_SHARING_MODE_CONCURRENT@ /must/ only be accessed by queues from the
+-- queue families specified through the @queueFamilyIndexCount@ and
+-- @pQueueFamilyIndices@ members of the corresponding create info
+-- structures.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkBufferCreateInfo', 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
+newtype VkSharingMode = VkSharingMode Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSharingMode where
+  showsPrec _ VK_SHARING_MODE_EXCLUSIVE = showString "VK_SHARING_MODE_EXCLUSIVE"
+  showsPrec _ VK_SHARING_MODE_CONCURRENT = showString "VK_SHARING_MODE_CONCURRENT"
+  showsPrec p (VkSharingMode x) = showParen (p >= 11) (showString "VkSharingMode " . showsPrec 11 x)
+
+instance Read VkSharingMode where
+  readPrec = parens ( choose [ ("VK_SHARING_MODE_EXCLUSIVE",  pure VK_SHARING_MODE_EXCLUSIVE)
+                             , ("VK_SHARING_MODE_CONCURRENT", pure VK_SHARING_MODE_CONCURRENT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSharingMode")
+                        v <- step readPrec
+                        pure (VkSharingMode v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkSharingMode" "VK_SHARING_MODE_EXCLUSIVE"
+pattern VK_SHARING_MODE_EXCLUSIVE :: VkSharingMode
+pattern VK_SHARING_MODE_EXCLUSIVE = VkSharingMode 0
+
+-- No documentation found for Nested "VkSharingMode" "VK_SHARING_MODE_CONCURRENT"
+pattern VK_SHARING_MODE_CONCURRENT :: VkSharingMode
+pattern VK_SHARING_MODE_CONCURRENT = VkSharingMode 1
+-- ** VkBufferUsageFlagBits
+
+-- | VkBufferUsageFlagBits - Bitmask specifying allowed usage of a buffer
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkBufferUsageFlags'
+newtype VkBufferUsageFlagBits = VkBufferUsageFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkBufferUsageFlagBits where
+  showsPrec _ VK_BUFFER_USAGE_TRANSFER_SRC_BIT = showString "VK_BUFFER_USAGE_TRANSFER_SRC_BIT"
+  showsPrec _ VK_BUFFER_USAGE_TRANSFER_DST_BIT = showString "VK_BUFFER_USAGE_TRANSFER_DST_BIT"
+  showsPrec _ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = showString "VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"
+  showsPrec _ VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = showString "VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"
+  showsPrec _ VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = showString "VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"
+  showsPrec _ VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = showString "VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"
+  showsPrec _ VK_BUFFER_USAGE_INDEX_BUFFER_BIT = showString "VK_BUFFER_USAGE_INDEX_BUFFER_BIT"
+  showsPrec _ VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = showString "VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"
+  showsPrec _ VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = showString "VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"
+  showsPrec p (VkBufferUsageFlagBits x) = showParen (p >= 11) (showString "VkBufferUsageFlagBits " . showsPrec 11 x)
+
+instance Read VkBufferUsageFlagBits where
+  readPrec = parens ( choose [ ("VK_BUFFER_USAGE_TRANSFER_SRC_BIT",         pure VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
+                             , ("VK_BUFFER_USAGE_TRANSFER_DST_BIT",         pure VK_BUFFER_USAGE_TRANSFER_DST_BIT)
+                             , ("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT", pure VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
+                             , ("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT", pure VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
+                             , ("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT",       pure VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
+                             , ("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT",       pure VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
+                             , ("VK_BUFFER_USAGE_INDEX_BUFFER_BIT",         pure VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
+                             , ("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT",        pure VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
+                             , ("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT",      pure VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBufferUsageFlagBits")
+                        v <- step readPrec
+                        pure (VkBufferUsageFlagBits v)
+                        )
+                    )
+
+-- | @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>).
+pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_TRANSFER_SRC_BIT = VkBufferUsageFlagBits 0x00000001
+
+-- | @VK_BUFFER_USAGE_TRANSFER_DST_BIT@ specifies that the buffer /can/ be
+-- used as the destination of a transfer command.
+pattern VK_BUFFER_USAGE_TRANSFER_DST_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_TRANSFER_DST_BIT = VkBufferUsageFlagBits 0x00000002
+
+-- | @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ specifies that the buffer
+-- /can/ be used to create a @VkBufferView@ suitable for occupying a
+-- @VkDescriptorSet@ slot of type
+-- @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@.
+pattern VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x00000004
+
+-- | @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ specifies that the buffer
+-- /can/ be used to create a @VkBufferView@ suitable for occupying a
+-- @VkDescriptorSet@ slot of type
+-- @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@.
+pattern VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT = VkBufferUsageFlagBits 0x00000008
+
+-- | @VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT@ specifies that the buffer /can/ be
+-- used in a @VkDescriptorBufferInfo@ suitable for occupying a
+-- @VkDescriptorSet@ slot either of type
+-- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+-- @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@.
+pattern VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT = VkBufferUsageFlagBits 0x00000010
+
+-- | @VK_BUFFER_USAGE_STORAGE_BUFFER_BIT@ specifies that the buffer /can/ be
+-- used in a @VkDescriptorBufferInfo@ suitable for occupying a
+-- @VkDescriptorSet@ slot either of type
+-- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+-- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@.
+pattern VK_BUFFER_USAGE_STORAGE_BUFFER_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_STORAGE_BUFFER_BIT = VkBufferUsageFlagBits 0x00000020
+
+-- | @VK_BUFFER_USAGE_INDEX_BUFFER_BIT@ specifies that the buffer is suitable
+-- for passing as the @buffer@ parameter to @vkCmdBindIndexBuffer@.
+pattern VK_BUFFER_USAGE_INDEX_BUFFER_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_INDEX_BUFFER_BIT = VkBufferUsageFlagBits 0x00000040
+
+-- | @VK_BUFFER_USAGE_VERTEX_BUFFER_BIT@ specifies that the buffer is
+-- suitable for passing as an element of the @pBuffers@ array to
+-- @vkCmdBindVertexBuffers@.
+pattern VK_BUFFER_USAGE_VERTEX_BUFFER_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_VERTEX_BUFFER_BIT = VkBufferUsageFlagBits 0x00000080
+
+-- | @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ specifies that the buffer is
+-- suitable for passing as the @buffer@ parameter to @vkCmdDrawIndirect@,
+-- @vkCmdDrawIndexedIndirect@, or @vkCmdDispatchIndirect@.
+pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT :: VkBufferUsageFlagBits
+pattern VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT = VkBufferUsageFlagBits 0x00000100
+-- ** VkBufferCreateFlagBits
+
+-- | VkBufferCreateFlagBits - Bitmask specifying additional parameters of a
+-- buffer
+--
+-- = Description
+-- #_description#
+--
+-- -   @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ specifies that the buffer will
+--     be backed using sparse memory binding.
+--
+-- -   @VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT@ specifies that the buffer
+--     /can/ be partially backed using sparse memory binding. Buffers
+--     created with this flag /must/ also be created with the
+--     @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@ flag.
+--
+-- -   @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@ specifies that the buffer will
+--     be backed using sparse memory binding with memory ranges that might
+--     also simultaneously be backing another buffer (or another portion of
+--     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>
+-- for details of the sparse memory features supported on a device.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkBufferCreateFlags'
+newtype VkBufferCreateFlagBits = VkBufferCreateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkBufferCreateFlagBits where
+  showsPrec _ VK_BUFFER_CREATE_SPARSE_BINDING_BIT = showString "VK_BUFFER_CREATE_SPARSE_BINDING_BIT"
+  showsPrec _ VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = showString "VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"
+  showsPrec _ VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = showString "VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkBufferCreateFlagBits 0x00000008) = showString "VK_BUFFER_CREATE_PROTECTED_BIT"
+  showsPrec p (VkBufferCreateFlagBits x) = showParen (p >= 11) (showString "VkBufferCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkBufferCreateFlagBits where
+  readPrec = parens ( choose [ ("VK_BUFFER_CREATE_SPARSE_BINDING_BIT",   pure VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
+                             , ("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT", pure VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
+                             , ("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT",   pure VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_BUFFER_CREATE_PROTECTED_BIT", pure (VkBufferCreateFlagBits 0x00000008))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBufferCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkBufferCreateFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkBufferCreateFlagBits" "VK_BUFFER_CREATE_SPARSE_BINDING_BIT"
+pattern VK_BUFFER_CREATE_SPARSE_BINDING_BIT :: VkBufferCreateFlagBits
+pattern VK_BUFFER_CREATE_SPARSE_BINDING_BIT = VkBufferCreateFlagBits 0x00000001
+
+-- No documentation found for Nested "VkBufferCreateFlagBits" "VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"
+pattern VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT :: VkBufferCreateFlagBits
+pattern VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT = VkBufferCreateFlagBits 0x00000002
+
+-- No documentation found for Nested "VkBufferCreateFlagBits" "VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"
+pattern VK_BUFFER_CREATE_SPARSE_ALIASED_BIT :: VkBufferCreateFlagBits
+pattern VK_BUFFER_CREATE_SPARSE_ALIASED_BIT = VkBufferCreateFlagBits 0x00000004
+-- | vkCreateBuffer - Create a new buffer object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the buffer object.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkBufferCreateInfo@ structure containing parameters affecting
+--     creation of the buffer.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--     @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@, creating this @VkBuffer@
+--     /must/ not cause the total required sparse memory for all currently
+--     valid sparse resources on the device to exceed
+--     @VkPhysicalDeviceLimits@::@sparseAddressSpaceSize@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkBufferCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pBuffer@ /must/ be a valid pointer to a @VkBuffer@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkBufferCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkCreateBuffer" vkCreateBuffer :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkBufferCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pBuffer" ::: Ptr VkBuffer) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @buffer@, either directly or
+--     via a @VkBufferView@, /must/ have completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @buffer@ was created,
+--     a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @buffer@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @buffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @buffer@ /must/
+--     be a valid @VkBuffer@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @buffer@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @buffer@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDestroyBuffer" vkDestroyBuffer :: ("device" ::: VkDevice) -> ("buffer" ::: VkBuffer) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | VkBufferCreateInfo - Structure specifying the parameters of a newly
+-- created buffer object
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @size@ /must/ be greater than @0@
+--
+-- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
+--     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
+--     @queueFamilyIndexCount@ @uint32_t@ values
+--
+-- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
+--     @queueFamilyIndexCount@ /must/ be greater than @1@
+--
+-- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@, each element of
+--     @pQueueFamilyIndices@ /must/ be unique and /must/ be less than
+--     @pQueueFamilyPropertyCount@ returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'
+--     for the @physicalDevice@ that was used to create @device@
+--
+-- -   If the
+--     <{html_spec_relative}#features-features-sparseBinding sparse bindings>
+--     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>
+--     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>
+--     feature is not enabled, @flags@ /must/ not contain
+--     @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@
+--
+-- -   If @flags@ contains @VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT@ or
+--     @VK_BUFFER_CREATE_SPARSE_ALIASED_BIT@, it /must/ also contain
+--     @VK_BUFFER_CREATE_SPARSE_BINDING_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationBufferCreateInfoNV'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryBufferCreateInfo'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be a valid combination of 'VkBufferCreateFlagBits'
+--     values
+--
+-- -   @usage@ /must/ be a valid combination of 'VkBufferUsageFlagBits'
+--     values
+--
+-- -   @usage@ /must/ not be @0@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBufferCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBufferCreateInfo" "vkFlags"
+  vkFlags :: VkBufferCreateFlags
+  , -- No documentation found for Nested "VkBufferCreateInfo" "vkSize"
+  vkSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkBufferCreateInfo" "vkUsage"
+  vkUsage :: VkBufferUsageFlags
+  , -- No documentation found for Nested "VkBufferCreateInfo" "vkSharingMode"
+  vkSharingMode :: VkSharingMode
+  , -- No documentation found for Nested "VkBufferCreateInfo" "vkQueueFamilyIndexCount"
+  vkQueueFamilyIndexCount :: Word32
+  , -- No documentation found for Nested "VkBufferCreateInfo" "vkPQueueFamilyIndices"
+  vkPQueueFamilyIndices :: Ptr Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBufferCreateInfo where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkBufferCreateInfo <$> peek (ptr `plusPtr` 0)
+                                <*> peek (ptr `plusPtr` 8)
+                                <*> peek (ptr `plusPtr` 16)
+                                <*> peek (ptr `plusPtr` 24)
+                                <*> 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 :: VkBufferCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkSize (poked :: VkBufferCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkUsage (poked :: VkBufferCreateInfo))
+                *> poke (ptr `plusPtr` 36) (vkSharingMode (poked :: VkBufferCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkQueueFamilyIndexCount (poked :: VkBufferCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkPQueueFamilyIndices (poked :: VkBufferCreateInfo))
+-- | 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'
+type VkBufferUsageFlags = VkBufferUsageFlagBits
+-- | 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'
+type VkBufferCreateFlags = VkBufferCreateFlagBits
diff --git a/src/Graphics/Vulkan/Core10/BufferView.hs b/src/Graphics/Vulkan/Core10/BufferView.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/BufferView.hs
@@ -0,0 +1,311 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.BufferView
+  ( VkBufferViewCreateFlags(..)
+  , VkBufferView
+  , vkCreateBufferView
+  , vkDestroyBufferView
+  , VkBufferViewCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  )
+
+
+-- ** VkBufferViewCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkBufferViewCreateFlags where
+  
+  showsPrec p (VkBufferViewCreateFlags x) = showParen (p >= 11) (showString "VkBufferViewCreateFlags " . showsPrec 11 x)
+
+instance Read VkBufferViewCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBufferViewCreateFlags")
+                        v <- step readPrec
+                        pure (VkBufferViewCreateFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+data VkBufferView_T
+-- | VkBufferView - Opaque handle to a buffer view object
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet',
+-- 'vkCreateBufferView', 'vkDestroyBufferView'
+type VkBufferView = Ptr VkBufferView_T
+-- | vkCreateBufferView - Create a new buffer view object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the buffer view.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkBufferViewCreateInfo@ structure containing parameters to be used
+--     to create the buffer.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkBufferViewCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pView@ /must/ be a valid pointer to a @VkBufferView@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkBufferView', 'VkBufferViewCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkCreateBufferView" vkCreateBufferView :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkBufferViewCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pView" ::: Ptr VkBufferView) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @bufferView@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @bufferView@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @bufferView@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @bufferView@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @bufferView@
+--     /must/ be a valid @VkBufferView@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @bufferView@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @bufferView@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkBufferView', 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDestroyBufferView" vkDestroyBufferView :: ("device" ::: VkDevice) -> ("bufferView" ::: VkBufferView) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | VkBufferViewCreateInfo - Structure specifying parameters of a newly
+-- created buffer view
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @offset@ /must/ be less than the size of @buffer@
+--
+-- -   @offset@ /must/ be a multiple of
+--     @VkPhysicalDeviceLimits@::@minTexelBufferOffsetAlignment@
+--
+-- -   If @range@ is not equal to @VK_WHOLE_SIZE@, @range@ /must/ be
+--     greater than @0@
+--
+-- -   If @range@ is not equal to @VK_WHOLE_SIZE@, @range@ /must/ be a
+--     multiple of the element size of @format@
+--
+-- -   If @range@ is not equal to @VK_WHOLE_SIZE@, @range@ divided by the
+--     element size of @format@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxTexelBufferElements@
+--
+-- -   If @range@ is not equal to @VK_WHOLE_SIZE@, the sum of @offset@ and
+--     @range@ /must/ be less than or equal to the size of @buffer@
+--
+-- -   @buffer@ /must/ have been created with a @usage@ value containing at
+--     least one of @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ or
+--     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@
+--
+-- -   If @buffer@ was created with @usage@ containing
+--     @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@, @format@ /must/ be
+--     supported for uniform texel buffers, as specified by the
+--     @VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT@ flag in
+--     @VkFormatProperties@::@bufferFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   If @buffer@ was created with @usage@ containing
+--     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@, @format@ /must/ be
+--     supported for storage texel buffers, as specified by the
+--     @VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT@ flag in
+--     @VkFormatProperties@::@bufferFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@
+--
+-- -   If @buffer@ is non-sparse then it /must/ be bound completely and
+--     contiguously to a single @VkDeviceMemory@ object
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkFlags"
+  vkFlags :: VkBufferViewCreateFlags
+  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkBuffer"
+  vkBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkOffset"
+  vkOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkBufferViewCreateInfo" "vkRange"
+  vkRange :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBufferViewCreateInfo where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkBufferViewCreateInfo <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferViewCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferViewCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkBufferViewCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkBuffer (poked :: VkBufferViewCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkFormat (poked :: VkBufferViewCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkOffset (poked :: VkBufferViewCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkRange (poked :: VkBufferViewCreateInfo))
diff --git a/src/Graphics/Vulkan/Core10/CommandBuffer.hs b/src/Graphics/Vulkan/Core10/CommandBuffer.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/CommandBuffer.hs
@@ -0,0 +1,830 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.CommandBuffer
+  ( VkCommandBufferLevel(..)
+  , pattern VK_COMMAND_BUFFER_LEVEL_PRIMARY
+  , pattern VK_COMMAND_BUFFER_LEVEL_SECONDARY
+  , VkQueryControlFlagBits(..)
+  , pattern VK_QUERY_CONTROL_PRECISE_BIT
+  , VkCommandBufferResetFlagBits(..)
+  , pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT
+  , VkCommandBufferUsageFlagBits(..)
+  , pattern VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT
+  , pattern VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT
+  , pattern VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT
+  , vkAllocateCommandBuffers
+  , vkFreeCommandBuffers
+  , vkBeginCommandBuffer
+  , vkEndCommandBuffer
+  , vkResetCommandBuffer
+  , VkCommandBufferAllocateInfo(..)
+  , VkCommandBufferInheritanceInfo(..)
+  , VkCommandBufferBeginInfo(..)
+  , VkQueryControlFlags
+  , VkCommandBufferResetFlags
+  , VkCommandBufferUsageFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.CommandPool
+  ( VkCommandPool
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkFramebuffer
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkRenderPass
+  )
+import Graphics.Vulkan.Core10.Query
+  ( VkQueryPipelineStatisticFlags
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+
+
+-- ** VkCommandBufferLevel
+
+-- | VkCommandBufferLevel - Enumerant specifying a command buffer level
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandBufferAllocateInfo'
+newtype VkCommandBufferLevel = VkCommandBufferLevel Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkCommandBufferLevel where
+  showsPrec _ VK_COMMAND_BUFFER_LEVEL_PRIMARY = showString "VK_COMMAND_BUFFER_LEVEL_PRIMARY"
+  showsPrec _ VK_COMMAND_BUFFER_LEVEL_SECONDARY = showString "VK_COMMAND_BUFFER_LEVEL_SECONDARY"
+  showsPrec p (VkCommandBufferLevel x) = showParen (p >= 11) (showString "VkCommandBufferLevel " . showsPrec 11 x)
+
+instance Read VkCommandBufferLevel where
+  readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_LEVEL_PRIMARY",   pure VK_COMMAND_BUFFER_LEVEL_PRIMARY)
+                             , ("VK_COMMAND_BUFFER_LEVEL_SECONDARY", pure VK_COMMAND_BUFFER_LEVEL_SECONDARY)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCommandBufferLevel")
+                        v <- step readPrec
+                        pure (VkCommandBufferLevel v)
+                        )
+                    )
+
+-- | @VK_COMMAND_BUFFER_LEVEL_PRIMARY@ specifies a primary command buffer.
+pattern VK_COMMAND_BUFFER_LEVEL_PRIMARY :: VkCommandBufferLevel
+pattern VK_COMMAND_BUFFER_LEVEL_PRIMARY = VkCommandBufferLevel 0
+
+-- | @VK_COMMAND_BUFFER_LEVEL_SECONDARY@ specifies a secondary command
+-- buffer.
+pattern VK_COMMAND_BUFFER_LEVEL_SECONDARY :: VkCommandBufferLevel
+pattern VK_COMMAND_BUFFER_LEVEL_SECONDARY = VkCommandBufferLevel 1
+-- ** VkQueryControlFlagBits
+
+-- | VkQueryControlFlagBits - Bitmask specifying constraints on a query
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkQueryControlFlags'
+newtype VkQueryControlFlagBits = VkQueryControlFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkQueryControlFlagBits where
+  showsPrec _ VK_QUERY_CONTROL_PRECISE_BIT = showString "VK_QUERY_CONTROL_PRECISE_BIT"
+  showsPrec p (VkQueryControlFlagBits x) = showParen (p >= 11) (showString "VkQueryControlFlagBits " . showsPrec 11 x)
+
+instance Read VkQueryControlFlagBits where
+  readPrec = parens ( choose [ ("VK_QUERY_CONTROL_PRECISE_BIT", pure VK_QUERY_CONTROL_PRECISE_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkQueryControlFlagBits")
+                        v <- step readPrec
+                        pure (VkQueryControlFlagBits v)
+                        )
+                    )
+
+-- | @VK_QUERY_CONTROL_PRECISE_BIT@ specifies the precision of
+-- <{html_spec_relative}#queries-occlusion occlusion queries>.
+pattern VK_QUERY_CONTROL_PRECISE_BIT :: VkQueryControlFlagBits
+pattern VK_QUERY_CONTROL_PRECISE_BIT = VkQueryControlFlagBits 0x00000001
+-- ** VkCommandBufferResetFlagBits
+
+-- | VkCommandBufferResetFlagBits - Bitmask controlling behavior of a command
+-- buffer reset
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandBufferResetFlags'
+newtype VkCommandBufferResetFlagBits = VkCommandBufferResetFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkCommandBufferResetFlagBits where
+  showsPrec _ VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = showString "VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"
+  showsPrec p (VkCommandBufferResetFlagBits x) = showParen (p >= 11) (showString "VkCommandBufferResetFlagBits " . showsPrec 11 x)
+
+instance Read VkCommandBufferResetFlagBits where
+  readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT", pure VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCommandBufferResetFlagBits")
+                        v <- step readPrec
+                        pure (VkCommandBufferResetFlagBits v)
+                        )
+                    )
+
+-- | @VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT@ specifies that most or
+-- 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>.
+pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT :: VkCommandBufferResetFlagBits
+pattern VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT = VkCommandBufferResetFlagBits 0x00000001
+-- ** VkCommandBufferUsageFlagBits
+
+-- | VkCommandBufferUsageFlagBits - Bitmask specifying usage behavior for
+-- command buffer
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandBufferUsageFlags'
+newtype VkCommandBufferUsageFlagBits = VkCommandBufferUsageFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkCommandBufferUsageFlagBits where
+  showsPrec _ VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = showString "VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"
+  showsPrec _ VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = showString "VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"
+  showsPrec _ VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = showString "VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"
+  showsPrec p (VkCommandBufferUsageFlagBits x) = showParen (p >= 11) (showString "VkCommandBufferUsageFlagBits " . showsPrec 11 x)
+
+instance Read VkCommandBufferUsageFlagBits where
+  readPrec = parens ( choose [ ("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT",      pure VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
+                             , ("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT", pure VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
+                             , ("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT",     pure VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCommandBufferUsageFlagBits")
+                        v <- step readPrec
+                        pure (VkCommandBufferUsageFlagBits v)
+                        )
+                    )
+
+-- | @VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT@ specifies that each
+-- recording of the command buffer will only be submitted once, and the
+-- command buffer will be reset and recorded again between each submission.
+pattern VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT :: VkCommandBufferUsageFlagBits
+pattern VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT = VkCommandBufferUsageFlagBits 0x00000001
+
+-- | @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@ specifies that a
+-- secondary command buffer is considered to be entirely inside a render
+-- pass. If this is a primary command buffer, then this bit is ignored.
+pattern VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT :: VkCommandBufferUsageFlagBits
+pattern VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT = VkCommandBufferUsageFlagBits 0x00000002
+
+-- | @VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT@ specifies that a command
+-- buffer /can/ be resubmitted to a queue while it is in the /pending
+-- state/, and recorded into multiple primary command buffers.
+pattern VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT :: VkCommandBufferUsageFlagBits
+pattern VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT = VkCommandBufferUsageFlagBits 0x00000004
+-- | vkAllocateCommandBuffers - Allocate command buffers from an existing
+-- command pool
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the command pool.
+--
+-- -   @pAllocateInfo@ is a pointer to an instance of the
+--     @VkCommandBufferAllocateInfo@ structure describing parameters of the
+--     allocation.
+--
+-- -   @pCommandBuffers@ is a pointer to an array of @VkCommandBuffer@
+--     handles in which the resulting command buffer objects are returned.
+--     The array /must/ be at least the length specified by the
+--     @commandBufferCount@ member of @pAllocateInfo@. Each allocated
+--     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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
+--     @VkCommandBufferAllocateInfo@ structure
+--
+-- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
+--     @pAllocateInfo@::commandBufferCount @VkCommandBuffer@ handles
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pAllocateInfo@::commandPool /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'VkCommandBufferAllocateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkAllocateCommandBuffers" vkAllocateCommandBuffers :: ("device" ::: VkDevice) -> ("pAllocateInfo" ::: Ptr VkCommandBufferAllocateInfo) -> ("pCommandBuffers" ::: Ptr VkCommandBuffer) -> IO VkResult
+-- | vkFreeCommandBuffers - Free command buffers
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the command pool.
+--
+-- -   @commandPool@ is the command pool from which the command buffers
+--     were allocated.
+--
+-- -   @commandBufferCount@ is the length of the @pCommandBuffers@ array.
+--
+-- -   @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>
+-- and has any element of @pCommandBuffers@ recorded into it, becomes
+-- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   All elements of @pCommandBuffers@ /must/ not be in the
+--     <{html_spec_relative}#commandbuffers-lifecycle pending state>
+--
+-- -   @pCommandBuffers@ /must/ be a valid pointer to an array of
+--     @commandBufferCount@ @VkCommandBuffer@ handles, each element of
+--     which /must/ either be a valid handle or @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @commandPool@ /must/ be a valid @VkCommandPool@ handle
+--
+-- -   @commandBufferCount@ /must/ be greater than @0@
+--
+-- -   @commandPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- -   Each element of @pCommandBuffers@ that is a valid handle /must/ have
+--     been created, allocated, or retrieved from @commandPool@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandPool@ /must/ be externally synchronized
+--
+-- -   Host access to each member of @pCommandBuffers@ /must/ be externally
+--     synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPool',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkFreeCommandBuffers" vkFreeCommandBuffers :: ("device" ::: VkDevice) -> ("commandPool" ::: VkCommandPool) -> ("commandBufferCount" ::: Word32) -> ("pCommandBuffers" ::: Ptr VkCommandBuffer) -> IO ()
+-- | 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.
+--
+-- -   @pBeginInfo@ is an instance of the @VkCommandBufferBeginInfo@
+--     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>.
+--
+-- -   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>.
+--
+-- -   If @commandBuffer@ is a secondary command buffer, the
+--     @pInheritanceInfo@ member of @pBeginInfo@ /must/ be a valid
+--     @VkCommandBufferInheritanceInfo@ structure
+--
+-- -   If @commandBuffer@ is a secondary command buffer and either the
+--     @occlusionQueryEnable@ member of the @pInheritanceInfo@ member of
+--     @pBeginInfo@ is @VK_FALSE@, or the precise occlusion queries feature
+--     is not enabled, the @queryFlags@ member of the @pInheritanceInfo@
+--     member @pBeginInfo@ /must/ not contain
+--     @VK_QUERY_CONTROL_PRECISE_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pBeginInfo@ /must/ be a valid pointer to a valid
+--     @VkCommandBufferBeginInfo@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'VkCommandBufferBeginInfo'
+foreign import ccall "vkBeginCommandBuffer" vkBeginCommandBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("pBeginInfo" ::: Ptr VkCommandBufferBeginInfo) -> IO VkResult
+-- | 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>.
+--
+-- == Valid Usage
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <{html_spec_relative}#commandbuffers-lifecycle recording state>.
+--
+-- -   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
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- -   Host access to the @VkCommandPool@ that @commandBuffer@ was
+--     allocated from /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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>.
+--
+-- -   @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>
+-- and has @commandBuffer@ recorded into it, becomes
+-- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   @commandBuffer@ /must/ not be in the
+--     <{html_spec_relative}#commandbuffers-lifecycle pending state>
+--
+-- -   @commandBuffer@ /must/ have been allocated from a pool that was
+--     created with the @VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkCommandBufferResetFlagBits' values
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandBuffer@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer',
+-- 'VkCommandBufferResetFlags'
+foreign import ccall "vkResetCommandBuffer" vkResetCommandBuffer :: ("commandBuffer" ::: VkCommandBuffer) -> ("flags" ::: VkCommandBufferResetFlags) -> IO VkResult
+-- | VkCommandBufferAllocateInfo - Structure specifying the allocation
+-- parameters for command buffer object
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @commandBufferCount@ /must/ be greater than @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @commandPool@ /must/ be a valid @VkCommandPool@ handle
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkCommandPool"
+  vkCommandPool :: VkCommandPool
+  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkLevel"
+  vkLevel :: VkCommandBufferLevel
+  , -- No documentation found for Nested "VkCommandBufferAllocateInfo" "vkCommandBufferCount"
+  vkCommandBufferCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkCommandBufferAllocateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkCommandBufferAllocateInfo <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+                                         <*> peek (ptr `plusPtr` 24)
+                                         <*> peek (ptr `plusPtr` 28)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferAllocateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferAllocateInfo))
+                *> poke (ptr `plusPtr` 16) (vkCommandPool (poked :: VkCommandBufferAllocateInfo))
+                *> poke (ptr `plusPtr` 24) (vkLevel (poked :: VkCommandBufferAllocateInfo))
+                *> poke (ptr `plusPtr` 28) (vkCommandBufferCount (poked :: VkCommandBufferAllocateInfo))
+-- | VkCommandBufferInheritanceInfo - Structure specifying command buffer
+-- inheritance info
+--
+-- = Members
+-- #_members#
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @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.
+--
+-- -   @subpass@ is the index of the subpass within the render pass
+--     instance that the @VkCommandBuffer@ will be executed within. If the
+--     @VkCommandBuffer@ will not be executed within a render pass
+--     instance, @subpass@ is ignored.
+--
+-- -   @framebuffer@ optionally refers to the @VkFramebuffer@ object that
+--     the @VkCommandBuffer@ will be rendering to if it is executed within
+--     a render pass instance. It /can/ be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' if the framebuffer
+--     is not known, or if the @VkCommandBuffer@ will not be executed
+--     within a render pass instance.
+--
+--     __Note__
+--
+--     Specifying the exact framebuffer that the secondary command buffer
+--     will be executed with /may/ result in better performance at command
+--     buffer execution time.
+--
+-- -   @occlusionQueryEnable@ specifies whether the command buffer /can/ be
+--     executed while an occlusion query is active in the primary command
+--     buffer. If this is @VK_TRUE@, then this command buffer /can/ be
+--     executed whether the primary command buffer has an occlusion query
+--     active or not. If this is @VK_FALSE@, then the primary command
+--     buffer /must/ not have an occlusion query active.
+--
+-- -   @queryFlags@ specifies the query flags that /can/ be used by an
+--     active occlusion query in the primary command buffer when this
+--     secondary command buffer is executed. If this value includes the
+--     @VK_QUERY_CONTROL_PRECISE_BIT@ bit, then the active query /can/
+--     return boolean results or actual sample counts. If this bit is not
+--     set, then the active query /must/ not use the
+--     @VK_QUERY_CONTROL_PRECISE_BIT@ bit.
+--
+-- -   @pipelineStatistics@ is a bitmask of
+--     'Graphics.Vulkan.Core10.Query.VkQueryPipelineStatisticFlagBits'
+--     specifying the set of pipeline statistics that /can/ be counted by
+--     an active query in the primary command buffer when this secondary
+--     command buffer is executed. If this value includes a given bit, then
+--     this command buffer /can/ be executed whether the primary command
+--     buffer has a pipeline statistics query active that includes this bit
+--     or not. If this value excludes a given bit, then the active pipeline
+--     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>
+--     feature is not enabled, @occlusionQueryEnable@ /must/ be @VK_FALSE@
+--
+-- -   If the
+--     <{html_spec_relative}#features-features-inheritedQueries inherited queries>
+--     feature is enabled, @queryFlags@ /must/ be a valid combination of
+--     'VkQueryControlFlagBits' values
+--
+-- -   If the
+--     <{html_spec_relative}#features-features-pipelineStatisticsQuery pipeline statistics queries>
+--     feature is not enabled, @pipelineStatistics@ /must/ be @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   Both of @framebuffer@, and @renderPass@ that are valid handles
+--     /must/ have been created, allocated, or retrieved from the same
+--     @VkDevice@
+--
+-- = See Also
+-- #_see_also#
+--
+-- @VkBool32@, 'VkCommandBufferBeginInfo',
+-- 'Graphics.Vulkan.Core10.Pass.VkFramebuffer', 'VkQueryControlFlags',
+-- 'Graphics.Vulkan.Core10.Query.VkQueryPipelineStatisticFlags',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkCommandBufferInheritanceInfo = VkCommandBufferInheritanceInfo
+  { -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkRenderPass"
+  vkRenderPass :: VkRenderPass
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkSubpass"
+  vkSubpass :: Word32
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkFramebuffer"
+  vkFramebuffer :: VkFramebuffer
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkOcclusionQueryEnable"
+  vkOcclusionQueryEnable :: VkBool32
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkQueryFlags"
+  vkQueryFlags :: VkQueryControlFlags
+  , -- No documentation found for Nested "VkCommandBufferInheritanceInfo" "vkPipelineStatistics"
+  vkPipelineStatistics :: VkQueryPipelineStatisticFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkCommandBufferInheritanceInfo where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkCommandBufferInheritanceInfo <$> 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)
+                                            <*> peek (ptr `plusPtr` 48)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferInheritanceInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferInheritanceInfo))
+                *> poke (ptr `plusPtr` 16) (vkRenderPass (poked :: VkCommandBufferInheritanceInfo))
+                *> poke (ptr `plusPtr` 24) (vkSubpass (poked :: VkCommandBufferInheritanceInfo))
+                *> poke (ptr `plusPtr` 32) (vkFramebuffer (poked :: VkCommandBufferInheritanceInfo))
+                *> poke (ptr `plusPtr` 40) (vkOcclusionQueryEnable (poked :: VkCommandBufferInheritanceInfo))
+                *> poke (ptr `plusPtr` 44) (vkQueryFlags (poked :: VkCommandBufferInheritanceInfo))
+                *> poke (ptr `plusPtr` 48) (vkPipelineStatistics (poked :: VkCommandBufferInheritanceInfo))
+-- | VkCommandBufferBeginInfo - Structure specifying a command buffer begin
+-- operation
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If @flags@ contains
+--     @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@, the @renderPass@
+--     member of @pInheritanceInfo@ /must/ be a valid @VkRenderPass@
+--
+-- -   If @flags@ contains
+--     @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@, the @subpass@
+--     member of @pInheritanceInfo@ /must/ be a valid subpass index within
+--     the @renderPass@ member of @pInheritanceInfo@
+--
+-- -   If @flags@ contains
+--     @VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT@, the
+--     @framebuffer@ member of @pInheritanceInfo@ /must/ be either
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', or a valid
+--     @VkFramebuffer@ that is compatible with the @renderPass@ member of
+--     @pInheritanceInfo@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupCommandBufferBeginInfo'
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkCommandBufferUsageFlagBits' values
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandBufferInheritanceInfo', 'VkCommandBufferUsageFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkBeginCommandBuffer'
+data VkCommandBufferBeginInfo = VkCommandBufferBeginInfo
+  { -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkFlags"
+  vkFlags :: VkCommandBufferUsageFlags
+  , -- No documentation found for Nested "VkCommandBufferBeginInfo" "vkPInheritanceInfo"
+  vkPInheritanceInfo :: Ptr VkCommandBufferInheritanceInfo
+  }
+  deriving (Eq, Show)
+
+instance Storable VkCommandBufferBeginInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkCommandBufferBeginInfo <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCommandBufferBeginInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandBufferBeginInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkCommandBufferBeginInfo))
+                *> poke (ptr `plusPtr` 24) (vkPInheritanceInfo (poked :: VkCommandBufferBeginInfo))
+-- | 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'
+type VkQueryControlFlags = VkQueryControlFlagBits
+-- | 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/CommandBufferBuilding.hs
@@ -0,0 +1,7331 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+{-# language LambdaCase #-}
+
+module Graphics.Vulkan.Core10.CommandBufferBuilding
+  ( VkIndexType(..)
+  , pattern VK_INDEX_TYPE_UINT16
+  , pattern VK_INDEX_TYPE_UINT32
+  , VkSubpassContents(..)
+  , pattern VK_SUBPASS_CONTENTS_INLINE
+  , pattern VK_SUBPASS_CONTENTS_SECONDARY_COMMAND_BUFFERS
+  , VkStencilFaceFlagBits(..)
+  , pattern VK_STENCIL_FACE_FRONT_BIT
+  , pattern VK_STENCIL_FACE_BACK_BIT
+  , pattern VK_STENCIL_FRONT_AND_BACK
+  , vkCmdBindPipeline
+  , vkCmdSetViewport
+  , vkCmdSetScissor
+  , vkCmdSetLineWidth
+  , vkCmdSetDepthBias
+  , vkCmdSetBlendConstants
+  , vkCmdSetDepthBounds
+  , vkCmdSetStencilCompareMask
+  , vkCmdSetStencilWriteMask
+  , vkCmdSetStencilReference
+  , vkCmdBindDescriptorSets
+  , vkCmdBindIndexBuffer
+  , vkCmdBindVertexBuffers
+  , vkCmdDraw
+  , vkCmdDrawIndexed
+  , vkCmdDrawIndirect
+  , vkCmdDrawIndexedIndirect
+  , vkCmdDispatch
+  , vkCmdDispatchIndirect
+  , vkCmdCopyBuffer
+  , vkCmdCopyImage
+  , vkCmdBlitImage
+  , vkCmdCopyBufferToImage
+  , vkCmdCopyImageToBuffer
+  , vkCmdUpdateBuffer
+  , vkCmdFillBuffer
+  , vkCmdClearColorImage
+  , vkCmdClearDepthStencilImage
+  , vkCmdClearAttachments
+  , vkCmdResolveImage
+  , vkCmdSetEvent
+  , vkCmdResetEvent
+  , vkCmdWaitEvents
+  , vkCmdPipelineBarrier
+  , vkCmdBeginQuery
+  , vkCmdEndQuery
+  , vkCmdResetQueryPool
+  , vkCmdWriteTimestamp
+  , vkCmdCopyQueryPoolResults
+  , vkCmdPushConstants
+  , vkCmdBeginRenderPass
+  , vkCmdNextSubpass
+  , vkCmdEndRenderPass
+  , vkCmdExecuteCommands
+  , VkClearRect(..)
+  , VkImageSubresourceLayers(..)
+  , VkMemoryBarrier(..)
+  , VkBufferMemoryBarrier(..)
+  , VkImageMemoryBarrier(..)
+  , VkBufferCopy(..)
+  , VkImageCopy(..)
+  , VkImageBlit(..)
+  , VkBufferImageCopy(..)
+  , VkImageResolve(..)
+  , VkRenderPassBeginInfo(..)
+  , VkClearDepthStencilValue(..)
+  , VkClearAttachment(..)
+  , VkDrawIndirectCommand(..)
+  , VkDrawIndexedIndirectCommand(..)
+  , VkDispatchIndirectCommand(..)
+  , VkClearColorValue(..)
+  , VkClearValue(..)
+  , VkStencilFaceFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  )
+import Foreign.Ptr
+  ( castPtr
+  , plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.CommandBuffer
+  ( VkQueryControlFlagBits(..)
+  , VkQueryControlFlags
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorSet
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkExtent3D(..)
+  , VkDeviceSize
+  )
+import Graphics.Vulkan.Core10.Event
+  ( VkEvent
+  )
+import Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  )
+import Graphics.Vulkan.Core10.ImageView
+  ( VkImageSubresourceRange(..)
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkImage
+  , VkBuffer
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkFramebuffer
+  , VkAccessFlags
+  , VkDependencyFlagBits(..)
+  , VkDependencyFlags
+  , VkPipelineBindPoint(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkRenderPass
+  , VkShaderStageFlagBits(..)
+  , VkPipelineLayout
+  , VkRect2D(..)
+  , VkViewport(..)
+  , VkPipeline
+  )
+import Graphics.Vulkan.Core10.PipelineLayout
+  ( VkShaderStageFlags
+  )
+import Graphics.Vulkan.Core10.Query
+  ( VkQueryResultFlagBits(..)
+  , VkQueryResultFlags
+  , VkQueryPool
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkPipelineStageFlagBits(..)
+  , VkPipelineStageFlags
+  , VkCommandBuffer
+  )
+import Graphics.Vulkan.Core10.Sampler
+  ( VkFilter(..)
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkOffset3D(..)
+  , VkImageAspectFlags
+  )
+
+
+-- ** VkIndexType
+
+-- | 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#
+--
+-- 'VkStencilFaceFlagBits', 'vkCmdSetStencilCompareMask',
+-- 'vkCmdSetStencilReference', 'vkCmdSetStencilWriteMask'
+type VkStencilFaceFlags = VkStencilFaceFlagBits
diff --git a/src/Graphics/Vulkan/Core10/CommandPool.hs b/src/Graphics/Vulkan/Core10/CommandPool.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/CommandPool.hs
@@ -0,0 +1,416 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.CommandPool
+  ( VkCommandPoolCreateFlagBits(..)
+  , pattern VK_COMMAND_POOL_CREATE_TRANSIENT_BIT
+  , pattern VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT
+  , VkCommandPoolResetFlagBits(..)
+  , pattern VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT
+  , VkCommandPool
+  , vkCreateCommandPool
+  , vkDestroyCommandPool
+  , vkResetCommandPool
+  , VkCommandPoolCreateInfo(..)
+  , VkCommandPoolCreateFlags
+  , VkCommandPoolResetFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+
+
+-- ** VkCommandPoolCreateFlagBits
+
+-- | VkCommandPoolCreateFlagBits - Bitmask specifying usage behavior for a
+-- command pool
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandPoolCreateFlags'
+newtype VkCommandPoolCreateFlagBits = VkCommandPoolCreateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkCommandPoolCreateFlagBits where
+  showsPrec _ VK_COMMAND_POOL_CREATE_TRANSIENT_BIT = showString "VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"
+  showsPrec _ VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = showString "VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkCommandPoolCreateFlagBits 0x00000004) = showString "VK_COMMAND_POOL_CREATE_PROTECTED_BIT"
+  showsPrec p (VkCommandPoolCreateFlagBits x) = showParen (p >= 11) (showString "VkCommandPoolCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkCommandPoolCreateFlagBits where
+  readPrec = parens ( choose [ ("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT",            pure VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
+                             , ("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT", pure VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_COMMAND_POOL_CREATE_PROTECTED_BIT", pure (VkCommandPoolCreateFlagBits 0x00000004))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCommandPoolCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkCommandPoolCreateFlagBits v)
+                        )
+                    )
+
+-- | @VK_COMMAND_POOL_CREATE_TRANSIENT_BIT@ specifies that command buffers
+-- allocated from the pool will be short-lived, meaning that they will be
+-- reset or freed in a relatively short timeframe. This flag /may/ be used
+-- by the implementation to control memory allocation behavior within the
+-- pool.
+pattern VK_COMMAND_POOL_CREATE_TRANSIENT_BIT :: VkCommandPoolCreateFlagBits
+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
+-- '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.
+pattern VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT :: VkCommandPoolCreateFlagBits
+pattern VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT = VkCommandPoolCreateFlagBits 0x00000002
+-- ** VkCommandPoolResetFlagBits
+
+-- | VkCommandPoolResetFlagBits - Bitmask controlling behavior of a command
+-- pool reset
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandPoolResetFlags'
+newtype VkCommandPoolResetFlagBits = VkCommandPoolResetFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkCommandPoolResetFlagBits where
+  showsPrec _ VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = showString "VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"
+  showsPrec p (VkCommandPoolResetFlagBits x) = showParen (p >= 11) (showString "VkCommandPoolResetFlagBits " . showsPrec 11 x)
+
+instance Read VkCommandPoolResetFlagBits where
+  readPrec = parens ( choose [ ("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT", pure VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCommandPoolResetFlagBits")
+                        v <- step readPrec
+                        pure (VkCommandPoolResetFlagBits v)
+                        )
+                    )
+
+-- | @VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT@ specifies that resetting a
+-- command pool recycles all of the resources from the command pool back to
+-- the system.
+pattern VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT :: VkCommandPoolResetFlagBits
+pattern VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT = VkCommandPoolResetFlagBits 0x00000001
+-- | Dummy data to tag the 'Ptr' with
+data VkCommandPool_T
+-- | VkCommandPool - Opaque handle to a command pool object
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferAllocateInfo',
+-- 'vkCreateCommandPool', 'vkDestroyCommandPool',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkFreeCommandBuffers',
+-- 'vkResetCommandPool',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1.vkTrimCommandPool',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_maintenance1.vkTrimCommandPoolKHR'
+type VkCommandPool = Ptr VkCommandPool_T
+-- | 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.
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkCommandPoolCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pCommandPool@ /must/ be a valid pointer to a @VkCommandPool@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkCommandPool', 'VkCommandPoolCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkCreateCommandPool" vkCreateCommandPool :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkCommandPoolCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pCommandPool" ::: Ptr VkCommandPool) -> IO VkResult
+-- | 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.
+--
+-- = Description
+-- #_description#
+--
+-- When a pool is destroyed, all command buffers allocated from the pool
+-- are <{html_spec_relative}#vkFreeCommandBuffers freed>.
+--
+-- Any primary command buffer allocated from another 'VkCommandPool' that
+-- is in the
+-- <{html_spec_relative}#commandbuffers-lifecycle recording or executable state>
+-- and has a secondary command buffer allocated from @commandPool@ recorded
+-- into it, becomes
+-- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   All @VkCommandBuffer@ objects allocated from @commandPool@ /must/
+--     not be in the
+--     <{html_spec_relative}#commandbuffers-lifecycle pending state>.
+--
+-- -   If @VkAllocationCallbacks@ were provided when @commandPool@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @commandPool@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @commandPool@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @commandPool@
+--     /must/ be a valid @VkCommandPool@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @commandPool@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandPool@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkCommandPool', 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDestroyCommandPool" vkDestroyCommandPool :: ("device" ::: VkDevice) -> ("commandPool" ::: VkCommandPool) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkResetCommandPool - Reset a command pool
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the command pool.
+--
+-- -   @commandPool@ is the command pool to reset.
+--
+-- -   @flags@ is a bitmask of 'VkCommandPoolResetFlagBits' controlling the
+--     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>.
+--
+-- Any primary command buffer allocated from another 'VkCommandPool' that
+-- is in the
+-- <{html_spec_relative}#commandbuffers-lifecycle recording or executable state>
+-- and has a secondary command buffer allocated from @commandPool@ recorded
+-- into it, becomes
+-- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+--
+-- == Valid Usage
+--
+-- -   All @VkCommandBuffer@ objects allocated from @commandPool@ /must/
+--     not be in the
+--     <{html_spec_relative}#commandbuffers-lifecycle pending state>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @commandPool@ /must/ be a valid @VkCommandPool@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkCommandPoolResetFlagBits' values
+--
+-- -   @commandPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @commandPool@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandPool', 'VkCommandPoolResetFlags',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkResetCommandPool" vkResetCommandPool :: ("device" ::: VkDevice) -> ("commandPool" ::: VkCommandPool) -> ("flags" ::: VkCommandPoolResetFlags) -> IO VkResult
+-- | VkCommandPoolCreateInfo - Structure specifying parameters of a newly
+-- created command pool
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be the index of a queue family available
+--     in the calling command’s @device@ parameter
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkCommandPoolCreateFlagBits' values
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCommandPoolCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateCommandPool'
+data VkCommandPoolCreateInfo = VkCommandPoolCreateInfo
+  { -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkFlags"
+  vkFlags :: VkCommandPoolCreateFlags
+  , -- No documentation found for Nested "VkCommandPoolCreateInfo" "vkQueueFamilyIndex"
+  vkQueueFamilyIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkCommandPoolCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkCommandPoolCreateInfo <$> 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 :: VkCommandPoolCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCommandPoolCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkCommandPoolCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkCommandPoolCreateInfo))
+-- | 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Constants.hs
@@ -0,0 +1,120 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language ViewPatterns #-}
+{-# language GeneralizedNewtypeDeriving #-}
+
+module Graphics.Vulkan.Core10.Constants
+  ( pattern VK_NULL_HANDLE
+  , VkPipelineCacheHeaderVersion(..)
+  , pattern VK_PIPELINE_CACHE_HEADER_VERSION_ONE
+  , pattern VK_LOD_CLAMP_NONE
+  , pattern VK_REMAINING_MIP_LEVELS
+  , pattern VK_REMAINING_ARRAY_LAYERS
+  , pattern VK_WHOLE_SIZE
+  , pattern VK_ATTACHMENT_UNUSED
+  , pattern VK_QUEUE_FAMILY_IGNORED
+  , pattern VK_SUBPASS_EXTERNAL
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  , Word64
+  )
+import Foreign.C.Types
+  ( CFloat
+  )
+import Foreign.Ptr
+  ( Ptr
+  , nullPtr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+
+
+
+-- | 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
+pattern VK_NULL_HANDLE <- ((== nullPtr) -> True)
+  where VK_NULL_HANDLE = nullPtr
+-- ** VkPipelineCacheHeaderVersion
+
+-- | VkPipelineCacheHeaderVersion - Encode pipeline cache version
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkCreatePipelineCache',
+-- 'Graphics.Vulkan.Core10.PipelineCache.vkGetPipelineCacheData'
+newtype VkPipelineCacheHeaderVersion = VkPipelineCacheHeaderVersion Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkPipelineCacheHeaderVersion where
+  showsPrec _ VK_PIPELINE_CACHE_HEADER_VERSION_ONE = showString "VK_PIPELINE_CACHE_HEADER_VERSION_ONE"
+  showsPrec p (VkPipelineCacheHeaderVersion x) = showParen (p >= 11) (showString "VkPipelineCacheHeaderVersion " . showsPrec 11 x)
+
+instance Read VkPipelineCacheHeaderVersion where
+  readPrec = parens ( choose [ ("VK_PIPELINE_CACHE_HEADER_VERSION_ONE", pure VK_PIPELINE_CACHE_HEADER_VERSION_ONE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineCacheHeaderVersion")
+                        v <- step readPrec
+                        pure (VkPipelineCacheHeaderVersion v)
+                        )
+                    )
+
+-- | @VK_PIPELINE_CACHE_HEADER_VERSION_ONE@ specifies version one of the
+-- pipeline cache.
+pattern VK_PIPELINE_CACHE_HEADER_VERSION_ONE :: VkPipelineCacheHeaderVersion
+pattern VK_PIPELINE_CACHE_HEADER_VERSION_ONE = VkPipelineCacheHeaderVersion 1
+-- No documentation found for Nested "CFloat" "VK_LOD_CLAMP_NONE"
+pattern VK_LOD_CLAMP_NONE :: CFloat
+pattern VK_LOD_CLAMP_NONE = 1000.0
+-- No documentation found for Nested "Word32" "VK_REMAINING_MIP_LEVELS"
+pattern VK_REMAINING_MIP_LEVELS :: Word32
+pattern VK_REMAINING_MIP_LEVELS = 0xffffffff
+-- No documentation found for Nested "Word32" "VK_REMAINING_ARRAY_LAYERS"
+pattern VK_REMAINING_ARRAY_LAYERS :: Word32
+pattern VK_REMAINING_ARRAY_LAYERS = 0xffffffff
+-- No documentation found for Nested "Word64" "VK_WHOLE_SIZE"
+pattern VK_WHOLE_SIZE :: Word64
+pattern VK_WHOLE_SIZE = 0xffffffffffffffff
+-- No documentation found for Nested "Word32" "VK_ATTACHMENT_UNUSED"
+pattern VK_ATTACHMENT_UNUSED :: Word32
+pattern VK_ATTACHMENT_UNUSED = 0xffffffff
+-- No documentation found for Nested "Word32" "VK_QUEUE_FAMILY_IGNORED"
+pattern VK_QUEUE_FAMILY_IGNORED :: Word32
+pattern VK_QUEUE_FAMILY_IGNORED = 0xffffffff
+-- No documentation found for Nested "Word32" "VK_SUBPASS_EXTERNAL"
+pattern VK_SUBPASS_EXTERNAL :: Word32
+pattern VK_SUBPASS_EXTERNAL = 0xffffffff
diff --git a/src/Graphics/Vulkan/Core10/Core.hs b/src/Graphics/Vulkan/Core10/Core.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Core.hs
@@ -0,0 +1,3581 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+
+module Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , pattern VK_FALSE
+  , pattern VK_TRUE
+  , VkFormat(..)
+  , pattern VK_FORMAT_UNDEFINED
+  , pattern VK_FORMAT_R4G4_UNORM_PACK8
+  , pattern VK_FORMAT_R4G4B4A4_UNORM_PACK16
+  , pattern VK_FORMAT_B4G4R4A4_UNORM_PACK16
+  , pattern VK_FORMAT_R5G6B5_UNORM_PACK16
+  , pattern VK_FORMAT_B5G6R5_UNORM_PACK16
+  , pattern VK_FORMAT_R5G5B5A1_UNORM_PACK16
+  , pattern VK_FORMAT_B5G5R5A1_UNORM_PACK16
+  , pattern VK_FORMAT_A1R5G5B5_UNORM_PACK16
+  , pattern VK_FORMAT_R8_UNORM
+  , pattern VK_FORMAT_R8_SNORM
+  , pattern VK_FORMAT_R8_USCALED
+  , pattern VK_FORMAT_R8_SSCALED
+  , pattern VK_FORMAT_R8_UINT
+  , pattern VK_FORMAT_R8_SINT
+  , pattern VK_FORMAT_R8_SRGB
+  , pattern VK_FORMAT_R8G8_UNORM
+  , pattern VK_FORMAT_R8G8_SNORM
+  , pattern VK_FORMAT_R8G8_USCALED
+  , pattern VK_FORMAT_R8G8_SSCALED
+  , pattern VK_FORMAT_R8G8_UINT
+  , pattern VK_FORMAT_R8G8_SINT
+  , pattern VK_FORMAT_R8G8_SRGB
+  , pattern VK_FORMAT_R8G8B8_UNORM
+  , pattern VK_FORMAT_R8G8B8_SNORM
+  , pattern VK_FORMAT_R8G8B8_USCALED
+  , pattern VK_FORMAT_R8G8B8_SSCALED
+  , pattern VK_FORMAT_R8G8B8_UINT
+  , pattern VK_FORMAT_R8G8B8_SINT
+  , pattern VK_FORMAT_R8G8B8_SRGB
+  , pattern VK_FORMAT_B8G8R8_UNORM
+  , pattern VK_FORMAT_B8G8R8_SNORM
+  , pattern VK_FORMAT_B8G8R8_USCALED
+  , pattern VK_FORMAT_B8G8R8_SSCALED
+  , pattern VK_FORMAT_B8G8R8_UINT
+  , pattern VK_FORMAT_B8G8R8_SINT
+  , pattern VK_FORMAT_B8G8R8_SRGB
+  , pattern VK_FORMAT_R8G8B8A8_UNORM
+  , pattern VK_FORMAT_R8G8B8A8_SNORM
+  , pattern VK_FORMAT_R8G8B8A8_USCALED
+  , pattern VK_FORMAT_R8G8B8A8_SSCALED
+  , pattern VK_FORMAT_R8G8B8A8_UINT
+  , pattern VK_FORMAT_R8G8B8A8_SINT
+  , pattern VK_FORMAT_R8G8B8A8_SRGB
+  , pattern VK_FORMAT_B8G8R8A8_UNORM
+  , pattern VK_FORMAT_B8G8R8A8_SNORM
+  , pattern VK_FORMAT_B8G8R8A8_USCALED
+  , pattern VK_FORMAT_B8G8R8A8_SSCALED
+  , pattern VK_FORMAT_B8G8R8A8_UINT
+  , pattern VK_FORMAT_B8G8R8A8_SINT
+  , pattern VK_FORMAT_B8G8R8A8_SRGB
+  , pattern VK_FORMAT_A8B8G8R8_UNORM_PACK32
+  , pattern VK_FORMAT_A8B8G8R8_SNORM_PACK32
+  , pattern VK_FORMAT_A8B8G8R8_USCALED_PACK32
+  , pattern VK_FORMAT_A8B8G8R8_SSCALED_PACK32
+  , pattern VK_FORMAT_A8B8G8R8_UINT_PACK32
+  , pattern VK_FORMAT_A8B8G8R8_SINT_PACK32
+  , pattern VK_FORMAT_A8B8G8R8_SRGB_PACK32
+  , pattern VK_FORMAT_A2R10G10B10_UNORM_PACK32
+  , pattern VK_FORMAT_A2R10G10B10_SNORM_PACK32
+  , pattern VK_FORMAT_A2R10G10B10_USCALED_PACK32
+  , pattern VK_FORMAT_A2R10G10B10_SSCALED_PACK32
+  , pattern VK_FORMAT_A2R10G10B10_UINT_PACK32
+  , pattern VK_FORMAT_A2R10G10B10_SINT_PACK32
+  , pattern VK_FORMAT_A2B10G10R10_UNORM_PACK32
+  , pattern VK_FORMAT_A2B10G10R10_SNORM_PACK32
+  , pattern VK_FORMAT_A2B10G10R10_USCALED_PACK32
+  , pattern VK_FORMAT_A2B10G10R10_SSCALED_PACK32
+  , pattern VK_FORMAT_A2B10G10R10_UINT_PACK32
+  , pattern VK_FORMAT_A2B10G10R10_SINT_PACK32
+  , pattern VK_FORMAT_R16_UNORM
+  , pattern VK_FORMAT_R16_SNORM
+  , pattern VK_FORMAT_R16_USCALED
+  , pattern VK_FORMAT_R16_SSCALED
+  , pattern VK_FORMAT_R16_UINT
+  , pattern VK_FORMAT_R16_SINT
+  , pattern VK_FORMAT_R16_SFLOAT
+  , pattern VK_FORMAT_R16G16_UNORM
+  , pattern VK_FORMAT_R16G16_SNORM
+  , pattern VK_FORMAT_R16G16_USCALED
+  , pattern VK_FORMAT_R16G16_SSCALED
+  , pattern VK_FORMAT_R16G16_UINT
+  , pattern VK_FORMAT_R16G16_SINT
+  , pattern VK_FORMAT_R16G16_SFLOAT
+  , pattern VK_FORMAT_R16G16B16_UNORM
+  , pattern VK_FORMAT_R16G16B16_SNORM
+  , pattern VK_FORMAT_R16G16B16_USCALED
+  , pattern VK_FORMAT_R16G16B16_SSCALED
+  , pattern VK_FORMAT_R16G16B16_UINT
+  , pattern VK_FORMAT_R16G16B16_SINT
+  , pattern VK_FORMAT_R16G16B16_SFLOAT
+  , pattern VK_FORMAT_R16G16B16A16_UNORM
+  , pattern VK_FORMAT_R16G16B16A16_SNORM
+  , pattern VK_FORMAT_R16G16B16A16_USCALED
+  , pattern VK_FORMAT_R16G16B16A16_SSCALED
+  , pattern VK_FORMAT_R16G16B16A16_UINT
+  , pattern VK_FORMAT_R16G16B16A16_SINT
+  , pattern VK_FORMAT_R16G16B16A16_SFLOAT
+  , pattern VK_FORMAT_R32_UINT
+  , pattern VK_FORMAT_R32_SINT
+  , pattern VK_FORMAT_R32_SFLOAT
+  , pattern VK_FORMAT_R32G32_UINT
+  , pattern VK_FORMAT_R32G32_SINT
+  , pattern VK_FORMAT_R32G32_SFLOAT
+  , pattern VK_FORMAT_R32G32B32_UINT
+  , pattern VK_FORMAT_R32G32B32_SINT
+  , pattern VK_FORMAT_R32G32B32_SFLOAT
+  , pattern VK_FORMAT_R32G32B32A32_UINT
+  , pattern VK_FORMAT_R32G32B32A32_SINT
+  , pattern VK_FORMAT_R32G32B32A32_SFLOAT
+  , pattern VK_FORMAT_R64_UINT
+  , pattern VK_FORMAT_R64_SINT
+  , pattern VK_FORMAT_R64_SFLOAT
+  , pattern VK_FORMAT_R64G64_UINT
+  , pattern VK_FORMAT_R64G64_SINT
+  , pattern VK_FORMAT_R64G64_SFLOAT
+  , pattern VK_FORMAT_R64G64B64_UINT
+  , pattern VK_FORMAT_R64G64B64_SINT
+  , pattern VK_FORMAT_R64G64B64_SFLOAT
+  , pattern VK_FORMAT_R64G64B64A64_UINT
+  , pattern VK_FORMAT_R64G64B64A64_SINT
+  , pattern VK_FORMAT_R64G64B64A64_SFLOAT
+  , pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32
+  , pattern VK_FORMAT_E5B9G9R9_UFLOAT_PACK32
+  , pattern VK_FORMAT_D16_UNORM
+  , pattern VK_FORMAT_X8_D24_UNORM_PACK32
+  , pattern VK_FORMAT_D32_SFLOAT
+  , pattern VK_FORMAT_S8_UINT
+  , pattern VK_FORMAT_D16_UNORM_S8_UINT
+  , pattern VK_FORMAT_D24_UNORM_S8_UINT
+  , pattern VK_FORMAT_D32_SFLOAT_S8_UINT
+  , pattern VK_FORMAT_BC1_RGB_UNORM_BLOCK
+  , pattern VK_FORMAT_BC1_RGB_SRGB_BLOCK
+  , pattern VK_FORMAT_BC1_RGBA_UNORM_BLOCK
+  , pattern VK_FORMAT_BC1_RGBA_SRGB_BLOCK
+  , pattern VK_FORMAT_BC2_UNORM_BLOCK
+  , pattern VK_FORMAT_BC2_SRGB_BLOCK
+  , pattern VK_FORMAT_BC3_UNORM_BLOCK
+  , pattern VK_FORMAT_BC3_SRGB_BLOCK
+  , pattern VK_FORMAT_BC4_UNORM_BLOCK
+  , pattern VK_FORMAT_BC4_SNORM_BLOCK
+  , pattern VK_FORMAT_BC5_UNORM_BLOCK
+  , pattern VK_FORMAT_BC5_SNORM_BLOCK
+  , pattern VK_FORMAT_BC6H_UFLOAT_BLOCK
+  , pattern VK_FORMAT_BC6H_SFLOAT_BLOCK
+  , pattern VK_FORMAT_BC7_UNORM_BLOCK
+  , pattern VK_FORMAT_BC7_SRGB_BLOCK
+  , pattern VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK
+  , pattern VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK
+  , pattern VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK
+  , pattern VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK
+  , pattern VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK
+  , pattern VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK
+  , pattern VK_FORMAT_EAC_R11_UNORM_BLOCK
+  , pattern VK_FORMAT_EAC_R11_SNORM_BLOCK
+  , pattern VK_FORMAT_EAC_R11G11_UNORM_BLOCK
+  , pattern VK_FORMAT_EAC_R11G11_SNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_4x4_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_4x4_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_5x4_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_5x4_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_5x5_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_5x5_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_6x5_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_6x5_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_6x6_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_6x6_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_8x5_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_8x5_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_8x6_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_8x6_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_8x8_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_8x8_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_10x5_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_10x5_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_10x6_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_10x6_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_10x8_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_10x8_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_10x10_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_10x10_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_12x10_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_12x10_SRGB_BLOCK
+  , pattern VK_FORMAT_ASTC_12x12_UNORM_BLOCK
+  , pattern VK_FORMAT_ASTC_12x12_SRGB_BLOCK
+  , VkResult(..)
+  , pattern VK_SUCCESS
+  , pattern VK_NOT_READY
+  , pattern VK_TIMEOUT
+  , pattern VK_EVENT_SET
+  , pattern VK_EVENT_RESET
+  , pattern VK_INCOMPLETE
+  , pattern VK_ERROR_OUT_OF_HOST_MEMORY
+  , pattern VK_ERROR_OUT_OF_DEVICE_MEMORY
+  , pattern VK_ERROR_INITIALIZATION_FAILED
+  , pattern VK_ERROR_DEVICE_LOST
+  , pattern VK_ERROR_MEMORY_MAP_FAILED
+  , pattern VK_ERROR_LAYER_NOT_PRESENT
+  , pattern VK_ERROR_EXTENSION_NOT_PRESENT
+  , pattern VK_ERROR_FEATURE_NOT_PRESENT
+  , pattern VK_ERROR_INCOMPATIBLE_DRIVER
+  , pattern VK_ERROR_TOO_MANY_OBJECTS
+  , pattern VK_ERROR_FORMAT_NOT_SUPPORTED
+  , pattern VK_ERROR_FRAGMENTED_POOL
+  , VkStructureType(..)
+  , pattern VK_STRUCTURE_TYPE_APPLICATION_INFO
+  , pattern VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_SUBMIT_INFO
+  , pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO
+  , pattern VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE
+  , pattern VK_STRUCTURE_TYPE_BIND_SPARSE_INFO
+  , pattern VK_STRUCTURE_TYPE_FENCE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_EVENT_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO
+  , pattern VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET
+  , pattern VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET
+  , pattern VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO
+  , pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO
+  , pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO
+  , pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER
+  , pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER
+  , pattern VK_STRUCTURE_TYPE_MEMORY_BARRIER
+  , pattern VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO
+  , VkObjectType(..)
+  , pattern VK_OBJECT_TYPE_UNKNOWN
+  , pattern VK_OBJECT_TYPE_INSTANCE
+  , pattern VK_OBJECT_TYPE_PHYSICAL_DEVICE
+  , pattern VK_OBJECT_TYPE_DEVICE
+  , pattern VK_OBJECT_TYPE_QUEUE
+  , pattern VK_OBJECT_TYPE_SEMAPHORE
+  , pattern VK_OBJECT_TYPE_COMMAND_BUFFER
+  , pattern VK_OBJECT_TYPE_FENCE
+  , pattern VK_OBJECT_TYPE_DEVICE_MEMORY
+  , pattern VK_OBJECT_TYPE_BUFFER
+  , pattern VK_OBJECT_TYPE_IMAGE
+  , pattern VK_OBJECT_TYPE_EVENT
+  , pattern VK_OBJECT_TYPE_QUERY_POOL
+  , pattern VK_OBJECT_TYPE_BUFFER_VIEW
+  , pattern VK_OBJECT_TYPE_IMAGE_VIEW
+  , pattern VK_OBJECT_TYPE_SHADER_MODULE
+  , pattern VK_OBJECT_TYPE_PIPELINE_CACHE
+  , pattern VK_OBJECT_TYPE_PIPELINE_LAYOUT
+  , pattern VK_OBJECT_TYPE_RENDER_PASS
+  , pattern VK_OBJECT_TYPE_PIPELINE
+  , pattern VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT
+  , pattern VK_OBJECT_TYPE_SAMPLER
+  , pattern VK_OBJECT_TYPE_DESCRIPTOR_POOL
+  , pattern VK_OBJECT_TYPE_DESCRIPTOR_SET
+  , pattern VK_OBJECT_TYPE_FRAMEBUFFER
+  , pattern VK_OBJECT_TYPE_COMMAND_POOL
+  , VkFlags
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Storable
+  ( Storable(..)
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+
+
+
+-- ** VkBool32
+
+-- | VkBool32 - Vulkan boolean type
+--
+-- = Description
+-- #_description#
+--
+-- @VK_TRUE@ represents a boolean __True__ (integer 1) value, and
+-- @VK_FALSE@ a boolean __False__ (integer 0) value.
+--
+-- All values returned from a Vulkan implementation in a @VkBool32@ will be
+-- either @VK_TRUE@ or @VK_FALSE@.
+--
+-- Applications /must/ not pass any other values than @VK_TRUE@ or
+-- @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',
+-- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationImageCreateInfoNV',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.VkDescriptorSetLayoutSupport',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkDeviceGeneratedCommandsFeaturesNVX',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.VkDisplayPresentInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayPropertiesKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedRequirements',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage.VkPhysicalDevice16BitStorageFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.VkPhysicalDeviceConservativeRasterizationPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkPhysicalDeviceDescriptorIndexingFeaturesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkPhysicalDeviceDescriptorIndexingPropertiesEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceFeatures',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkPhysicalDeviceGroupProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceIDProperties',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes.VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkPhysicalDeviceProtectedMemoryFeatures',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkPhysicalDeviceProtectedMemoryProperties',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPhysicalDeviceSampleLocationsPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkPhysicalDeviceSamplerYcbcrConversionFeatures',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_shader_draw_parameters.VkPhysicalDeviceShaderDrawParameterFeatures',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceSparseProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup.VkPhysicalDeviceSubgroupProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers.VkPhysicalDeviceVariablePointerFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPipelineColorBlendAdvancedStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineColorBlendAttachmentState',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineColorBlendStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.VkPipelineCoverageModulationStateCreateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.VkPipelineCoverageToColorStateCreateInfoNV',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineDepthStencilStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineInputAssemblyStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineRasterizationStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkProtectedSubmitInfo',
+-- 'Graphics.Vulkan.Core10.Sampler.VkSamplerCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.VkTextureLODGatherFormatPropertiesAMD',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceSupportKHR',
+-- 'Graphics.Vulkan.Core10.Fence.vkWaitForFences'
+newtype VkBool32 = VkBool32 Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkBool32 where
+  showsPrec _ VK_FALSE = showString "VK_FALSE"
+  showsPrec _ VK_TRUE = showString "VK_TRUE"
+  showsPrec p (VkBool32 x) = showParen (p >= 11) (showString "VkBool32 " . showsPrec 11 x)
+
+instance Read VkBool32 where
+  readPrec = parens ( choose [ ("VK_FALSE", pure VK_FALSE)
+                             , ("VK_TRUE",  pure VK_TRUE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBool32")
+                        v <- step readPrec
+                        pure (VkBool32 v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkBool32" "VK_FALSE"
+pattern VK_FALSE :: VkBool32
+pattern VK_FALSE = VkBool32 0
+
+-- No documentation found for Nested "VkBool32" "VK_TRUE"
+pattern VK_TRUE :: VkBool32
+pattern VK_TRUE = VkBool32 1
+-- ** VkFormat
+
+-- | VkFormat - Available image formats
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription',
+-- 'Graphics.Vulkan.Core10.BufferView.VkBufferViewCreateInfo',
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_image_format_list.VkImageFormatListCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageViewCreateInfo',
+-- '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.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceFormatKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkVertexInputAttributeDescription',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.vkGetPhysicalDeviceExternalImageFormatPropertiesNV',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.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.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetPhysicalDeviceSparseImageFormatProperties'
+newtype VkFormat = VkFormat Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkFormat where
+  showsPrec _ VK_FORMAT_UNDEFINED = showString "VK_FORMAT_UNDEFINED"
+  showsPrec _ VK_FORMAT_R4G4_UNORM_PACK8 = showString "VK_FORMAT_R4G4_UNORM_PACK8"
+  showsPrec _ VK_FORMAT_R4G4B4A4_UNORM_PACK16 = showString "VK_FORMAT_R4G4B4A4_UNORM_PACK16"
+  showsPrec _ VK_FORMAT_B4G4R4A4_UNORM_PACK16 = showString "VK_FORMAT_B4G4R4A4_UNORM_PACK16"
+  showsPrec _ VK_FORMAT_R5G6B5_UNORM_PACK16 = showString "VK_FORMAT_R5G6B5_UNORM_PACK16"
+  showsPrec _ VK_FORMAT_B5G6R5_UNORM_PACK16 = showString "VK_FORMAT_B5G6R5_UNORM_PACK16"
+  showsPrec _ VK_FORMAT_R5G5B5A1_UNORM_PACK16 = showString "VK_FORMAT_R5G5B5A1_UNORM_PACK16"
+  showsPrec _ VK_FORMAT_B5G5R5A1_UNORM_PACK16 = showString "VK_FORMAT_B5G5R5A1_UNORM_PACK16"
+  showsPrec _ VK_FORMAT_A1R5G5B5_UNORM_PACK16 = showString "VK_FORMAT_A1R5G5B5_UNORM_PACK16"
+  showsPrec _ VK_FORMAT_R8_UNORM = showString "VK_FORMAT_R8_UNORM"
+  showsPrec _ VK_FORMAT_R8_SNORM = showString "VK_FORMAT_R8_SNORM"
+  showsPrec _ VK_FORMAT_R8_USCALED = showString "VK_FORMAT_R8_USCALED"
+  showsPrec _ VK_FORMAT_R8_SSCALED = showString "VK_FORMAT_R8_SSCALED"
+  showsPrec _ VK_FORMAT_R8_UINT = showString "VK_FORMAT_R8_UINT"
+  showsPrec _ VK_FORMAT_R8_SINT = showString "VK_FORMAT_R8_SINT"
+  showsPrec _ VK_FORMAT_R8_SRGB = showString "VK_FORMAT_R8_SRGB"
+  showsPrec _ VK_FORMAT_R8G8_UNORM = showString "VK_FORMAT_R8G8_UNORM"
+  showsPrec _ VK_FORMAT_R8G8_SNORM = showString "VK_FORMAT_R8G8_SNORM"
+  showsPrec _ VK_FORMAT_R8G8_USCALED = showString "VK_FORMAT_R8G8_USCALED"
+  showsPrec _ VK_FORMAT_R8G8_SSCALED = showString "VK_FORMAT_R8G8_SSCALED"
+  showsPrec _ VK_FORMAT_R8G8_UINT = showString "VK_FORMAT_R8G8_UINT"
+  showsPrec _ VK_FORMAT_R8G8_SINT = showString "VK_FORMAT_R8G8_SINT"
+  showsPrec _ VK_FORMAT_R8G8_SRGB = showString "VK_FORMAT_R8G8_SRGB"
+  showsPrec _ VK_FORMAT_R8G8B8_UNORM = showString "VK_FORMAT_R8G8B8_UNORM"
+  showsPrec _ VK_FORMAT_R8G8B8_SNORM = showString "VK_FORMAT_R8G8B8_SNORM"
+  showsPrec _ VK_FORMAT_R8G8B8_USCALED = showString "VK_FORMAT_R8G8B8_USCALED"
+  showsPrec _ VK_FORMAT_R8G8B8_SSCALED = showString "VK_FORMAT_R8G8B8_SSCALED"
+  showsPrec _ VK_FORMAT_R8G8B8_UINT = showString "VK_FORMAT_R8G8B8_UINT"
+  showsPrec _ VK_FORMAT_R8G8B8_SINT = showString "VK_FORMAT_R8G8B8_SINT"
+  showsPrec _ VK_FORMAT_R8G8B8_SRGB = showString "VK_FORMAT_R8G8B8_SRGB"
+  showsPrec _ VK_FORMAT_B8G8R8_UNORM = showString "VK_FORMAT_B8G8R8_UNORM"
+  showsPrec _ VK_FORMAT_B8G8R8_SNORM = showString "VK_FORMAT_B8G8R8_SNORM"
+  showsPrec _ VK_FORMAT_B8G8R8_USCALED = showString "VK_FORMAT_B8G8R8_USCALED"
+  showsPrec _ VK_FORMAT_B8G8R8_SSCALED = showString "VK_FORMAT_B8G8R8_SSCALED"
+  showsPrec _ VK_FORMAT_B8G8R8_UINT = showString "VK_FORMAT_B8G8R8_UINT"
+  showsPrec _ VK_FORMAT_B8G8R8_SINT = showString "VK_FORMAT_B8G8R8_SINT"
+  showsPrec _ VK_FORMAT_B8G8R8_SRGB = showString "VK_FORMAT_B8G8R8_SRGB"
+  showsPrec _ VK_FORMAT_R8G8B8A8_UNORM = showString "VK_FORMAT_R8G8B8A8_UNORM"
+  showsPrec _ VK_FORMAT_R8G8B8A8_SNORM = showString "VK_FORMAT_R8G8B8A8_SNORM"
+  showsPrec _ VK_FORMAT_R8G8B8A8_USCALED = showString "VK_FORMAT_R8G8B8A8_USCALED"
+  showsPrec _ VK_FORMAT_R8G8B8A8_SSCALED = showString "VK_FORMAT_R8G8B8A8_SSCALED"
+  showsPrec _ VK_FORMAT_R8G8B8A8_UINT = showString "VK_FORMAT_R8G8B8A8_UINT"
+  showsPrec _ VK_FORMAT_R8G8B8A8_SINT = showString "VK_FORMAT_R8G8B8A8_SINT"
+  showsPrec _ VK_FORMAT_R8G8B8A8_SRGB = showString "VK_FORMAT_R8G8B8A8_SRGB"
+  showsPrec _ VK_FORMAT_B8G8R8A8_UNORM = showString "VK_FORMAT_B8G8R8A8_UNORM"
+  showsPrec _ VK_FORMAT_B8G8R8A8_SNORM = showString "VK_FORMAT_B8G8R8A8_SNORM"
+  showsPrec _ VK_FORMAT_B8G8R8A8_USCALED = showString "VK_FORMAT_B8G8R8A8_USCALED"
+  showsPrec _ VK_FORMAT_B8G8R8A8_SSCALED = showString "VK_FORMAT_B8G8R8A8_SSCALED"
+  showsPrec _ VK_FORMAT_B8G8R8A8_UINT = showString "VK_FORMAT_B8G8R8A8_UINT"
+  showsPrec _ VK_FORMAT_B8G8R8A8_SINT = showString "VK_FORMAT_B8G8R8A8_SINT"
+  showsPrec _ VK_FORMAT_B8G8R8A8_SRGB = showString "VK_FORMAT_B8G8R8A8_SRGB"
+  showsPrec _ VK_FORMAT_A8B8G8R8_UNORM_PACK32 = showString "VK_FORMAT_A8B8G8R8_UNORM_PACK32"
+  showsPrec _ VK_FORMAT_A8B8G8R8_SNORM_PACK32 = showString "VK_FORMAT_A8B8G8R8_SNORM_PACK32"
+  showsPrec _ VK_FORMAT_A8B8G8R8_USCALED_PACK32 = showString "VK_FORMAT_A8B8G8R8_USCALED_PACK32"
+  showsPrec _ VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = showString "VK_FORMAT_A8B8G8R8_SSCALED_PACK32"
+  showsPrec _ VK_FORMAT_A8B8G8R8_UINT_PACK32 = showString "VK_FORMAT_A8B8G8R8_UINT_PACK32"
+  showsPrec _ VK_FORMAT_A8B8G8R8_SINT_PACK32 = showString "VK_FORMAT_A8B8G8R8_SINT_PACK32"
+  showsPrec _ VK_FORMAT_A8B8G8R8_SRGB_PACK32 = showString "VK_FORMAT_A8B8G8R8_SRGB_PACK32"
+  showsPrec _ VK_FORMAT_A2R10G10B10_UNORM_PACK32 = showString "VK_FORMAT_A2R10G10B10_UNORM_PACK32"
+  showsPrec _ VK_FORMAT_A2R10G10B10_SNORM_PACK32 = showString "VK_FORMAT_A2R10G10B10_SNORM_PACK32"
+  showsPrec _ VK_FORMAT_A2R10G10B10_USCALED_PACK32 = showString "VK_FORMAT_A2R10G10B10_USCALED_PACK32"
+  showsPrec _ VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = showString "VK_FORMAT_A2R10G10B10_SSCALED_PACK32"
+  showsPrec _ VK_FORMAT_A2R10G10B10_UINT_PACK32 = showString "VK_FORMAT_A2R10G10B10_UINT_PACK32"
+  showsPrec _ VK_FORMAT_A2R10G10B10_SINT_PACK32 = showString "VK_FORMAT_A2R10G10B10_SINT_PACK32"
+  showsPrec _ VK_FORMAT_A2B10G10R10_UNORM_PACK32 = showString "VK_FORMAT_A2B10G10R10_UNORM_PACK32"
+  showsPrec _ VK_FORMAT_A2B10G10R10_SNORM_PACK32 = showString "VK_FORMAT_A2B10G10R10_SNORM_PACK32"
+  showsPrec _ VK_FORMAT_A2B10G10R10_USCALED_PACK32 = showString "VK_FORMAT_A2B10G10R10_USCALED_PACK32"
+  showsPrec _ VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = showString "VK_FORMAT_A2B10G10R10_SSCALED_PACK32"
+  showsPrec _ VK_FORMAT_A2B10G10R10_UINT_PACK32 = showString "VK_FORMAT_A2B10G10R10_UINT_PACK32"
+  showsPrec _ VK_FORMAT_A2B10G10R10_SINT_PACK32 = showString "VK_FORMAT_A2B10G10R10_SINT_PACK32"
+  showsPrec _ VK_FORMAT_R16_UNORM = showString "VK_FORMAT_R16_UNORM"
+  showsPrec _ VK_FORMAT_R16_SNORM = showString "VK_FORMAT_R16_SNORM"
+  showsPrec _ VK_FORMAT_R16_USCALED = showString "VK_FORMAT_R16_USCALED"
+  showsPrec _ VK_FORMAT_R16_SSCALED = showString "VK_FORMAT_R16_SSCALED"
+  showsPrec _ VK_FORMAT_R16_UINT = showString "VK_FORMAT_R16_UINT"
+  showsPrec _ VK_FORMAT_R16_SINT = showString "VK_FORMAT_R16_SINT"
+  showsPrec _ VK_FORMAT_R16_SFLOAT = showString "VK_FORMAT_R16_SFLOAT"
+  showsPrec _ VK_FORMAT_R16G16_UNORM = showString "VK_FORMAT_R16G16_UNORM"
+  showsPrec _ VK_FORMAT_R16G16_SNORM = showString "VK_FORMAT_R16G16_SNORM"
+  showsPrec _ VK_FORMAT_R16G16_USCALED = showString "VK_FORMAT_R16G16_USCALED"
+  showsPrec _ VK_FORMAT_R16G16_SSCALED = showString "VK_FORMAT_R16G16_SSCALED"
+  showsPrec _ VK_FORMAT_R16G16_UINT = showString "VK_FORMAT_R16G16_UINT"
+  showsPrec _ VK_FORMAT_R16G16_SINT = showString "VK_FORMAT_R16G16_SINT"
+  showsPrec _ VK_FORMAT_R16G16_SFLOAT = showString "VK_FORMAT_R16G16_SFLOAT"
+  showsPrec _ VK_FORMAT_R16G16B16_UNORM = showString "VK_FORMAT_R16G16B16_UNORM"
+  showsPrec _ VK_FORMAT_R16G16B16_SNORM = showString "VK_FORMAT_R16G16B16_SNORM"
+  showsPrec _ VK_FORMAT_R16G16B16_USCALED = showString "VK_FORMAT_R16G16B16_USCALED"
+  showsPrec _ VK_FORMAT_R16G16B16_SSCALED = showString "VK_FORMAT_R16G16B16_SSCALED"
+  showsPrec _ VK_FORMAT_R16G16B16_UINT = showString "VK_FORMAT_R16G16B16_UINT"
+  showsPrec _ VK_FORMAT_R16G16B16_SINT = showString "VK_FORMAT_R16G16B16_SINT"
+  showsPrec _ VK_FORMAT_R16G16B16_SFLOAT = showString "VK_FORMAT_R16G16B16_SFLOAT"
+  showsPrec _ VK_FORMAT_R16G16B16A16_UNORM = showString "VK_FORMAT_R16G16B16A16_UNORM"
+  showsPrec _ VK_FORMAT_R16G16B16A16_SNORM = showString "VK_FORMAT_R16G16B16A16_SNORM"
+  showsPrec _ VK_FORMAT_R16G16B16A16_USCALED = showString "VK_FORMAT_R16G16B16A16_USCALED"
+  showsPrec _ VK_FORMAT_R16G16B16A16_SSCALED = showString "VK_FORMAT_R16G16B16A16_SSCALED"
+  showsPrec _ VK_FORMAT_R16G16B16A16_UINT = showString "VK_FORMAT_R16G16B16A16_UINT"
+  showsPrec _ VK_FORMAT_R16G16B16A16_SINT = showString "VK_FORMAT_R16G16B16A16_SINT"
+  showsPrec _ VK_FORMAT_R16G16B16A16_SFLOAT = showString "VK_FORMAT_R16G16B16A16_SFLOAT"
+  showsPrec _ VK_FORMAT_R32_UINT = showString "VK_FORMAT_R32_UINT"
+  showsPrec _ VK_FORMAT_R32_SINT = showString "VK_FORMAT_R32_SINT"
+  showsPrec _ VK_FORMAT_R32_SFLOAT = showString "VK_FORMAT_R32_SFLOAT"
+  showsPrec _ VK_FORMAT_R32G32_UINT = showString "VK_FORMAT_R32G32_UINT"
+  showsPrec _ VK_FORMAT_R32G32_SINT = showString "VK_FORMAT_R32G32_SINT"
+  showsPrec _ VK_FORMAT_R32G32_SFLOAT = showString "VK_FORMAT_R32G32_SFLOAT"
+  showsPrec _ VK_FORMAT_R32G32B32_UINT = showString "VK_FORMAT_R32G32B32_UINT"
+  showsPrec _ VK_FORMAT_R32G32B32_SINT = showString "VK_FORMAT_R32G32B32_SINT"
+  showsPrec _ VK_FORMAT_R32G32B32_SFLOAT = showString "VK_FORMAT_R32G32B32_SFLOAT"
+  showsPrec _ VK_FORMAT_R32G32B32A32_UINT = showString "VK_FORMAT_R32G32B32A32_UINT"
+  showsPrec _ VK_FORMAT_R32G32B32A32_SINT = showString "VK_FORMAT_R32G32B32A32_SINT"
+  showsPrec _ VK_FORMAT_R32G32B32A32_SFLOAT = showString "VK_FORMAT_R32G32B32A32_SFLOAT"
+  showsPrec _ VK_FORMAT_R64_UINT = showString "VK_FORMAT_R64_UINT"
+  showsPrec _ VK_FORMAT_R64_SINT = showString "VK_FORMAT_R64_SINT"
+  showsPrec _ VK_FORMAT_R64_SFLOAT = showString "VK_FORMAT_R64_SFLOAT"
+  showsPrec _ VK_FORMAT_R64G64_UINT = showString "VK_FORMAT_R64G64_UINT"
+  showsPrec _ VK_FORMAT_R64G64_SINT = showString "VK_FORMAT_R64G64_SINT"
+  showsPrec _ VK_FORMAT_R64G64_SFLOAT = showString "VK_FORMAT_R64G64_SFLOAT"
+  showsPrec _ VK_FORMAT_R64G64B64_UINT = showString "VK_FORMAT_R64G64B64_UINT"
+  showsPrec _ VK_FORMAT_R64G64B64_SINT = showString "VK_FORMAT_R64G64B64_SINT"
+  showsPrec _ VK_FORMAT_R64G64B64_SFLOAT = showString "VK_FORMAT_R64G64B64_SFLOAT"
+  showsPrec _ VK_FORMAT_R64G64B64A64_UINT = showString "VK_FORMAT_R64G64B64A64_UINT"
+  showsPrec _ VK_FORMAT_R64G64B64A64_SINT = showString "VK_FORMAT_R64G64B64A64_SINT"
+  showsPrec _ VK_FORMAT_R64G64B64A64_SFLOAT = showString "VK_FORMAT_R64G64B64A64_SFLOAT"
+  showsPrec _ VK_FORMAT_B10G11R11_UFLOAT_PACK32 = showString "VK_FORMAT_B10G11R11_UFLOAT_PACK32"
+  showsPrec _ VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = showString "VK_FORMAT_E5B9G9R9_UFLOAT_PACK32"
+  showsPrec _ VK_FORMAT_D16_UNORM = showString "VK_FORMAT_D16_UNORM"
+  showsPrec _ VK_FORMAT_X8_D24_UNORM_PACK32 = showString "VK_FORMAT_X8_D24_UNORM_PACK32"
+  showsPrec _ VK_FORMAT_D32_SFLOAT = showString "VK_FORMAT_D32_SFLOAT"
+  showsPrec _ VK_FORMAT_S8_UINT = showString "VK_FORMAT_S8_UINT"
+  showsPrec _ VK_FORMAT_D16_UNORM_S8_UINT = showString "VK_FORMAT_D16_UNORM_S8_UINT"
+  showsPrec _ VK_FORMAT_D24_UNORM_S8_UINT = showString "VK_FORMAT_D24_UNORM_S8_UINT"
+  showsPrec _ VK_FORMAT_D32_SFLOAT_S8_UINT = showString "VK_FORMAT_D32_SFLOAT_S8_UINT"
+  showsPrec _ VK_FORMAT_BC1_RGB_UNORM_BLOCK = showString "VK_FORMAT_BC1_RGB_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC1_RGB_SRGB_BLOCK = showString "VK_FORMAT_BC1_RGB_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_BC1_RGBA_UNORM_BLOCK = showString "VK_FORMAT_BC1_RGBA_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC1_RGBA_SRGB_BLOCK = showString "VK_FORMAT_BC1_RGBA_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_BC2_UNORM_BLOCK = showString "VK_FORMAT_BC2_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC2_SRGB_BLOCK = showString "VK_FORMAT_BC2_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_BC3_UNORM_BLOCK = showString "VK_FORMAT_BC3_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC3_SRGB_BLOCK = showString "VK_FORMAT_BC3_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_BC4_UNORM_BLOCK = showString "VK_FORMAT_BC4_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC4_SNORM_BLOCK = showString "VK_FORMAT_BC4_SNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC5_UNORM_BLOCK = showString "VK_FORMAT_BC5_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC5_SNORM_BLOCK = showString "VK_FORMAT_BC5_SNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC6H_UFLOAT_BLOCK = showString "VK_FORMAT_BC6H_UFLOAT_BLOCK"
+  showsPrec _ VK_FORMAT_BC6H_SFLOAT_BLOCK = showString "VK_FORMAT_BC6H_SFLOAT_BLOCK"
+  showsPrec _ VK_FORMAT_BC7_UNORM_BLOCK = showString "VK_FORMAT_BC7_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_BC7_SRGB_BLOCK = showString "VK_FORMAT_BC7_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = showString "VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_EAC_R11_UNORM_BLOCK = showString "VK_FORMAT_EAC_R11_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_EAC_R11_SNORM_BLOCK = showString "VK_FORMAT_EAC_R11_SNORM_BLOCK"
+  showsPrec _ VK_FORMAT_EAC_R11G11_UNORM_BLOCK = showString "VK_FORMAT_EAC_R11G11_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_EAC_R11G11_SNORM_BLOCK = showString "VK_FORMAT_EAC_R11G11_SNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_4x4_UNORM_BLOCK = showString "VK_FORMAT_ASTC_4x4_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_4x4_SRGB_BLOCK = showString "VK_FORMAT_ASTC_4x4_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_5x4_UNORM_BLOCK = showString "VK_FORMAT_ASTC_5x4_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_5x4_SRGB_BLOCK = showString "VK_FORMAT_ASTC_5x4_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_5x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_5x5_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_5x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_5x5_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_6x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_6x5_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_6x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_6x5_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_6x6_UNORM_BLOCK = showString "VK_FORMAT_ASTC_6x6_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_6x6_SRGB_BLOCK = showString "VK_FORMAT_ASTC_6x6_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_8x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_8x5_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_8x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_8x5_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_8x6_UNORM_BLOCK = showString "VK_FORMAT_ASTC_8x6_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_8x6_SRGB_BLOCK = showString "VK_FORMAT_ASTC_8x6_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_8x8_UNORM_BLOCK = showString "VK_FORMAT_ASTC_8x8_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_8x8_SRGB_BLOCK = showString "VK_FORMAT_ASTC_8x8_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x5_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x5_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x5_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x5_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x6_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x6_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x6_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x6_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x8_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x8_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x8_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x8_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x10_UNORM_BLOCK = showString "VK_FORMAT_ASTC_10x10_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_10x10_SRGB_BLOCK = showString "VK_FORMAT_ASTC_10x10_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_12x10_UNORM_BLOCK = showString "VK_FORMAT_ASTC_12x10_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_12x10_SRGB_BLOCK = showString "VK_FORMAT_ASTC_12x10_SRGB_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_12x12_UNORM_BLOCK = showString "VK_FORMAT_ASTC_12x12_UNORM_BLOCK"
+  showsPrec _ VK_FORMAT_ASTC_12x12_SRGB_BLOCK = showString "VK_FORMAT_ASTC_12x12_SRGB_BLOCK"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkFormat 1000156000) = showString "VK_FORMAT_G8B8G8R8_422_UNORM"
+  showsPrec _ (VkFormat 1000156001) = showString "VK_FORMAT_B8G8R8G8_422_UNORM"
+  showsPrec _ (VkFormat 1000156002) = showString "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM"
+  showsPrec _ (VkFormat 1000156003) = showString "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM"
+  showsPrec _ (VkFormat 1000156004) = showString "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM"
+  showsPrec _ (VkFormat 1000156005) = showString "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM"
+  showsPrec _ (VkFormat 1000156006) = showString "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM"
+  showsPrec _ (VkFormat 1000156007) = showString "VK_FORMAT_R10X6_UNORM_PACK16"
+  showsPrec _ (VkFormat 1000156008) = showString "VK_FORMAT_R10X6G10X6_UNORM_2PACK16"
+  showsPrec _ (VkFormat 1000156009) = showString "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16"
+  showsPrec _ (VkFormat 1000156010) = showString "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16"
+  showsPrec _ (VkFormat 1000156011) = showString "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16"
+  showsPrec _ (VkFormat 1000156012) = showString "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156013) = showString "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156014) = showString "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156015) = showString "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156016) = showString "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156017) = showString "VK_FORMAT_R12X4_UNORM_PACK16"
+  showsPrec _ (VkFormat 1000156018) = showString "VK_FORMAT_R12X4G12X4_UNORM_2PACK16"
+  showsPrec _ (VkFormat 1000156019) = showString "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16"
+  showsPrec _ (VkFormat 1000156020) = showString "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16"
+  showsPrec _ (VkFormat 1000156021) = showString "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16"
+  showsPrec _ (VkFormat 1000156022) = showString "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156023) = showString "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156024) = showString "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156025) = showString "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156026) = showString "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16"
+  showsPrec _ (VkFormat 1000156027) = showString "VK_FORMAT_G16B16G16R16_422_UNORM"
+  showsPrec _ (VkFormat 1000156028) = showString "VK_FORMAT_B16G16R16G16_422_UNORM"
+  showsPrec _ (VkFormat 1000156029) = showString "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM"
+  showsPrec _ (VkFormat 1000156030) = showString "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM"
+  showsPrec _ (VkFormat 1000156031) = showString "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM"
+  showsPrec _ (VkFormat 1000156032) = showString "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM"
+  showsPrec _ (VkFormat 1000156033) = showString "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM"
+  showsPrec _ (VkFormat 1000054000) = showString "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG"
+  showsPrec _ (VkFormat 1000054001) = showString "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG"
+  showsPrec _ (VkFormat 1000054002) = showString "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG"
+  showsPrec _ (VkFormat 1000054003) = showString "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG"
+  showsPrec _ (VkFormat 1000054004) = showString "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG"
+  showsPrec _ (VkFormat 1000054005) = showString "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG"
+  showsPrec _ (VkFormat 1000054006) = showString "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG"
+  showsPrec _ (VkFormat 1000054007) = showString "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"
+  showsPrec p (VkFormat x) = showParen (p >= 11) (showString "VkFormat " . showsPrec 11 x)
+
+instance Read VkFormat where
+  readPrec = parens ( choose [ ("VK_FORMAT_UNDEFINED",                  pure VK_FORMAT_UNDEFINED)
+                             , ("VK_FORMAT_R4G4_UNORM_PACK8",           pure VK_FORMAT_R4G4_UNORM_PACK8)
+                             , ("VK_FORMAT_R4G4B4A4_UNORM_PACK16",      pure VK_FORMAT_R4G4B4A4_UNORM_PACK16)
+                             , ("VK_FORMAT_B4G4R4A4_UNORM_PACK16",      pure VK_FORMAT_B4G4R4A4_UNORM_PACK16)
+                             , ("VK_FORMAT_R5G6B5_UNORM_PACK16",        pure VK_FORMAT_R5G6B5_UNORM_PACK16)
+                             , ("VK_FORMAT_B5G6R5_UNORM_PACK16",        pure VK_FORMAT_B5G6R5_UNORM_PACK16)
+                             , ("VK_FORMAT_R5G5B5A1_UNORM_PACK16",      pure VK_FORMAT_R5G5B5A1_UNORM_PACK16)
+                             , ("VK_FORMAT_B5G5R5A1_UNORM_PACK16",      pure VK_FORMAT_B5G5R5A1_UNORM_PACK16)
+                             , ("VK_FORMAT_A1R5G5B5_UNORM_PACK16",      pure VK_FORMAT_A1R5G5B5_UNORM_PACK16)
+                             , ("VK_FORMAT_R8_UNORM",                   pure VK_FORMAT_R8_UNORM)
+                             , ("VK_FORMAT_R8_SNORM",                   pure VK_FORMAT_R8_SNORM)
+                             , ("VK_FORMAT_R8_USCALED",                 pure VK_FORMAT_R8_USCALED)
+                             , ("VK_FORMAT_R8_SSCALED",                 pure VK_FORMAT_R8_SSCALED)
+                             , ("VK_FORMAT_R8_UINT",                    pure VK_FORMAT_R8_UINT)
+                             , ("VK_FORMAT_R8_SINT",                    pure VK_FORMAT_R8_SINT)
+                             , ("VK_FORMAT_R8_SRGB",                    pure VK_FORMAT_R8_SRGB)
+                             , ("VK_FORMAT_R8G8_UNORM",                 pure VK_FORMAT_R8G8_UNORM)
+                             , ("VK_FORMAT_R8G8_SNORM",                 pure VK_FORMAT_R8G8_SNORM)
+                             , ("VK_FORMAT_R8G8_USCALED",               pure VK_FORMAT_R8G8_USCALED)
+                             , ("VK_FORMAT_R8G8_SSCALED",               pure VK_FORMAT_R8G8_SSCALED)
+                             , ("VK_FORMAT_R8G8_UINT",                  pure VK_FORMAT_R8G8_UINT)
+                             , ("VK_FORMAT_R8G8_SINT",                  pure VK_FORMAT_R8G8_SINT)
+                             , ("VK_FORMAT_R8G8_SRGB",                  pure VK_FORMAT_R8G8_SRGB)
+                             , ("VK_FORMAT_R8G8B8_UNORM",               pure VK_FORMAT_R8G8B8_UNORM)
+                             , ("VK_FORMAT_R8G8B8_SNORM",               pure VK_FORMAT_R8G8B8_SNORM)
+                             , ("VK_FORMAT_R8G8B8_USCALED",             pure VK_FORMAT_R8G8B8_USCALED)
+                             , ("VK_FORMAT_R8G8B8_SSCALED",             pure VK_FORMAT_R8G8B8_SSCALED)
+                             , ("VK_FORMAT_R8G8B8_UINT",                pure VK_FORMAT_R8G8B8_UINT)
+                             , ("VK_FORMAT_R8G8B8_SINT",                pure VK_FORMAT_R8G8B8_SINT)
+                             , ("VK_FORMAT_R8G8B8_SRGB",                pure VK_FORMAT_R8G8B8_SRGB)
+                             , ("VK_FORMAT_B8G8R8_UNORM",               pure VK_FORMAT_B8G8R8_UNORM)
+                             , ("VK_FORMAT_B8G8R8_SNORM",               pure VK_FORMAT_B8G8R8_SNORM)
+                             , ("VK_FORMAT_B8G8R8_USCALED",             pure VK_FORMAT_B8G8R8_USCALED)
+                             , ("VK_FORMAT_B8G8R8_SSCALED",             pure VK_FORMAT_B8G8R8_SSCALED)
+                             , ("VK_FORMAT_B8G8R8_UINT",                pure VK_FORMAT_B8G8R8_UINT)
+                             , ("VK_FORMAT_B8G8R8_SINT",                pure VK_FORMAT_B8G8R8_SINT)
+                             , ("VK_FORMAT_B8G8R8_SRGB",                pure VK_FORMAT_B8G8R8_SRGB)
+                             , ("VK_FORMAT_R8G8B8A8_UNORM",             pure VK_FORMAT_R8G8B8A8_UNORM)
+                             , ("VK_FORMAT_R8G8B8A8_SNORM",             pure VK_FORMAT_R8G8B8A8_SNORM)
+                             , ("VK_FORMAT_R8G8B8A8_USCALED",           pure VK_FORMAT_R8G8B8A8_USCALED)
+                             , ("VK_FORMAT_R8G8B8A8_SSCALED",           pure VK_FORMAT_R8G8B8A8_SSCALED)
+                             , ("VK_FORMAT_R8G8B8A8_UINT",              pure VK_FORMAT_R8G8B8A8_UINT)
+                             , ("VK_FORMAT_R8G8B8A8_SINT",              pure VK_FORMAT_R8G8B8A8_SINT)
+                             , ("VK_FORMAT_R8G8B8A8_SRGB",              pure VK_FORMAT_R8G8B8A8_SRGB)
+                             , ("VK_FORMAT_B8G8R8A8_UNORM",             pure VK_FORMAT_B8G8R8A8_UNORM)
+                             , ("VK_FORMAT_B8G8R8A8_SNORM",             pure VK_FORMAT_B8G8R8A8_SNORM)
+                             , ("VK_FORMAT_B8G8R8A8_USCALED",           pure VK_FORMAT_B8G8R8A8_USCALED)
+                             , ("VK_FORMAT_B8G8R8A8_SSCALED",           pure VK_FORMAT_B8G8R8A8_SSCALED)
+                             , ("VK_FORMAT_B8G8R8A8_UINT",              pure VK_FORMAT_B8G8R8A8_UINT)
+                             , ("VK_FORMAT_B8G8R8A8_SINT",              pure VK_FORMAT_B8G8R8A8_SINT)
+                             , ("VK_FORMAT_B8G8R8A8_SRGB",              pure VK_FORMAT_B8G8R8A8_SRGB)
+                             , ("VK_FORMAT_A8B8G8R8_UNORM_PACK32",      pure VK_FORMAT_A8B8G8R8_UNORM_PACK32)
+                             , ("VK_FORMAT_A8B8G8R8_SNORM_PACK32",      pure VK_FORMAT_A8B8G8R8_SNORM_PACK32)
+                             , ("VK_FORMAT_A8B8G8R8_USCALED_PACK32",    pure VK_FORMAT_A8B8G8R8_USCALED_PACK32)
+                             , ("VK_FORMAT_A8B8G8R8_SSCALED_PACK32",    pure VK_FORMAT_A8B8G8R8_SSCALED_PACK32)
+                             , ("VK_FORMAT_A8B8G8R8_UINT_PACK32",       pure VK_FORMAT_A8B8G8R8_UINT_PACK32)
+                             , ("VK_FORMAT_A8B8G8R8_SINT_PACK32",       pure VK_FORMAT_A8B8G8R8_SINT_PACK32)
+                             , ("VK_FORMAT_A8B8G8R8_SRGB_PACK32",       pure VK_FORMAT_A8B8G8R8_SRGB_PACK32)
+                             , ("VK_FORMAT_A2R10G10B10_UNORM_PACK32",   pure VK_FORMAT_A2R10G10B10_UNORM_PACK32)
+                             , ("VK_FORMAT_A2R10G10B10_SNORM_PACK32",   pure VK_FORMAT_A2R10G10B10_SNORM_PACK32)
+                             , ("VK_FORMAT_A2R10G10B10_USCALED_PACK32", pure VK_FORMAT_A2R10G10B10_USCALED_PACK32)
+                             , ("VK_FORMAT_A2R10G10B10_SSCALED_PACK32", pure VK_FORMAT_A2R10G10B10_SSCALED_PACK32)
+                             , ("VK_FORMAT_A2R10G10B10_UINT_PACK32",    pure VK_FORMAT_A2R10G10B10_UINT_PACK32)
+                             , ("VK_FORMAT_A2R10G10B10_SINT_PACK32",    pure VK_FORMAT_A2R10G10B10_SINT_PACK32)
+                             , ("VK_FORMAT_A2B10G10R10_UNORM_PACK32",   pure VK_FORMAT_A2B10G10R10_UNORM_PACK32)
+                             , ("VK_FORMAT_A2B10G10R10_SNORM_PACK32",   pure VK_FORMAT_A2B10G10R10_SNORM_PACK32)
+                             , ("VK_FORMAT_A2B10G10R10_USCALED_PACK32", pure VK_FORMAT_A2B10G10R10_USCALED_PACK32)
+                             , ("VK_FORMAT_A2B10G10R10_SSCALED_PACK32", pure VK_FORMAT_A2B10G10R10_SSCALED_PACK32)
+                             , ("VK_FORMAT_A2B10G10R10_UINT_PACK32",    pure VK_FORMAT_A2B10G10R10_UINT_PACK32)
+                             , ("VK_FORMAT_A2B10G10R10_SINT_PACK32",    pure VK_FORMAT_A2B10G10R10_SINT_PACK32)
+                             , ("VK_FORMAT_R16_UNORM",                  pure VK_FORMAT_R16_UNORM)
+                             , ("VK_FORMAT_R16_SNORM",                  pure VK_FORMAT_R16_SNORM)
+                             , ("VK_FORMAT_R16_USCALED",                pure VK_FORMAT_R16_USCALED)
+                             , ("VK_FORMAT_R16_SSCALED",                pure VK_FORMAT_R16_SSCALED)
+                             , ("VK_FORMAT_R16_UINT",                   pure VK_FORMAT_R16_UINT)
+                             , ("VK_FORMAT_R16_SINT",                   pure VK_FORMAT_R16_SINT)
+                             , ("VK_FORMAT_R16_SFLOAT",                 pure VK_FORMAT_R16_SFLOAT)
+                             , ("VK_FORMAT_R16G16_UNORM",               pure VK_FORMAT_R16G16_UNORM)
+                             , ("VK_FORMAT_R16G16_SNORM",               pure VK_FORMAT_R16G16_SNORM)
+                             , ("VK_FORMAT_R16G16_USCALED",             pure VK_FORMAT_R16G16_USCALED)
+                             , ("VK_FORMAT_R16G16_SSCALED",             pure VK_FORMAT_R16G16_SSCALED)
+                             , ("VK_FORMAT_R16G16_UINT",                pure VK_FORMAT_R16G16_UINT)
+                             , ("VK_FORMAT_R16G16_SINT",                pure VK_FORMAT_R16G16_SINT)
+                             , ("VK_FORMAT_R16G16_SFLOAT",              pure VK_FORMAT_R16G16_SFLOAT)
+                             , ("VK_FORMAT_R16G16B16_UNORM",            pure VK_FORMAT_R16G16B16_UNORM)
+                             , ("VK_FORMAT_R16G16B16_SNORM",            pure VK_FORMAT_R16G16B16_SNORM)
+                             , ("VK_FORMAT_R16G16B16_USCALED",          pure VK_FORMAT_R16G16B16_USCALED)
+                             , ("VK_FORMAT_R16G16B16_SSCALED",          pure VK_FORMAT_R16G16B16_SSCALED)
+                             , ("VK_FORMAT_R16G16B16_UINT",             pure VK_FORMAT_R16G16B16_UINT)
+                             , ("VK_FORMAT_R16G16B16_SINT",             pure VK_FORMAT_R16G16B16_SINT)
+                             , ("VK_FORMAT_R16G16B16_SFLOAT",           pure VK_FORMAT_R16G16B16_SFLOAT)
+                             , ("VK_FORMAT_R16G16B16A16_UNORM",         pure VK_FORMAT_R16G16B16A16_UNORM)
+                             , ("VK_FORMAT_R16G16B16A16_SNORM",         pure VK_FORMAT_R16G16B16A16_SNORM)
+                             , ("VK_FORMAT_R16G16B16A16_USCALED",       pure VK_FORMAT_R16G16B16A16_USCALED)
+                             , ("VK_FORMAT_R16G16B16A16_SSCALED",       pure VK_FORMAT_R16G16B16A16_SSCALED)
+                             , ("VK_FORMAT_R16G16B16A16_UINT",          pure VK_FORMAT_R16G16B16A16_UINT)
+                             , ("VK_FORMAT_R16G16B16A16_SINT",          pure VK_FORMAT_R16G16B16A16_SINT)
+                             , ("VK_FORMAT_R16G16B16A16_SFLOAT",        pure VK_FORMAT_R16G16B16A16_SFLOAT)
+                             , ("VK_FORMAT_R32_UINT",                   pure VK_FORMAT_R32_UINT)
+                             , ("VK_FORMAT_R32_SINT",                   pure VK_FORMAT_R32_SINT)
+                             , ("VK_FORMAT_R32_SFLOAT",                 pure VK_FORMAT_R32_SFLOAT)
+                             , ("VK_FORMAT_R32G32_UINT",                pure VK_FORMAT_R32G32_UINT)
+                             , ("VK_FORMAT_R32G32_SINT",                pure VK_FORMAT_R32G32_SINT)
+                             , ("VK_FORMAT_R32G32_SFLOAT",              pure VK_FORMAT_R32G32_SFLOAT)
+                             , ("VK_FORMAT_R32G32B32_UINT",             pure VK_FORMAT_R32G32B32_UINT)
+                             , ("VK_FORMAT_R32G32B32_SINT",             pure VK_FORMAT_R32G32B32_SINT)
+                             , ("VK_FORMAT_R32G32B32_SFLOAT",           pure VK_FORMAT_R32G32B32_SFLOAT)
+                             , ("VK_FORMAT_R32G32B32A32_UINT",          pure VK_FORMAT_R32G32B32A32_UINT)
+                             , ("VK_FORMAT_R32G32B32A32_SINT",          pure VK_FORMAT_R32G32B32A32_SINT)
+                             , ("VK_FORMAT_R32G32B32A32_SFLOAT",        pure VK_FORMAT_R32G32B32A32_SFLOAT)
+                             , ("VK_FORMAT_R64_UINT",                   pure VK_FORMAT_R64_UINT)
+                             , ("VK_FORMAT_R64_SINT",                   pure VK_FORMAT_R64_SINT)
+                             , ("VK_FORMAT_R64_SFLOAT",                 pure VK_FORMAT_R64_SFLOAT)
+                             , ("VK_FORMAT_R64G64_UINT",                pure VK_FORMAT_R64G64_UINT)
+                             , ("VK_FORMAT_R64G64_SINT",                pure VK_FORMAT_R64G64_SINT)
+                             , ("VK_FORMAT_R64G64_SFLOAT",              pure VK_FORMAT_R64G64_SFLOAT)
+                             , ("VK_FORMAT_R64G64B64_UINT",             pure VK_FORMAT_R64G64B64_UINT)
+                             , ("VK_FORMAT_R64G64B64_SINT",             pure VK_FORMAT_R64G64B64_SINT)
+                             , ("VK_FORMAT_R64G64B64_SFLOAT",           pure VK_FORMAT_R64G64B64_SFLOAT)
+                             , ("VK_FORMAT_R64G64B64A64_UINT",          pure VK_FORMAT_R64G64B64A64_UINT)
+                             , ("VK_FORMAT_R64G64B64A64_SINT",          pure VK_FORMAT_R64G64B64A64_SINT)
+                             , ("VK_FORMAT_R64G64B64A64_SFLOAT",        pure VK_FORMAT_R64G64B64A64_SFLOAT)
+                             , ("VK_FORMAT_B10G11R11_UFLOAT_PACK32",    pure VK_FORMAT_B10G11R11_UFLOAT_PACK32)
+                             , ("VK_FORMAT_E5B9G9R9_UFLOAT_PACK32",     pure VK_FORMAT_E5B9G9R9_UFLOAT_PACK32)
+                             , ("VK_FORMAT_D16_UNORM",                  pure VK_FORMAT_D16_UNORM)
+                             , ("VK_FORMAT_X8_D24_UNORM_PACK32",        pure VK_FORMAT_X8_D24_UNORM_PACK32)
+                             , ("VK_FORMAT_D32_SFLOAT",                 pure VK_FORMAT_D32_SFLOAT)
+                             , ("VK_FORMAT_S8_UINT",                    pure VK_FORMAT_S8_UINT)
+                             , ("VK_FORMAT_D16_UNORM_S8_UINT",          pure VK_FORMAT_D16_UNORM_S8_UINT)
+                             , ("VK_FORMAT_D24_UNORM_S8_UINT",          pure VK_FORMAT_D24_UNORM_S8_UINT)
+                             , ("VK_FORMAT_D32_SFLOAT_S8_UINT",         pure VK_FORMAT_D32_SFLOAT_S8_UINT)
+                             , ("VK_FORMAT_BC1_RGB_UNORM_BLOCK",        pure VK_FORMAT_BC1_RGB_UNORM_BLOCK)
+                             , ("VK_FORMAT_BC1_RGB_SRGB_BLOCK",         pure VK_FORMAT_BC1_RGB_SRGB_BLOCK)
+                             , ("VK_FORMAT_BC1_RGBA_UNORM_BLOCK",       pure VK_FORMAT_BC1_RGBA_UNORM_BLOCK)
+                             , ("VK_FORMAT_BC1_RGBA_SRGB_BLOCK",        pure VK_FORMAT_BC1_RGBA_SRGB_BLOCK)
+                             , ("VK_FORMAT_BC2_UNORM_BLOCK",            pure VK_FORMAT_BC2_UNORM_BLOCK)
+                             , ("VK_FORMAT_BC2_SRGB_BLOCK",             pure VK_FORMAT_BC2_SRGB_BLOCK)
+                             , ("VK_FORMAT_BC3_UNORM_BLOCK",            pure VK_FORMAT_BC3_UNORM_BLOCK)
+                             , ("VK_FORMAT_BC3_SRGB_BLOCK",             pure VK_FORMAT_BC3_SRGB_BLOCK)
+                             , ("VK_FORMAT_BC4_UNORM_BLOCK",            pure VK_FORMAT_BC4_UNORM_BLOCK)
+                             , ("VK_FORMAT_BC4_SNORM_BLOCK",            pure VK_FORMAT_BC4_SNORM_BLOCK)
+                             , ("VK_FORMAT_BC5_UNORM_BLOCK",            pure VK_FORMAT_BC5_UNORM_BLOCK)
+                             , ("VK_FORMAT_BC5_SNORM_BLOCK",            pure VK_FORMAT_BC5_SNORM_BLOCK)
+                             , ("VK_FORMAT_BC6H_UFLOAT_BLOCK",          pure VK_FORMAT_BC6H_UFLOAT_BLOCK)
+                             , ("VK_FORMAT_BC6H_SFLOAT_BLOCK",          pure VK_FORMAT_BC6H_SFLOAT_BLOCK)
+                             , ("VK_FORMAT_BC7_UNORM_BLOCK",            pure VK_FORMAT_BC7_UNORM_BLOCK)
+                             , ("VK_FORMAT_BC7_SRGB_BLOCK",             pure VK_FORMAT_BC7_SRGB_BLOCK)
+                             , ("VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK",    pure VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK)
+                             , ("VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK",     pure VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK)
+                             , ("VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK",  pure VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK)
+                             , ("VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK",   pure VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK)
+                             , ("VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK",  pure VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK)
+                             , ("VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK",   pure VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK)
+                             , ("VK_FORMAT_EAC_R11_UNORM_BLOCK",        pure VK_FORMAT_EAC_R11_UNORM_BLOCK)
+                             , ("VK_FORMAT_EAC_R11_SNORM_BLOCK",        pure VK_FORMAT_EAC_R11_SNORM_BLOCK)
+                             , ("VK_FORMAT_EAC_R11G11_UNORM_BLOCK",     pure VK_FORMAT_EAC_R11G11_UNORM_BLOCK)
+                             , ("VK_FORMAT_EAC_R11G11_SNORM_BLOCK",     pure VK_FORMAT_EAC_R11G11_SNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_4x4_UNORM_BLOCK",       pure VK_FORMAT_ASTC_4x4_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_4x4_SRGB_BLOCK",        pure VK_FORMAT_ASTC_4x4_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_5x4_UNORM_BLOCK",       pure VK_FORMAT_ASTC_5x4_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_5x4_SRGB_BLOCK",        pure VK_FORMAT_ASTC_5x4_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_5x5_UNORM_BLOCK",       pure VK_FORMAT_ASTC_5x5_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_5x5_SRGB_BLOCK",        pure VK_FORMAT_ASTC_5x5_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_6x5_UNORM_BLOCK",       pure VK_FORMAT_ASTC_6x5_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_6x5_SRGB_BLOCK",        pure VK_FORMAT_ASTC_6x5_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_6x6_UNORM_BLOCK",       pure VK_FORMAT_ASTC_6x6_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_6x6_SRGB_BLOCK",        pure VK_FORMAT_ASTC_6x6_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_8x5_UNORM_BLOCK",       pure VK_FORMAT_ASTC_8x5_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_8x5_SRGB_BLOCK",        pure VK_FORMAT_ASTC_8x5_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_8x6_UNORM_BLOCK",       pure VK_FORMAT_ASTC_8x6_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_8x6_SRGB_BLOCK",        pure VK_FORMAT_ASTC_8x6_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_8x8_UNORM_BLOCK",       pure VK_FORMAT_ASTC_8x8_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_8x8_SRGB_BLOCK",        pure VK_FORMAT_ASTC_8x8_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x5_UNORM_BLOCK",      pure VK_FORMAT_ASTC_10x5_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x5_SRGB_BLOCK",       pure VK_FORMAT_ASTC_10x5_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x6_UNORM_BLOCK",      pure VK_FORMAT_ASTC_10x6_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x6_SRGB_BLOCK",       pure VK_FORMAT_ASTC_10x6_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x8_UNORM_BLOCK",      pure VK_FORMAT_ASTC_10x8_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x8_SRGB_BLOCK",       pure VK_FORMAT_ASTC_10x8_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x10_UNORM_BLOCK",     pure VK_FORMAT_ASTC_10x10_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_10x10_SRGB_BLOCK",      pure VK_FORMAT_ASTC_10x10_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_12x10_UNORM_BLOCK",     pure VK_FORMAT_ASTC_12x10_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_12x10_SRGB_BLOCK",      pure VK_FORMAT_ASTC_12x10_SRGB_BLOCK)
+                             , ("VK_FORMAT_ASTC_12x12_UNORM_BLOCK",     pure VK_FORMAT_ASTC_12x12_UNORM_BLOCK)
+                             , ("VK_FORMAT_ASTC_12x12_SRGB_BLOCK",      pure VK_FORMAT_ASTC_12x12_SRGB_BLOCK)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_FORMAT_G8B8G8R8_422_UNORM",                         pure (VkFormat 1000156000))
+                             , ("VK_FORMAT_B8G8R8G8_422_UNORM",                         pure (VkFormat 1000156001))
+                             , ("VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM",                  pure (VkFormat 1000156002))
+                             , ("VK_FORMAT_G8_B8R8_2PLANE_420_UNORM",                   pure (VkFormat 1000156003))
+                             , ("VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM",                  pure (VkFormat 1000156004))
+                             , ("VK_FORMAT_G8_B8R8_2PLANE_422_UNORM",                   pure (VkFormat 1000156005))
+                             , ("VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM",                  pure (VkFormat 1000156006))
+                             , ("VK_FORMAT_R10X6_UNORM_PACK16",                         pure (VkFormat 1000156007))
+                             , ("VK_FORMAT_R10X6G10X6_UNORM_2PACK16",                   pure (VkFormat 1000156008))
+                             , ("VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16",         pure (VkFormat 1000156009))
+                             , ("VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16",     pure (VkFormat 1000156010))
+                             , ("VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16",     pure (VkFormat 1000156011))
+                             , ("VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16", pure (VkFormat 1000156012))
+                             , ("VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16",  pure (VkFormat 1000156013))
+                             , ("VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16", pure (VkFormat 1000156014))
+                             , ("VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16",  pure (VkFormat 1000156015))
+                             , ("VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16", pure (VkFormat 1000156016))
+                             , ("VK_FORMAT_R12X4_UNORM_PACK16",                         pure (VkFormat 1000156017))
+                             , ("VK_FORMAT_R12X4G12X4_UNORM_2PACK16",                   pure (VkFormat 1000156018))
+                             , ("VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16",         pure (VkFormat 1000156019))
+                             , ("VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16",     pure (VkFormat 1000156020))
+                             , ("VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16",     pure (VkFormat 1000156021))
+                             , ("VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16", pure (VkFormat 1000156022))
+                             , ("VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16",  pure (VkFormat 1000156023))
+                             , ("VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16", pure (VkFormat 1000156024))
+                             , ("VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16",  pure (VkFormat 1000156025))
+                             , ("VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16", pure (VkFormat 1000156026))
+                             , ("VK_FORMAT_G16B16G16R16_422_UNORM",                     pure (VkFormat 1000156027))
+                             , ("VK_FORMAT_B16G16R16G16_422_UNORM",                     pure (VkFormat 1000156028))
+                             , ("VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM",               pure (VkFormat 1000156029))
+                             , ("VK_FORMAT_G16_B16R16_2PLANE_420_UNORM",                pure (VkFormat 1000156030))
+                             , ("VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM",               pure (VkFormat 1000156031))
+                             , ("VK_FORMAT_G16_B16R16_2PLANE_422_UNORM",                pure (VkFormat 1000156032))
+                             , ("VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM",               pure (VkFormat 1000156033))
+                             , ("VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG",                pure (VkFormat 1000054000))
+                             , ("VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG",                pure (VkFormat 1000054001))
+                             , ("VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG",                pure (VkFormat 1000054002))
+                             , ("VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG",                pure (VkFormat 1000054003))
+                             , ("VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG",                 pure (VkFormat 1000054004))
+                             , ("VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG",                 pure (VkFormat 1000054005))
+                             , ("VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG",                 pure (VkFormat 1000054006))
+                             , ("VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG",                 pure (VkFormat 1000054007))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkFormat")
+                        v <- step readPrec
+                        pure (VkFormat v)
+                        )
+                    )
+
+-- | @VK_FORMAT_UNDEFINED@ specifies that the format is not specified.
+pattern VK_FORMAT_UNDEFINED :: VkFormat
+pattern VK_FORMAT_UNDEFINED = VkFormat 0
+
+-- | @VK_FORMAT_R4G4_UNORM_PACK8@ specifies a two-component, 8-bit packed
+-- unsigned normalized format that has a 4-bit R component in bits 4..7,
+-- and a 4-bit G component in bits 0..3.
+pattern VK_FORMAT_R4G4_UNORM_PACK8 :: VkFormat
+pattern VK_FORMAT_R4G4_UNORM_PACK8 = VkFormat 1
+
+-- | @VK_FORMAT_R4G4B4A4_UNORM_PACK16@ specifies a four-component, 16-bit
+-- packed unsigned normalized format that has a 4-bit R component in bits
+-- 12..15, a 4-bit G component in bits 8..11, a 4-bit B component in bits
+-- 4..7, and a 4-bit A component in bits 0..3.
+pattern VK_FORMAT_R4G4B4A4_UNORM_PACK16 :: VkFormat
+pattern VK_FORMAT_R4G4B4A4_UNORM_PACK16 = VkFormat 2
+
+-- | @VK_FORMAT_B4G4R4A4_UNORM_PACK16@ specifies a four-component, 16-bit
+-- packed unsigned normalized format that has a 4-bit B component in bits
+-- 12..15, a 4-bit G component in bits 8..11, a 4-bit R component in bits
+-- 4..7, and a 4-bit A component in bits 0..3.
+pattern VK_FORMAT_B4G4R4A4_UNORM_PACK16 :: VkFormat
+pattern VK_FORMAT_B4G4R4A4_UNORM_PACK16 = VkFormat 3
+
+-- | @VK_FORMAT_R5G6B5_UNORM_PACK16@ specifies a three-component, 16-bit
+-- packed unsigned normalized format that has a 5-bit R component in bits
+-- 11..15, a 6-bit G component in bits 5..10, and a 5-bit B component in
+-- bits 0..4.
+pattern VK_FORMAT_R5G6B5_UNORM_PACK16 :: VkFormat
+pattern VK_FORMAT_R5G6B5_UNORM_PACK16 = VkFormat 4
+
+-- | @VK_FORMAT_B5G6R5_UNORM_PACK16@ specifies a three-component, 16-bit
+-- packed unsigned normalized format that has a 5-bit B component in bits
+-- 11..15, a 6-bit G component in bits 5..10, and a 5-bit R component in
+-- bits 0..4.
+pattern VK_FORMAT_B5G6R5_UNORM_PACK16 :: VkFormat
+pattern VK_FORMAT_B5G6R5_UNORM_PACK16 = VkFormat 5
+
+-- | @VK_FORMAT_R5G5B5A1_UNORM_PACK16@ specifies a four-component, 16-bit
+-- packed unsigned normalized format that has a 5-bit R component in bits
+-- 11..15, a 5-bit G component in bits 6..10, a 5-bit B component in bits
+-- 1..5, and a 1-bit A component in bit 0.
+pattern VK_FORMAT_R5G5B5A1_UNORM_PACK16 :: VkFormat
+pattern VK_FORMAT_R5G5B5A1_UNORM_PACK16 = VkFormat 6
+
+-- | @VK_FORMAT_B5G5R5A1_UNORM_PACK16@ specifies a four-component, 16-bit
+-- packed unsigned normalized format that has a 5-bit B component in bits
+-- 11..15, a 5-bit G component in bits 6..10, a 5-bit R component in bits
+-- 1..5, and a 1-bit A component in bit 0.
+pattern VK_FORMAT_B5G5R5A1_UNORM_PACK16 :: VkFormat
+pattern VK_FORMAT_B5G5R5A1_UNORM_PACK16 = VkFormat 7
+
+-- | @VK_FORMAT_A1R5G5B5_UNORM_PACK16@ specifies a four-component, 16-bit
+-- packed unsigned normalized format that has a 1-bit A component in bit
+-- 15, a 5-bit R component in bits 10..14, a 5-bit G component in bits
+-- 5..9, and a 5-bit B component in bits 0..4.
+pattern VK_FORMAT_A1R5G5B5_UNORM_PACK16 :: VkFormat
+pattern VK_FORMAT_A1R5G5B5_UNORM_PACK16 = VkFormat 8
+
+-- | @VK_FORMAT_R8_UNORM@ specifies a one-component, 8-bit unsigned
+-- normalized format that has a single 8-bit R component.
+pattern VK_FORMAT_R8_UNORM :: VkFormat
+pattern VK_FORMAT_R8_UNORM = VkFormat 9
+
+-- | @VK_FORMAT_R8_SNORM@ specifies a one-component, 8-bit signed normalized
+-- format that has a single 8-bit R component.
+pattern VK_FORMAT_R8_SNORM :: VkFormat
+pattern VK_FORMAT_R8_SNORM = VkFormat 10
+
+-- | @VK_FORMAT_R8_USCALED@ specifies a one-component, 8-bit unsigned scaled
+-- integer format that has a single 8-bit R component.
+pattern VK_FORMAT_R8_USCALED :: VkFormat
+pattern VK_FORMAT_R8_USCALED = VkFormat 11
+
+-- | @VK_FORMAT_R8_SSCALED@ specifies a one-component, 8-bit signed scaled
+-- integer format that has a single 8-bit R component.
+pattern VK_FORMAT_R8_SSCALED :: VkFormat
+pattern VK_FORMAT_R8_SSCALED = VkFormat 12
+
+-- | @VK_FORMAT_R8_UINT@ specifies a one-component, 8-bit unsigned integer
+-- format that has a single 8-bit R component.
+pattern VK_FORMAT_R8_UINT :: VkFormat
+pattern VK_FORMAT_R8_UINT = VkFormat 13
+
+-- | @VK_FORMAT_R8_SINT@ specifies a one-component, 8-bit signed integer
+-- format that has a single 8-bit R component.
+pattern VK_FORMAT_R8_SINT :: VkFormat
+pattern VK_FORMAT_R8_SINT = VkFormat 14
+
+-- | @VK_FORMAT_R8_SRGB@ specifies a one-component, 8-bit unsigned normalized
+-- format that has a single 8-bit R component stored with sRGB nonlinear
+-- encoding.
+pattern VK_FORMAT_R8_SRGB :: VkFormat
+pattern VK_FORMAT_R8_SRGB = VkFormat 15
+
+-- | @VK_FORMAT_R8G8_UNORM@ specifies a two-component, 16-bit unsigned
+-- normalized format that has an 8-bit R component in byte 0, and an 8-bit
+-- G component in byte 1.
+pattern VK_FORMAT_R8G8_UNORM :: VkFormat
+pattern VK_FORMAT_R8G8_UNORM = VkFormat 16
+
+-- | @VK_FORMAT_R8G8_SNORM@ specifies a two-component, 16-bit signed
+-- normalized format that has an 8-bit R component in byte 0, and an 8-bit
+-- G component in byte 1.
+pattern VK_FORMAT_R8G8_SNORM :: VkFormat
+pattern VK_FORMAT_R8G8_SNORM = VkFormat 17
+
+-- | @VK_FORMAT_R8G8_USCALED@ specifies a two-component, 16-bit unsigned
+-- scaled integer format that has an 8-bit R component in byte 0, and an
+-- 8-bit G component in byte 1.
+pattern VK_FORMAT_R8G8_USCALED :: VkFormat
+pattern VK_FORMAT_R8G8_USCALED = VkFormat 18
+
+-- | @VK_FORMAT_R8G8_SSCALED@ specifies a two-component, 16-bit signed scaled
+-- integer format that has an 8-bit R component in byte 0, and an 8-bit G
+-- component in byte 1.
+pattern VK_FORMAT_R8G8_SSCALED :: VkFormat
+pattern VK_FORMAT_R8G8_SSCALED = VkFormat 19
+
+-- | @VK_FORMAT_R8G8_UINT@ specifies a two-component, 16-bit unsigned integer
+-- format that has an 8-bit R component in byte 0, and an 8-bit G component
+-- in byte 1.
+pattern VK_FORMAT_R8G8_UINT :: VkFormat
+pattern VK_FORMAT_R8G8_UINT = VkFormat 20
+
+-- | @VK_FORMAT_R8G8_SINT@ specifies a two-component, 16-bit signed integer
+-- format that has an 8-bit R component in byte 0, and an 8-bit G component
+-- in byte 1.
+pattern VK_FORMAT_R8G8_SINT :: VkFormat
+pattern VK_FORMAT_R8G8_SINT = VkFormat 21
+
+-- | @VK_FORMAT_R8G8_SRGB@ specifies a two-component, 16-bit unsigned
+-- normalized format that has an 8-bit R component stored with sRGB
+-- nonlinear encoding in byte 0, and an 8-bit G component stored with sRGB
+-- nonlinear encoding in byte 1.
+pattern VK_FORMAT_R8G8_SRGB :: VkFormat
+pattern VK_FORMAT_R8G8_SRGB = VkFormat 22
+
+-- | @VK_FORMAT_R8G8B8_UNORM@ specifies a three-component, 24-bit unsigned
+-- normalized format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit B component in byte 2.
+pattern VK_FORMAT_R8G8B8_UNORM :: VkFormat
+pattern VK_FORMAT_R8G8B8_UNORM = VkFormat 23
+
+-- | @VK_FORMAT_R8G8B8_SNORM@ specifies a three-component, 24-bit signed
+-- normalized format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit B component in byte 2.
+pattern VK_FORMAT_R8G8B8_SNORM :: VkFormat
+pattern VK_FORMAT_R8G8B8_SNORM = VkFormat 24
+
+-- | @VK_FORMAT_R8G8B8_USCALED@ specifies a three-component, 24-bit unsigned
+-- scaled format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit B component in byte 2.
+pattern VK_FORMAT_R8G8B8_USCALED :: VkFormat
+pattern VK_FORMAT_R8G8B8_USCALED = VkFormat 25
+
+-- | @VK_FORMAT_R8G8B8_SSCALED@ specifies a three-component, 24-bit signed
+-- scaled format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit B component in byte 2.
+pattern VK_FORMAT_R8G8B8_SSCALED :: VkFormat
+pattern VK_FORMAT_R8G8B8_SSCALED = VkFormat 26
+
+-- | @VK_FORMAT_R8G8B8_UINT@ specifies a three-component, 24-bit unsigned
+-- integer format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit B component in byte 2.
+pattern VK_FORMAT_R8G8B8_UINT :: VkFormat
+pattern VK_FORMAT_R8G8B8_UINT = VkFormat 27
+
+-- | @VK_FORMAT_R8G8B8_SINT@ specifies a three-component, 24-bit signed
+-- integer format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit B component in byte 2.
+pattern VK_FORMAT_R8G8B8_SINT :: VkFormat
+pattern VK_FORMAT_R8G8B8_SINT = VkFormat 28
+
+-- | @VK_FORMAT_R8G8B8_SRGB@ specifies a three-component, 24-bit unsigned
+-- normalized format that has an 8-bit R component stored with sRGB
+-- nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+-- nonlinear encoding in byte 1, and an 8-bit B component stored with sRGB
+-- nonlinear encoding in byte 2.
+pattern VK_FORMAT_R8G8B8_SRGB :: VkFormat
+pattern VK_FORMAT_R8G8B8_SRGB = VkFormat 29
+
+-- | @VK_FORMAT_B8G8R8_UNORM@ specifies a three-component, 24-bit unsigned
+-- normalized format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit R component in byte 2.
+pattern VK_FORMAT_B8G8R8_UNORM :: VkFormat
+pattern VK_FORMAT_B8G8R8_UNORM = VkFormat 30
+
+-- | @VK_FORMAT_B8G8R8_SNORM@ specifies a three-component, 24-bit signed
+-- normalized format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit R component in byte 2.
+pattern VK_FORMAT_B8G8R8_SNORM :: VkFormat
+pattern VK_FORMAT_B8G8R8_SNORM = VkFormat 31
+
+-- | @VK_FORMAT_B8G8R8_USCALED@ specifies a three-component, 24-bit unsigned
+-- scaled format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit R component in byte 2.
+pattern VK_FORMAT_B8G8R8_USCALED :: VkFormat
+pattern VK_FORMAT_B8G8R8_USCALED = VkFormat 32
+
+-- | @VK_FORMAT_B8G8R8_SSCALED@ specifies a three-component, 24-bit signed
+-- scaled format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit R component in byte 2.
+pattern VK_FORMAT_B8G8R8_SSCALED :: VkFormat
+pattern VK_FORMAT_B8G8R8_SSCALED = VkFormat 33
+
+-- | @VK_FORMAT_B8G8R8_UINT@ specifies a three-component, 24-bit unsigned
+-- integer format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit R component in byte 2.
+pattern VK_FORMAT_B8G8R8_UINT :: VkFormat
+pattern VK_FORMAT_B8G8R8_UINT = VkFormat 34
+
+-- | @VK_FORMAT_B8G8R8_SINT@ specifies a three-component, 24-bit signed
+-- integer format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, and an 8-bit R component in byte 2.
+pattern VK_FORMAT_B8G8R8_SINT :: VkFormat
+pattern VK_FORMAT_B8G8R8_SINT = VkFormat 35
+
+-- | @VK_FORMAT_B8G8R8_SRGB@ specifies a three-component, 24-bit unsigned
+-- normalized format that has an 8-bit B component stored with sRGB
+-- nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+-- nonlinear encoding in byte 1, and an 8-bit R component stored with sRGB
+-- nonlinear encoding in byte 2.
+pattern VK_FORMAT_B8G8R8_SRGB :: VkFormat
+pattern VK_FORMAT_B8G8R8_SRGB = VkFormat 36
+
+-- | @VK_FORMAT_R8G8B8A8_UNORM@ specifies a four-component, 32-bit unsigned
+-- normalized format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_R8G8B8A8_UNORM :: VkFormat
+pattern VK_FORMAT_R8G8B8A8_UNORM = VkFormat 37
+
+-- | @VK_FORMAT_R8G8B8A8_SNORM@ specifies a four-component, 32-bit signed
+-- normalized format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_R8G8B8A8_SNORM :: VkFormat
+pattern VK_FORMAT_R8G8B8A8_SNORM = VkFormat 38
+
+-- | @VK_FORMAT_R8G8B8A8_USCALED@ specifies a four-component, 32-bit unsigned
+-- scaled format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_R8G8B8A8_USCALED :: VkFormat
+pattern VK_FORMAT_R8G8B8A8_USCALED = VkFormat 39
+
+-- | @VK_FORMAT_R8G8B8A8_SSCALED@ specifies a four-component, 32-bit signed
+-- scaled format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_R8G8B8A8_SSCALED :: VkFormat
+pattern VK_FORMAT_R8G8B8A8_SSCALED = VkFormat 40
+
+-- | @VK_FORMAT_R8G8B8A8_UINT@ specifies a four-component, 32-bit unsigned
+-- integer format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_R8G8B8A8_UINT :: VkFormat
+pattern VK_FORMAT_R8G8B8A8_UINT = VkFormat 41
+
+-- | @VK_FORMAT_R8G8B8A8_SINT@ specifies a four-component, 32-bit signed
+-- integer format that has an 8-bit R component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit B component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_R8G8B8A8_SINT :: VkFormat
+pattern VK_FORMAT_R8G8B8A8_SINT = VkFormat 42
+
+-- | @VK_FORMAT_R8G8B8A8_SRGB@ specifies a four-component, 32-bit unsigned
+-- normalized format that has an 8-bit R component stored with sRGB
+-- nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+-- nonlinear encoding in byte 1, an 8-bit B component stored with sRGB
+-- nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
+pattern VK_FORMAT_R8G8B8A8_SRGB :: VkFormat
+pattern VK_FORMAT_R8G8B8A8_SRGB = VkFormat 43
+
+-- | @VK_FORMAT_B8G8R8A8_UNORM@ specifies a four-component, 32-bit unsigned
+-- normalized format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_B8G8R8A8_UNORM :: VkFormat
+pattern VK_FORMAT_B8G8R8A8_UNORM = VkFormat 44
+
+-- | @VK_FORMAT_B8G8R8A8_SNORM@ specifies a four-component, 32-bit signed
+-- normalized format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_B8G8R8A8_SNORM :: VkFormat
+pattern VK_FORMAT_B8G8R8A8_SNORM = VkFormat 45
+
+-- | @VK_FORMAT_B8G8R8A8_USCALED@ specifies a four-component, 32-bit unsigned
+-- scaled format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_B8G8R8A8_USCALED :: VkFormat
+pattern VK_FORMAT_B8G8R8A8_USCALED = VkFormat 46
+
+-- | @VK_FORMAT_B8G8R8A8_SSCALED@ specifies a four-component, 32-bit signed
+-- scaled format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_B8G8R8A8_SSCALED :: VkFormat
+pattern VK_FORMAT_B8G8R8A8_SSCALED = VkFormat 47
+
+-- | @VK_FORMAT_B8G8R8A8_UINT@ specifies a four-component, 32-bit unsigned
+-- integer format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_B8G8R8A8_UINT :: VkFormat
+pattern VK_FORMAT_B8G8R8A8_UINT = VkFormat 48
+
+-- | @VK_FORMAT_B8G8R8A8_SINT@ specifies a four-component, 32-bit signed
+-- integer format that has an 8-bit B component in byte 0, an 8-bit G
+-- component in byte 1, an 8-bit R component in byte 2, and an 8-bit A
+-- component in byte 3.
+pattern VK_FORMAT_B8G8R8A8_SINT :: VkFormat
+pattern VK_FORMAT_B8G8R8A8_SINT = VkFormat 49
+
+-- | @VK_FORMAT_B8G8R8A8_SRGB@ specifies a four-component, 32-bit unsigned
+-- normalized format that has an 8-bit B component stored with sRGB
+-- nonlinear encoding in byte 0, an 8-bit G component stored with sRGB
+-- nonlinear encoding in byte 1, an 8-bit R component stored with sRGB
+-- nonlinear encoding in byte 2, and an 8-bit A component in byte 3.
+pattern VK_FORMAT_B8G8R8A8_SRGB :: VkFormat
+pattern VK_FORMAT_B8G8R8A8_SRGB = VkFormat 50
+
+-- | @VK_FORMAT_A8B8G8R8_UNORM_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned normalized format that has an 8-bit A component in bits
+-- 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+-- bits 8..15, and an 8-bit R component in bits 0..7.
+pattern VK_FORMAT_A8B8G8R8_UNORM_PACK32 :: VkFormat
+pattern VK_FORMAT_A8B8G8R8_UNORM_PACK32 = VkFormat 51
+
+-- | @VK_FORMAT_A8B8G8R8_SNORM_PACK32@ specifies a four-component, 32-bit
+-- packed signed normalized format that has an 8-bit A component in bits
+-- 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+-- bits 8..15, and an 8-bit R component in bits 0..7.
+pattern VK_FORMAT_A8B8G8R8_SNORM_PACK32 :: VkFormat
+pattern VK_FORMAT_A8B8G8R8_SNORM_PACK32 = VkFormat 52
+
+-- | @VK_FORMAT_A8B8G8R8_USCALED_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned scaled integer format that has an 8-bit A component in
+-- bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G component
+-- in bits 8..15, and an 8-bit R component in bits 0..7.
+pattern VK_FORMAT_A8B8G8R8_USCALED_PACK32 :: VkFormat
+pattern VK_FORMAT_A8B8G8R8_USCALED_PACK32 = VkFormat 53
+
+-- | @VK_FORMAT_A8B8G8R8_SSCALED_PACK32@ specifies a four-component, 32-bit
+-- packed signed scaled integer format that has an 8-bit A component in
+-- bits 24..31, an 8-bit B component in bits 16..23, an 8-bit G component
+-- in bits 8..15, and an 8-bit R component in bits 0..7.
+pattern VK_FORMAT_A8B8G8R8_SSCALED_PACK32 :: VkFormat
+pattern VK_FORMAT_A8B8G8R8_SSCALED_PACK32 = VkFormat 54
+
+-- | @VK_FORMAT_A8B8G8R8_UINT_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned integer format that has an 8-bit A component in bits
+-- 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+-- bits 8..15, and an 8-bit R component in bits 0..7.
+pattern VK_FORMAT_A8B8G8R8_UINT_PACK32 :: VkFormat
+pattern VK_FORMAT_A8B8G8R8_UINT_PACK32 = VkFormat 55
+
+-- | @VK_FORMAT_A8B8G8R8_SINT_PACK32@ specifies a four-component, 32-bit
+-- packed signed integer format that has an 8-bit A component in bits
+-- 24..31, an 8-bit B component in bits 16..23, an 8-bit G component in
+-- bits 8..15, and an 8-bit R component in bits 0..7.
+pattern VK_FORMAT_A8B8G8R8_SINT_PACK32 :: VkFormat
+pattern VK_FORMAT_A8B8G8R8_SINT_PACK32 = VkFormat 56
+
+-- | @VK_FORMAT_A8B8G8R8_SRGB_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned normalized format that has an 8-bit A component in bits
+-- 24..31, an 8-bit B component stored with sRGB nonlinear encoding in bits
+-- 16..23, an 8-bit G component stored with sRGB nonlinear encoding in bits
+-- 8..15, and an 8-bit R component stored with sRGB nonlinear encoding in
+-- bits 0..7.
+pattern VK_FORMAT_A8B8G8R8_SRGB_PACK32 :: VkFormat
+pattern VK_FORMAT_A8B8G8R8_SRGB_PACK32 = VkFormat 57
+
+-- | @VK_FORMAT_A2R10G10B10_UNORM_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned normalized format that has a 2-bit A component in bits
+-- 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit B component in bits 0..9.
+pattern VK_FORMAT_A2R10G10B10_UNORM_PACK32 :: VkFormat
+pattern VK_FORMAT_A2R10G10B10_UNORM_PACK32 = VkFormat 58
+
+-- | @VK_FORMAT_A2R10G10B10_SNORM_PACK32@ specifies a four-component, 32-bit
+-- packed signed normalized format that has a 2-bit A component in bits
+-- 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit B component in bits 0..9.
+pattern VK_FORMAT_A2R10G10B10_SNORM_PACK32 :: VkFormat
+pattern VK_FORMAT_A2R10G10B10_SNORM_PACK32 = VkFormat 59
+
+-- | @VK_FORMAT_A2R10G10B10_USCALED_PACK32@ specifies a four-component,
+-- 32-bit packed unsigned scaled integer format that has a 2-bit A
+-- component in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit
+-- G component in bits 10..19, and a 10-bit B component in bits 0..9.
+pattern VK_FORMAT_A2R10G10B10_USCALED_PACK32 :: VkFormat
+pattern VK_FORMAT_A2R10G10B10_USCALED_PACK32 = VkFormat 60
+
+-- | @VK_FORMAT_A2R10G10B10_SSCALED_PACK32@ specifies a four-component,
+-- 32-bit packed signed scaled integer format that has a 2-bit A component
+-- in bits 30..31, a 10-bit R component in bits 20..29, a 10-bit G
+-- component in bits 10..19, and a 10-bit B component in bits 0..9.
+pattern VK_FORMAT_A2R10G10B10_SSCALED_PACK32 :: VkFormat
+pattern VK_FORMAT_A2R10G10B10_SSCALED_PACK32 = VkFormat 61
+
+-- | @VK_FORMAT_A2R10G10B10_UINT_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned integer format that has a 2-bit A component in bits
+-- 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit B component in bits 0..9.
+pattern VK_FORMAT_A2R10G10B10_UINT_PACK32 :: VkFormat
+pattern VK_FORMAT_A2R10G10B10_UINT_PACK32 = VkFormat 62
+
+-- | @VK_FORMAT_A2R10G10B10_SINT_PACK32@ specifies a four-component, 32-bit
+-- packed signed integer format that has a 2-bit A component in bits
+-- 30..31, a 10-bit R component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit B component in bits 0..9.
+pattern VK_FORMAT_A2R10G10B10_SINT_PACK32 :: VkFormat
+pattern VK_FORMAT_A2R10G10B10_SINT_PACK32 = VkFormat 63
+
+-- | @VK_FORMAT_A2B10G10R10_UNORM_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned normalized format that has a 2-bit A component in bits
+-- 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit R component in bits 0..9.
+pattern VK_FORMAT_A2B10G10R10_UNORM_PACK32 :: VkFormat
+pattern VK_FORMAT_A2B10G10R10_UNORM_PACK32 = VkFormat 64
+
+-- | @VK_FORMAT_A2B10G10R10_SNORM_PACK32@ specifies a four-component, 32-bit
+-- packed signed normalized format that has a 2-bit A component in bits
+-- 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit R component in bits 0..9.
+pattern VK_FORMAT_A2B10G10R10_SNORM_PACK32 :: VkFormat
+pattern VK_FORMAT_A2B10G10R10_SNORM_PACK32 = VkFormat 65
+
+-- | @VK_FORMAT_A2B10G10R10_USCALED_PACK32@ specifies a four-component,
+-- 32-bit packed unsigned scaled integer format that has a 2-bit A
+-- component in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit
+-- G component in bits 10..19, and a 10-bit R component in bits 0..9.
+pattern VK_FORMAT_A2B10G10R10_USCALED_PACK32 :: VkFormat
+pattern VK_FORMAT_A2B10G10R10_USCALED_PACK32 = VkFormat 66
+
+-- | @VK_FORMAT_A2B10G10R10_SSCALED_PACK32@ specifies a four-component,
+-- 32-bit packed signed scaled integer format that has a 2-bit A component
+-- in bits 30..31, a 10-bit B component in bits 20..29, a 10-bit G
+-- component in bits 10..19, and a 10-bit R component in bits 0..9.
+pattern VK_FORMAT_A2B10G10R10_SSCALED_PACK32 :: VkFormat
+pattern VK_FORMAT_A2B10G10R10_SSCALED_PACK32 = VkFormat 67
+
+-- | @VK_FORMAT_A2B10G10R10_UINT_PACK32@ specifies a four-component, 32-bit
+-- packed unsigned integer format that has a 2-bit A component in bits
+-- 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit R component in bits 0..9.
+pattern VK_FORMAT_A2B10G10R10_UINT_PACK32 :: VkFormat
+pattern VK_FORMAT_A2B10G10R10_UINT_PACK32 = VkFormat 68
+
+-- | @VK_FORMAT_A2B10G10R10_SINT_PACK32@ specifies a four-component, 32-bit
+-- packed signed integer format that has a 2-bit A component in bits
+-- 30..31, a 10-bit B component in bits 20..29, a 10-bit G component in
+-- bits 10..19, and a 10-bit R component in bits 0..9.
+pattern VK_FORMAT_A2B10G10R10_SINT_PACK32 :: VkFormat
+pattern VK_FORMAT_A2B10G10R10_SINT_PACK32 = VkFormat 69
+
+-- | @VK_FORMAT_R16_UNORM@ specifies a one-component, 16-bit unsigned
+-- normalized format that has a single 16-bit R component.
+pattern VK_FORMAT_R16_UNORM :: VkFormat
+pattern VK_FORMAT_R16_UNORM = VkFormat 70
+
+-- | @VK_FORMAT_R16_SNORM@ specifies a one-component, 16-bit signed
+-- normalized format that has a single 16-bit R component.
+pattern VK_FORMAT_R16_SNORM :: VkFormat
+pattern VK_FORMAT_R16_SNORM = VkFormat 71
+
+-- | @VK_FORMAT_R16_USCALED@ specifies a one-component, 16-bit unsigned
+-- scaled integer format that has a single 16-bit R component.
+pattern VK_FORMAT_R16_USCALED :: VkFormat
+pattern VK_FORMAT_R16_USCALED = VkFormat 72
+
+-- | @VK_FORMAT_R16_SSCALED@ specifies a one-component, 16-bit signed scaled
+-- integer format that has a single 16-bit R component.
+pattern VK_FORMAT_R16_SSCALED :: VkFormat
+pattern VK_FORMAT_R16_SSCALED = VkFormat 73
+
+-- | @VK_FORMAT_R16_UINT@ specifies a one-component, 16-bit unsigned integer
+-- format that has a single 16-bit R component.
+pattern VK_FORMAT_R16_UINT :: VkFormat
+pattern VK_FORMAT_R16_UINT = VkFormat 74
+
+-- | @VK_FORMAT_R16_SINT@ specifies a one-component, 16-bit signed integer
+-- format that has a single 16-bit R component.
+pattern VK_FORMAT_R16_SINT :: VkFormat
+pattern VK_FORMAT_R16_SINT = VkFormat 75
+
+-- | @VK_FORMAT_R16_SFLOAT@ specifies a one-component, 16-bit signed
+-- floating-point format that has a single 16-bit R component.
+pattern VK_FORMAT_R16_SFLOAT :: VkFormat
+pattern VK_FORMAT_R16_SFLOAT = VkFormat 76
+
+-- | @VK_FORMAT_R16G16_UNORM@ specifies a two-component, 32-bit unsigned
+-- normalized format that has a 16-bit R component in bytes 0..1, and a
+-- 16-bit G component in bytes 2..3.
+pattern VK_FORMAT_R16G16_UNORM :: VkFormat
+pattern VK_FORMAT_R16G16_UNORM = VkFormat 77
+
+-- | @VK_FORMAT_R16G16_SNORM@ specifies a two-component, 32-bit signed
+-- normalized format that has a 16-bit R component in bytes 0..1, and a
+-- 16-bit G component in bytes 2..3.
+pattern VK_FORMAT_R16G16_SNORM :: VkFormat
+pattern VK_FORMAT_R16G16_SNORM = VkFormat 78
+
+-- | @VK_FORMAT_R16G16_USCALED@ specifies a two-component, 32-bit unsigned
+-- scaled integer format that has a 16-bit R component in bytes 0..1, and a
+-- 16-bit G component in bytes 2..3.
+pattern VK_FORMAT_R16G16_USCALED :: VkFormat
+pattern VK_FORMAT_R16G16_USCALED = VkFormat 79
+
+-- | @VK_FORMAT_R16G16_SSCALED@ specifies a two-component, 32-bit signed
+-- scaled integer format that has a 16-bit R component in bytes 0..1, and a
+-- 16-bit G component in bytes 2..3.
+pattern VK_FORMAT_R16G16_SSCALED :: VkFormat
+pattern VK_FORMAT_R16G16_SSCALED = VkFormat 80
+
+-- | @VK_FORMAT_R16G16_UINT@ specifies a two-component, 32-bit unsigned
+-- integer format that has a 16-bit R component in bytes 0..1, and a 16-bit
+-- G component in bytes 2..3.
+pattern VK_FORMAT_R16G16_UINT :: VkFormat
+pattern VK_FORMAT_R16G16_UINT = VkFormat 81
+
+-- | @VK_FORMAT_R16G16_SINT@ specifies a two-component, 32-bit signed integer
+-- format that has a 16-bit R component in bytes 0..1, and a 16-bit G
+-- component in bytes 2..3.
+pattern VK_FORMAT_R16G16_SINT :: VkFormat
+pattern VK_FORMAT_R16G16_SINT = VkFormat 82
+
+-- | @VK_FORMAT_R16G16_SFLOAT@ specifies a two-component, 32-bit signed
+-- floating-point format that has a 16-bit R component in bytes 0..1, and a
+-- 16-bit G component in bytes 2..3.
+pattern VK_FORMAT_R16G16_SFLOAT :: VkFormat
+pattern VK_FORMAT_R16G16_SFLOAT = VkFormat 83
+
+-- | @VK_FORMAT_R16G16B16_UNORM@ specifies a three-component, 48-bit unsigned
+-- normalized format that has a 16-bit R component in bytes 0..1, a 16-bit
+-- G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
+pattern VK_FORMAT_R16G16B16_UNORM :: VkFormat
+pattern VK_FORMAT_R16G16B16_UNORM = VkFormat 84
+
+-- | @VK_FORMAT_R16G16B16_SNORM@ specifies a three-component, 48-bit signed
+-- normalized format that has a 16-bit R component in bytes 0..1, a 16-bit
+-- G component in bytes 2..3, and a 16-bit B component in bytes 4..5.
+pattern VK_FORMAT_R16G16B16_SNORM :: VkFormat
+pattern VK_FORMAT_R16G16B16_SNORM = VkFormat 85
+
+-- | @VK_FORMAT_R16G16B16_USCALED@ specifies a three-component, 48-bit
+-- unsigned scaled integer format that has a 16-bit R component in bytes
+-- 0..1, a 16-bit G component in bytes 2..3, and a 16-bit B component in
+-- bytes 4..5.
+pattern VK_FORMAT_R16G16B16_USCALED :: VkFormat
+pattern VK_FORMAT_R16G16B16_USCALED = VkFormat 86
+
+-- | @VK_FORMAT_R16G16B16_SSCALED@ specifies a three-component, 48-bit signed
+-- scaled integer format that has a 16-bit R component in bytes 0..1, a
+-- 16-bit G component in bytes 2..3, and a 16-bit B component in bytes
+-- 4..5.
+pattern VK_FORMAT_R16G16B16_SSCALED :: VkFormat
+pattern VK_FORMAT_R16G16B16_SSCALED = VkFormat 87
+
+-- | @VK_FORMAT_R16G16B16_UINT@ specifies a three-component, 48-bit unsigned
+-- integer format that has a 16-bit R component in bytes 0..1, a 16-bit G
+-- component in bytes 2..3, and a 16-bit B component in bytes 4..5.
+pattern VK_FORMAT_R16G16B16_UINT :: VkFormat
+pattern VK_FORMAT_R16G16B16_UINT = VkFormat 88
+
+-- | @VK_FORMAT_R16G16B16_SINT@ specifies a three-component, 48-bit signed
+-- integer format that has a 16-bit R component in bytes 0..1, a 16-bit G
+-- component in bytes 2..3, and a 16-bit B component in bytes 4..5.
+pattern VK_FORMAT_R16G16B16_SINT :: VkFormat
+pattern VK_FORMAT_R16G16B16_SINT = VkFormat 89
+
+-- | @VK_FORMAT_R16G16B16_SFLOAT@ specifies a three-component, 48-bit signed
+-- floating-point format that has a 16-bit R component in bytes 0..1, a
+-- 16-bit G component in bytes 2..3, and a 16-bit B component in bytes
+-- 4..5.
+pattern VK_FORMAT_R16G16B16_SFLOAT :: VkFormat
+pattern VK_FORMAT_R16G16B16_SFLOAT = VkFormat 90
+
+-- | @VK_FORMAT_R16G16B16A16_UNORM@ specifies a four-component, 64-bit
+-- unsigned normalized format that has a 16-bit R component in bytes 0..1,
+-- a 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
+-- and a 16-bit A component in bytes 6..7.
+pattern VK_FORMAT_R16G16B16A16_UNORM :: VkFormat
+pattern VK_FORMAT_R16G16B16A16_UNORM = VkFormat 91
+
+-- | @VK_FORMAT_R16G16B16A16_SNORM@ specifies a four-component, 64-bit signed
+-- normalized format that has a 16-bit R component in bytes 0..1, a 16-bit
+-- G component in bytes 2..3, a 16-bit B component in bytes 4..5, and a
+-- 16-bit A component in bytes 6..7.
+pattern VK_FORMAT_R16G16B16A16_SNORM :: VkFormat
+pattern VK_FORMAT_R16G16B16A16_SNORM = VkFormat 92
+
+-- | @VK_FORMAT_R16G16B16A16_USCALED@ specifies a four-component, 64-bit
+-- unsigned scaled integer format that has a 16-bit R component in bytes
+-- 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
+-- 4..5, and a 16-bit A component in bytes 6..7.
+pattern VK_FORMAT_R16G16B16A16_USCALED :: VkFormat
+pattern VK_FORMAT_R16G16B16A16_USCALED = VkFormat 93
+
+-- | @VK_FORMAT_R16G16B16A16_SSCALED@ specifies a four-component, 64-bit
+-- signed scaled integer format that has a 16-bit R component in bytes
+-- 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
+-- 4..5, and a 16-bit A component in bytes 6..7.
+pattern VK_FORMAT_R16G16B16A16_SSCALED :: VkFormat
+pattern VK_FORMAT_R16G16B16A16_SSCALED = VkFormat 94
+
+-- | @VK_FORMAT_R16G16B16A16_UINT@ specifies a four-component, 64-bit
+-- unsigned integer format that has a 16-bit R component in bytes 0..1, a
+-- 16-bit G component in bytes 2..3, a 16-bit B component in bytes 4..5,
+-- and a 16-bit A component in bytes 6..7.
+pattern VK_FORMAT_R16G16B16A16_UINT :: VkFormat
+pattern VK_FORMAT_R16G16B16A16_UINT = VkFormat 95
+
+-- | @VK_FORMAT_R16G16B16A16_SINT@ specifies a four-component, 64-bit signed
+-- integer format that has a 16-bit R component in bytes 0..1, a 16-bit G
+-- component in bytes 2..3, a 16-bit B component in bytes 4..5, and a
+-- 16-bit A component in bytes 6..7.
+pattern VK_FORMAT_R16G16B16A16_SINT :: VkFormat
+pattern VK_FORMAT_R16G16B16A16_SINT = VkFormat 96
+
+-- | @VK_FORMAT_R16G16B16A16_SFLOAT@ specifies a four-component, 64-bit
+-- signed floating-point format that has a 16-bit R component in bytes
+-- 0..1, a 16-bit G component in bytes 2..3, a 16-bit B component in bytes
+-- 4..5, and a 16-bit A component in bytes 6..7.
+pattern VK_FORMAT_R16G16B16A16_SFLOAT :: VkFormat
+pattern VK_FORMAT_R16G16B16A16_SFLOAT = VkFormat 97
+
+-- | @VK_FORMAT_R32_UINT@ specifies a one-component, 32-bit unsigned integer
+-- format that has a single 32-bit R component.
+pattern VK_FORMAT_R32_UINT :: VkFormat
+pattern VK_FORMAT_R32_UINT = VkFormat 98
+
+-- | @VK_FORMAT_R32_SINT@ specifies a one-component, 32-bit signed integer
+-- format that has a single 32-bit R component.
+pattern VK_FORMAT_R32_SINT :: VkFormat
+pattern VK_FORMAT_R32_SINT = VkFormat 99
+
+-- | @VK_FORMAT_R32_SFLOAT@ specifies a one-component, 32-bit signed
+-- floating-point format that has a single 32-bit R component.
+pattern VK_FORMAT_R32_SFLOAT :: VkFormat
+pattern VK_FORMAT_R32_SFLOAT = VkFormat 100
+
+-- | @VK_FORMAT_R32G32_UINT@ specifies a two-component, 64-bit unsigned
+-- integer format that has a 32-bit R component in bytes 0..3, and a 32-bit
+-- G component in bytes 4..7.
+pattern VK_FORMAT_R32G32_UINT :: VkFormat
+pattern VK_FORMAT_R32G32_UINT = VkFormat 101
+
+-- | @VK_FORMAT_R32G32_SINT@ specifies a two-component, 64-bit signed integer
+-- format that has a 32-bit R component in bytes 0..3, and a 32-bit G
+-- component in bytes 4..7.
+pattern VK_FORMAT_R32G32_SINT :: VkFormat
+pattern VK_FORMAT_R32G32_SINT = VkFormat 102
+
+-- | @VK_FORMAT_R32G32_SFLOAT@ specifies a two-component, 64-bit signed
+-- floating-point format that has a 32-bit R component in bytes 0..3, and a
+-- 32-bit G component in bytes 4..7.
+pattern VK_FORMAT_R32G32_SFLOAT :: VkFormat
+pattern VK_FORMAT_R32G32_SFLOAT = VkFormat 103
+
+-- | @VK_FORMAT_R32G32B32_UINT@ specifies a three-component, 96-bit unsigned
+-- integer format that has a 32-bit R component in bytes 0..3, a 32-bit G
+-- component in bytes 4..7, and a 32-bit B component in bytes 8..11.
+pattern VK_FORMAT_R32G32B32_UINT :: VkFormat
+pattern VK_FORMAT_R32G32B32_UINT = VkFormat 104
+
+-- | @VK_FORMAT_R32G32B32_SINT@ specifies a three-component, 96-bit signed
+-- integer format that has a 32-bit R component in bytes 0..3, a 32-bit G
+-- component in bytes 4..7, and a 32-bit B component in bytes 8..11.
+pattern VK_FORMAT_R32G32B32_SINT :: VkFormat
+pattern VK_FORMAT_R32G32B32_SINT = VkFormat 105
+
+-- | @VK_FORMAT_R32G32B32_SFLOAT@ specifies a three-component, 96-bit signed
+-- floating-point format that has a 32-bit R component in bytes 0..3, a
+-- 32-bit G component in bytes 4..7, and a 32-bit B component in bytes
+-- 8..11.
+pattern VK_FORMAT_R32G32B32_SFLOAT :: VkFormat
+pattern VK_FORMAT_R32G32B32_SFLOAT = VkFormat 106
+
+-- | @VK_FORMAT_R32G32B32A32_UINT@ specifies a four-component, 128-bit
+-- unsigned integer format that has a 32-bit R component in bytes 0..3, a
+-- 32-bit G component in bytes 4..7, a 32-bit B component in bytes 8..11,
+-- and a 32-bit A component in bytes 12..15.
+pattern VK_FORMAT_R32G32B32A32_UINT :: VkFormat
+pattern VK_FORMAT_R32G32B32A32_UINT = VkFormat 107
+
+-- | @VK_FORMAT_R32G32B32A32_SINT@ specifies a four-component, 128-bit signed
+-- integer format that has a 32-bit R component in bytes 0..3, a 32-bit G
+-- component in bytes 4..7, a 32-bit B component in bytes 8..11, and a
+-- 32-bit A component in bytes 12..15.
+pattern VK_FORMAT_R32G32B32A32_SINT :: VkFormat
+pattern VK_FORMAT_R32G32B32A32_SINT = VkFormat 108
+
+-- | @VK_FORMAT_R32G32B32A32_SFLOAT@ specifies a four-component, 128-bit
+-- signed floating-point format that has a 32-bit R component in bytes
+-- 0..3, a 32-bit G component in bytes 4..7, a 32-bit B component in bytes
+-- 8..11, and a 32-bit A component in bytes 12..15.
+pattern VK_FORMAT_R32G32B32A32_SFLOAT :: VkFormat
+pattern VK_FORMAT_R32G32B32A32_SFLOAT = VkFormat 109
+
+-- | @VK_FORMAT_R64_UINT@ specifies a one-component, 64-bit unsigned integer
+-- format that has a single 64-bit R component.
+pattern VK_FORMAT_R64_UINT :: VkFormat
+pattern VK_FORMAT_R64_UINT = VkFormat 110
+
+-- | @VK_FORMAT_R64_SINT@ specifies a one-component, 64-bit signed integer
+-- format that has a single 64-bit R component.
+pattern VK_FORMAT_R64_SINT :: VkFormat
+pattern VK_FORMAT_R64_SINT = VkFormat 111
+
+-- | @VK_FORMAT_R64_SFLOAT@ specifies a one-component, 64-bit signed
+-- floating-point format that has a single 64-bit R component.
+pattern VK_FORMAT_R64_SFLOAT :: VkFormat
+pattern VK_FORMAT_R64_SFLOAT = VkFormat 112
+
+-- | @VK_FORMAT_R64G64_UINT@ specifies a two-component, 128-bit unsigned
+-- integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
+-- G component in bytes 8..15.
+pattern VK_FORMAT_R64G64_UINT :: VkFormat
+pattern VK_FORMAT_R64G64_UINT = VkFormat 113
+
+-- | @VK_FORMAT_R64G64_SINT@ specifies a two-component, 128-bit signed
+-- integer format that has a 64-bit R component in bytes 0..7, and a 64-bit
+-- G component in bytes 8..15.
+pattern VK_FORMAT_R64G64_SINT :: VkFormat
+pattern VK_FORMAT_R64G64_SINT = VkFormat 114
+
+-- | @VK_FORMAT_R64G64_SFLOAT@ specifies a two-component, 128-bit signed
+-- floating-point format that has a 64-bit R component in bytes 0..7, and a
+-- 64-bit G component in bytes 8..15.
+pattern VK_FORMAT_R64G64_SFLOAT :: VkFormat
+pattern VK_FORMAT_R64G64_SFLOAT = VkFormat 115
+
+-- | @VK_FORMAT_R64G64B64_UINT@ specifies a three-component, 192-bit unsigned
+-- integer format that has a 64-bit R component in bytes 0..7, a 64-bit G
+-- component in bytes 8..15, and a 64-bit B component in bytes 16..23.
+pattern VK_FORMAT_R64G64B64_UINT :: VkFormat
+pattern VK_FORMAT_R64G64B64_UINT = VkFormat 116
+
+-- | @VK_FORMAT_R64G64B64_SINT@ specifies a three-component, 192-bit signed
+-- integer format that has a 64-bit R component in bytes 0..7, a 64-bit G
+-- component in bytes 8..15, and a 64-bit B component in bytes 16..23.
+pattern VK_FORMAT_R64G64B64_SINT :: VkFormat
+pattern VK_FORMAT_R64G64B64_SINT = VkFormat 117
+
+-- | @VK_FORMAT_R64G64B64_SFLOAT@ specifies a three-component, 192-bit signed
+-- floating-point format that has a 64-bit R component in bytes 0..7, a
+-- 64-bit G component in bytes 8..15, and a 64-bit B component in bytes
+-- 16..23.
+pattern VK_FORMAT_R64G64B64_SFLOAT :: VkFormat
+pattern VK_FORMAT_R64G64B64_SFLOAT = VkFormat 118
+
+-- | @VK_FORMAT_R64G64B64A64_UINT@ specifies a four-component, 256-bit
+-- unsigned integer format that has a 64-bit R component in bytes 0..7, a
+-- 64-bit G component in bytes 8..15, a 64-bit B component in bytes 16..23,
+-- and a 64-bit A component in bytes 24..31.
+pattern VK_FORMAT_R64G64B64A64_UINT :: VkFormat
+pattern VK_FORMAT_R64G64B64A64_UINT = VkFormat 119
+
+-- | @VK_FORMAT_R64G64B64A64_SINT@ specifies a four-component, 256-bit signed
+-- integer format that has a 64-bit R component in bytes 0..7, a 64-bit G
+-- component in bytes 8..15, a 64-bit B component in bytes 16..23, and a
+-- 64-bit A component in bytes 24..31.
+pattern VK_FORMAT_R64G64B64A64_SINT :: VkFormat
+pattern VK_FORMAT_R64G64B64A64_SINT = VkFormat 120
+
+-- | @VK_FORMAT_R64G64B64A64_SFLOAT@ specifies a four-component, 256-bit
+-- signed floating-point format that has a 64-bit R component in bytes
+-- 0..7, a 64-bit G component in bytes 8..15, a 64-bit B component in bytes
+-- 16..23, and a 64-bit A component in bytes 24..31.
+pattern VK_FORMAT_R64G64B64A64_SFLOAT :: VkFormat
+pattern VK_FORMAT_R64G64B64A64_SFLOAT = VkFormat 121
+
+-- | @VK_FORMAT_B10G11R11_UFLOAT_PACK32@ specifies a three-component, 32-bit
+-- 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>
+-- and
+-- <{html_spec_relative}#fundamentals-fp11 {html_spec_relative}#fundamentals-fp11>.
+pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32 :: VkFormat
+pattern VK_FORMAT_B10G11R11_UFLOAT_PACK32 = VkFormat 122
+
+-- | @VK_FORMAT_E5B9G9R9_UFLOAT_PACK32@ specifies a three-component, 32-bit
+-- packed unsigned floating-point format that has a 5-bit shared exponent
+-- in bits 27..31, a 9-bit B component mantissa in bits 18..26, a 9-bit G
+-- component mantissa in bits 9..17, and a 9-bit R component mantissa in
+-- bits 0..8.
+pattern VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 :: VkFormat
+pattern VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = VkFormat 123
+
+-- | @VK_FORMAT_D16_UNORM@ specifies a one-component, 16-bit unsigned
+-- normalized format that has a single 16-bit depth component.
+pattern VK_FORMAT_D16_UNORM :: VkFormat
+pattern VK_FORMAT_D16_UNORM = VkFormat 124
+
+-- | @VK_FORMAT_X8_D24_UNORM_PACK32@ specifies a two-component, 32-bit format
+-- that has 24 unsigned normalized bits in the depth component and,
+-- optionally:, 8 bits that are unused.
+pattern VK_FORMAT_X8_D24_UNORM_PACK32 :: VkFormat
+pattern VK_FORMAT_X8_D24_UNORM_PACK32 = VkFormat 125
+
+-- | @VK_FORMAT_D32_SFLOAT@ specifies a one-component, 32-bit signed
+-- floating-point format that has 32-bits in the depth component.
+pattern VK_FORMAT_D32_SFLOAT :: VkFormat
+pattern VK_FORMAT_D32_SFLOAT = VkFormat 126
+
+-- | @VK_FORMAT_S8_UINT@ specifies a one-component, 8-bit unsigned integer
+-- format that has 8-bits in the stencil component.
+pattern VK_FORMAT_S8_UINT :: VkFormat
+pattern VK_FORMAT_S8_UINT = VkFormat 127
+
+-- | @VK_FORMAT_D16_UNORM_S8_UINT@ specifies a two-component, 24-bit format
+-- that has 16 unsigned normalized bits in the depth component and 8
+-- unsigned integer bits in the stencil component.
+pattern VK_FORMAT_D16_UNORM_S8_UINT :: VkFormat
+pattern VK_FORMAT_D16_UNORM_S8_UINT = VkFormat 128
+
+-- | @VK_FORMAT_D24_UNORM_S8_UINT@ specifies a two-component, 32-bit packed
+-- format that has 8 unsigned integer bits in the stencil component, and 24
+-- unsigned normalized bits in the depth component.
+pattern VK_FORMAT_D24_UNORM_S8_UINT :: VkFormat
+pattern VK_FORMAT_D24_UNORM_S8_UINT = VkFormat 129
+
+-- | @VK_FORMAT_D32_SFLOAT_S8_UINT@ specifies a two-component format that has
+-- 32 signed float bits in the depth component and 8 unsigned integer bits
+-- in the stencil component. There are optionally: 24-bits that are unused.
+pattern VK_FORMAT_D32_SFLOAT_S8_UINT :: VkFormat
+pattern VK_FORMAT_D32_SFLOAT_S8_UINT = VkFormat 130
+
+-- | @VK_FORMAT_BC1_RGB_UNORM_BLOCK@ specifies a three-component,
+-- block-compressed format where each 64-bit compressed texel block encodes
+-- a 4×4 rectangle of unsigned normalized RGB texel data. This format has
+-- no alpha and is considered opaque.
+pattern VK_FORMAT_BC1_RGB_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC1_RGB_UNORM_BLOCK = VkFormat 131
+
+-- | @VK_FORMAT_BC1_RGB_SRGB_BLOCK@ specifies a three-component,
+-- block-compressed format where each 64-bit compressed texel block encodes
+-- a 4×4 rectangle of unsigned normalized RGB texel data with sRGB
+-- nonlinear encoding. This format has no alpha and is considered opaque.
+pattern VK_FORMAT_BC1_RGB_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_BC1_RGB_SRGB_BLOCK = VkFormat 132
+
+-- | @VK_FORMAT_BC1_RGBA_UNORM_BLOCK@ specifies a four-component,
+-- block-compressed format where each 64-bit compressed texel block encodes
+-- a 4×4 rectangle of unsigned normalized RGB texel data, and provides 1
+-- bit of alpha.
+pattern VK_FORMAT_BC1_RGBA_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC1_RGBA_UNORM_BLOCK = VkFormat 133
+
+-- | @VK_FORMAT_BC1_RGBA_SRGB_BLOCK@ specifies a four-component,
+-- block-compressed format where each 64-bit compressed texel block encodes
+-- a 4×4 rectangle of unsigned normalized RGB texel data with sRGB
+-- nonlinear encoding, and provides 1 bit of alpha.
+pattern VK_FORMAT_BC1_RGBA_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_BC1_RGBA_SRGB_BLOCK = VkFormat 134
+
+-- | @VK_FORMAT_BC2_UNORM_BLOCK@ specifies a four-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized RGBA texel data with the first 64 bits encoding
+-- alpha values followed by 64 bits encoding RGB values.
+pattern VK_FORMAT_BC2_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC2_UNORM_BLOCK = VkFormat 135
+
+-- | @VK_FORMAT_BC2_SRGB_BLOCK@ specifies a four-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized RGBA texel data with the first 64 bits encoding
+-- alpha values followed by 64 bits encoding RGB values with sRGB nonlinear
+-- encoding.
+pattern VK_FORMAT_BC2_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_BC2_SRGB_BLOCK = VkFormat 136
+
+-- | @VK_FORMAT_BC3_UNORM_BLOCK@ specifies a four-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized RGBA texel data with the first 64 bits encoding
+-- alpha values followed by 64 bits encoding RGB values.
+pattern VK_FORMAT_BC3_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC3_UNORM_BLOCK = VkFormat 137
+
+-- | @VK_FORMAT_BC3_SRGB_BLOCK@ specifies a four-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized RGBA texel data with the first 64 bits encoding
+-- alpha values followed by 64 bits encoding RGB values with sRGB nonlinear
+-- encoding.
+pattern VK_FORMAT_BC3_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_BC3_SRGB_BLOCK = VkFormat 138
+
+-- | @VK_FORMAT_BC4_UNORM_BLOCK@ specifies a one-component, block-compressed
+-- format where each 64-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized red texel data.
+pattern VK_FORMAT_BC4_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC4_UNORM_BLOCK = VkFormat 139
+
+-- | @VK_FORMAT_BC4_SNORM_BLOCK@ specifies a one-component, block-compressed
+-- format where each 64-bit compressed texel block encodes a 4×4 rectangle
+-- of signed normalized red texel data.
+pattern VK_FORMAT_BC4_SNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC4_SNORM_BLOCK = VkFormat 140
+
+-- | @VK_FORMAT_BC5_UNORM_BLOCK@ specifies a two-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized RG texel data with the first 64 bits encoding red
+-- values followed by 64 bits encoding green values.
+pattern VK_FORMAT_BC5_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC5_UNORM_BLOCK = VkFormat 141
+
+-- | @VK_FORMAT_BC5_SNORM_BLOCK@ specifies a two-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of signed normalized RG texel data with the first 64 bits encoding red
+-- values followed by 64 bits encoding green values.
+pattern VK_FORMAT_BC5_SNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC5_SNORM_BLOCK = VkFormat 142
+
+-- | @VK_FORMAT_BC6H_UFLOAT_BLOCK@ specifies a three-component,
+-- block-compressed format where each 128-bit compressed texel block
+-- encodes a 4×4 rectangle of unsigned floating-point RGB texel data.
+pattern VK_FORMAT_BC6H_UFLOAT_BLOCK :: VkFormat
+pattern VK_FORMAT_BC6H_UFLOAT_BLOCK = VkFormat 143
+
+-- | @VK_FORMAT_BC6H_SFLOAT_BLOCK@ specifies a three-component,
+-- block-compressed format where each 128-bit compressed texel block
+-- encodes a 4×4 rectangle of signed floating-point RGB texel data.
+pattern VK_FORMAT_BC6H_SFLOAT_BLOCK :: VkFormat
+pattern VK_FORMAT_BC6H_SFLOAT_BLOCK = VkFormat 144
+
+-- | @VK_FORMAT_BC7_UNORM_BLOCK@ specifies a four-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_BC7_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_BC7_UNORM_BLOCK = VkFormat 145
+
+-- | @VK_FORMAT_BC7_SRGB_BLOCK@ specifies a four-component, block-compressed
+-- format where each 128-bit compressed texel block encodes a 4×4 rectangle
+-- of unsigned normalized RGBA texel data with sRGB nonlinear encoding
+-- applied to the RGB components.
+pattern VK_FORMAT_BC7_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_BC7_SRGB_BLOCK = VkFormat 146
+
+-- | @VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK@ specifies a three-component, ETC2
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of unsigned normalized RGB texel data. This format has no
+-- alpha and is considered opaque.
+pattern VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = VkFormat 147
+
+-- | @VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK@ specifies a three-component, ETC2
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of unsigned normalized RGB texel data with sRGB nonlinear
+-- encoding. This format has no alpha and is considered opaque.
+pattern VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = VkFormat 148
+
+-- | @VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK@ specifies a four-component, ETC2
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of unsigned normalized RGB texel data, and provides 1 bit of
+-- alpha.
+pattern VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = VkFormat 149
+
+-- | @VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK@ specifies a four-component, ETC2
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of unsigned normalized RGB texel data with sRGB nonlinear
+-- encoding, and provides 1 bit of alpha.
+pattern VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = VkFormat 150
+
+-- | @VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK@ specifies a four-component, ETC2
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 4×4 rectangle of unsigned normalized RGBA texel data with the first 64
+-- bits encoding alpha values followed by 64 bits encoding RGB values.
+pattern VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = VkFormat 151
+
+-- | @VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK@ specifies a four-component, ETC2
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 4×4 rectangle of unsigned normalized RGBA texel data with the first 64
+-- bits encoding alpha values followed by 64 bits encoding RGB values with
+-- sRGB nonlinear encoding applied.
+pattern VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = VkFormat 152
+
+-- | @VK_FORMAT_EAC_R11_UNORM_BLOCK@ specifies a one-component, ETC2
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of unsigned normalized red texel data.
+pattern VK_FORMAT_EAC_R11_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_EAC_R11_UNORM_BLOCK = VkFormat 153
+
+-- | @VK_FORMAT_EAC_R11_SNORM_BLOCK@ specifies a one-component, ETC2
+-- compressed format where each 64-bit compressed texel block encodes a 4×4
+-- rectangle of signed normalized red texel data.
+pattern VK_FORMAT_EAC_R11_SNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_EAC_R11_SNORM_BLOCK = VkFormat 154
+
+-- | @VK_FORMAT_EAC_R11G11_UNORM_BLOCK@ specifies a two-component, ETC2
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 4×4 rectangle of unsigned normalized RG texel data with the first 64
+-- bits encoding red values followed by 64 bits encoding green values.
+pattern VK_FORMAT_EAC_R11G11_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_EAC_R11G11_UNORM_BLOCK = VkFormat 155
+
+-- | @VK_FORMAT_EAC_R11G11_SNORM_BLOCK@ specifies a two-component, ETC2
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 4×4 rectangle of signed normalized RG texel data with the first 64 bits
+-- encoding red values followed by 64 bits encoding green values.
+pattern VK_FORMAT_EAC_R11G11_SNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_EAC_R11G11_SNORM_BLOCK = VkFormat 156
+
+-- | @VK_FORMAT_ASTC_4x4_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 4×4 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_4x4_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_4x4_UNORM_BLOCK = VkFormat 157
+
+-- | @VK_FORMAT_ASTC_4x4_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 4×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_4x4_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_4x4_SRGB_BLOCK = VkFormat 158
+
+-- | @VK_FORMAT_ASTC_5x4_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 5×4 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_5x4_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_5x4_UNORM_BLOCK = VkFormat 159
+
+-- | @VK_FORMAT_ASTC_5x4_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 5×4 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_5x4_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_5x4_SRGB_BLOCK = VkFormat 160
+
+-- | @VK_FORMAT_ASTC_5x5_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 5×5 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_5x5_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_5x5_UNORM_BLOCK = VkFormat 161
+
+-- | @VK_FORMAT_ASTC_5x5_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 5×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_5x5_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_5x5_SRGB_BLOCK = VkFormat 162
+
+-- | @VK_FORMAT_ASTC_6x5_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 6×5 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_6x5_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_6x5_UNORM_BLOCK = VkFormat 163
+
+-- | @VK_FORMAT_ASTC_6x5_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 6×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_6x5_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_6x5_SRGB_BLOCK = VkFormat 164
+
+-- | @VK_FORMAT_ASTC_6x6_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 6×6 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_6x6_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_6x6_UNORM_BLOCK = VkFormat 165
+
+-- | @VK_FORMAT_ASTC_6x6_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 6×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_6x6_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_6x6_SRGB_BLOCK = VkFormat 166
+
+-- | @VK_FORMAT_ASTC_8x5_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes an
+-- 8×5 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_8x5_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_8x5_UNORM_BLOCK = VkFormat 167
+
+-- | @VK_FORMAT_ASTC_8x5_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes an
+-- 8×5 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_8x5_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_8x5_SRGB_BLOCK = VkFormat 168
+
+-- | @VK_FORMAT_ASTC_8x6_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes an
+-- 8×6 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_8x6_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_8x6_UNORM_BLOCK = VkFormat 169
+
+-- | @VK_FORMAT_ASTC_8x6_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes an
+-- 8×6 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_8x6_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_8x6_SRGB_BLOCK = VkFormat 170
+
+-- | @VK_FORMAT_ASTC_8x8_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes an
+-- 8×8 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_8x8_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_8x8_UNORM_BLOCK = VkFormat 171
+
+-- | @VK_FORMAT_ASTC_8x8_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes an
+-- 8×8 rectangle of unsigned normalized RGBA texel data with sRGB nonlinear
+-- encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_8x8_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_8x8_SRGB_BLOCK = VkFormat 172
+
+-- | @VK_FORMAT_ASTC_10x5_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×5 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_10x5_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x5_UNORM_BLOCK = VkFormat 173
+
+-- | @VK_FORMAT_ASTC_10x5_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×5 rectangle of unsigned normalized RGBA texel data with sRGB
+-- nonlinear encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_10x5_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x5_SRGB_BLOCK = VkFormat 174
+
+-- | @VK_FORMAT_ASTC_10x6_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×6 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_10x6_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x6_UNORM_BLOCK = VkFormat 175
+
+-- | @VK_FORMAT_ASTC_10x6_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×6 rectangle of unsigned normalized RGBA texel data with sRGB
+-- nonlinear encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_10x6_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x6_SRGB_BLOCK = VkFormat 176
+
+-- | @VK_FORMAT_ASTC_10x8_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×8 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_10x8_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x8_UNORM_BLOCK = VkFormat 177
+
+-- | @VK_FORMAT_ASTC_10x8_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×8 rectangle of unsigned normalized RGBA texel data with sRGB
+-- nonlinear encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_10x8_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x8_SRGB_BLOCK = VkFormat 178
+
+-- | @VK_FORMAT_ASTC_10x10_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×10 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_10x10_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x10_UNORM_BLOCK = VkFormat 179
+
+-- | @VK_FORMAT_ASTC_10x10_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 10×10 rectangle of unsigned normalized RGBA texel data with sRGB
+-- nonlinear encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_10x10_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_10x10_SRGB_BLOCK = VkFormat 180
+
+-- | @VK_FORMAT_ASTC_12x10_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 12×10 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_12x10_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_12x10_UNORM_BLOCK = VkFormat 181
+
+-- | @VK_FORMAT_ASTC_12x10_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 12×10 rectangle of unsigned normalized RGBA texel data with sRGB
+-- nonlinear encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_12x10_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_12x10_SRGB_BLOCK = VkFormat 182
+
+-- | @VK_FORMAT_ASTC_12x12_UNORM_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 12×12 rectangle of unsigned normalized RGBA texel data.
+pattern VK_FORMAT_ASTC_12x12_UNORM_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_12x12_UNORM_BLOCK = VkFormat 183
+
+-- | @VK_FORMAT_ASTC_12x12_SRGB_BLOCK@ specifies a four-component, ASTC
+-- compressed format where each 128-bit compressed texel block encodes a
+-- 12×12 rectangle of unsigned normalized RGBA texel data with sRGB
+-- nonlinear encoding applied to the RGB components.
+pattern VK_FORMAT_ASTC_12x12_SRGB_BLOCK :: VkFormat
+pattern VK_FORMAT_ASTC_12x12_SRGB_BLOCK = VkFormat 184
+-- ** VkResult
+
+-- | VkResult - Vulkan command return codes
+--
+-- = Description
+-- #_description#
+--
+-- -   @VK_SUCCESS@ Command successfully completed
+--
+-- -   @VK_NOT_READY@ A fence or query has not yet completed
+--
+-- -   @VK_TIMEOUT@ A wait operation has not completed in the specified
+--     time
+--
+-- -   @VK_EVENT_SET@ An event is signaled
+--
+-- -   @VK_EVENT_RESET@ An event is unsignaled
+--
+-- -   @VK_INCOMPLETE@ A return array was too small for the result
+--
+-- -   @VK_ERROR_OUT_OF_HOST_MEMORY@ A host memory allocation has failed.
+--
+-- -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@ A device memory allocation has
+--     failed.
+--
+-- -   @VK_ERROR_INITIALIZATION_FAILED@ Initialization of an object could
+--     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>
+--
+-- -   @VK_ERROR_MEMORY_MAP_FAILED@ Mapping of a memory object has failed.
+--
+-- -   @VK_ERROR_LAYER_NOT_PRESENT@ A requested layer is not present or
+--     could not be loaded.
+--
+-- -   @VK_ERROR_EXTENSION_NOT_PRESENT@ A requested extension is not
+--     supported.
+--
+-- -   @VK_ERROR_FEATURE_NOT_PRESENT@ A requested feature is not supported.
+--
+-- -   @VK_ERROR_INCOMPATIBLE_DRIVER@ The requested version of Vulkan is
+--     not supported by the driver or is otherwise incompatible for
+--     implementation-specific reasons.
+--
+-- -   @VK_ERROR_TOO_MANY_OBJECTS@ Too many objects of the type have
+--     already been created.
+--
+-- -   @VK_ERROR_FORMAT_NOT_SUPPORTED@ A requested format is not supported
+--     on this device.
+--
+-- -   @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.
+--
+-- 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
+-- fields will be unmodified. Any structures chained from @pNext@ will also
+-- have undefined contents, except that @sType@ and @pNext@ will be
+-- unmodified.
+--
+-- Out of memory errors do not damage any currently existing Vulkan
+-- objects. Objects that have already been successfully created /can/ still
+-- be used by the application.
+--
+-- Performance-critical commands generally do not have return codes. If a
+-- run time error occurs in such commands, the implementation will defer
+-- reporting the error until a specified point. For commands that record
+-- into command buffers (@vkCmd*@) run time errors are reported by
+-- @vkEndCommandBuffer@.
+--
+-- = See Also
+-- #_see_also#
+--
+-- No cross-references are available,
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkPresentInfoKHR'
+newtype VkResult = VkResult Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkResult where
+  showsPrec _ VK_SUCCESS = showString "VK_SUCCESS"
+  showsPrec _ VK_NOT_READY = showString "VK_NOT_READY"
+  showsPrec _ VK_TIMEOUT = showString "VK_TIMEOUT"
+  showsPrec _ VK_EVENT_SET = showString "VK_EVENT_SET"
+  showsPrec _ VK_EVENT_RESET = showString "VK_EVENT_RESET"
+  showsPrec _ VK_INCOMPLETE = showString "VK_INCOMPLETE"
+  showsPrec _ VK_ERROR_OUT_OF_HOST_MEMORY = showString "VK_ERROR_OUT_OF_HOST_MEMORY"
+  showsPrec _ VK_ERROR_OUT_OF_DEVICE_MEMORY = showString "VK_ERROR_OUT_OF_DEVICE_MEMORY"
+  showsPrec _ VK_ERROR_INITIALIZATION_FAILED = showString "VK_ERROR_INITIALIZATION_FAILED"
+  showsPrec _ VK_ERROR_DEVICE_LOST = showString "VK_ERROR_DEVICE_LOST"
+  showsPrec _ VK_ERROR_MEMORY_MAP_FAILED = showString "VK_ERROR_MEMORY_MAP_FAILED"
+  showsPrec _ VK_ERROR_LAYER_NOT_PRESENT = showString "VK_ERROR_LAYER_NOT_PRESENT"
+  showsPrec _ VK_ERROR_EXTENSION_NOT_PRESENT = showString "VK_ERROR_EXTENSION_NOT_PRESENT"
+  showsPrec _ VK_ERROR_FEATURE_NOT_PRESENT = showString "VK_ERROR_FEATURE_NOT_PRESENT"
+  showsPrec _ VK_ERROR_INCOMPATIBLE_DRIVER = showString "VK_ERROR_INCOMPATIBLE_DRIVER"
+  showsPrec _ VK_ERROR_TOO_MANY_OBJECTS = showString "VK_ERROR_TOO_MANY_OBJECTS"
+  showsPrec _ VK_ERROR_FORMAT_NOT_SUPPORTED = showString "VK_ERROR_FORMAT_NOT_SUPPORTED"
+  showsPrec _ VK_ERROR_FRAGMENTED_POOL = showString "VK_ERROR_FRAGMENTED_POOL"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkResult (-1000069000)) = showString "VK_ERROR_OUT_OF_POOL_MEMORY"
+  showsPrec _ (VkResult (-1000072003)) = showString "VK_ERROR_INVALID_EXTERNAL_HANDLE"
+  showsPrec _ (VkResult (-1000000000)) = showString "VK_ERROR_SURFACE_LOST_KHR"
+  showsPrec _ (VkResult (-1000000001)) = showString "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"
+  showsPrec _ (VkResult 1000001003) = showString "VK_SUBOPTIMAL_KHR"
+  showsPrec _ (VkResult (-1000001004)) = showString "VK_ERROR_OUT_OF_DATE_KHR"
+  showsPrec _ (VkResult (-1000003001)) = showString "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"
+  showsPrec _ (VkResult (-1000011001)) = showString "VK_ERROR_VALIDATION_FAILED_EXT"
+  showsPrec _ (VkResult (-1000012000)) = showString "VK_ERROR_INVALID_SHADER_NV"
+  showsPrec _ (VkResult (-1000161000)) = showString "VK_ERROR_FRAGMENTATION_EXT"
+  showsPrec _ (VkResult (-1000174001)) = showString "VK_ERROR_NOT_PERMITTED_EXT"
+  showsPrec p (VkResult x) = showParen (p >= 11) (showString "VkResult " . showsPrec 11 x)
+
+instance Read VkResult where
+  readPrec = parens ( choose [ ("VK_SUCCESS",                     pure VK_SUCCESS)
+                             , ("VK_NOT_READY",                   pure VK_NOT_READY)
+                             , ("VK_TIMEOUT",                     pure VK_TIMEOUT)
+                             , ("VK_EVENT_SET",                   pure VK_EVENT_SET)
+                             , ("VK_EVENT_RESET",                 pure VK_EVENT_RESET)
+                             , ("VK_INCOMPLETE",                  pure VK_INCOMPLETE)
+                             , ("VK_ERROR_OUT_OF_HOST_MEMORY",    pure VK_ERROR_OUT_OF_HOST_MEMORY)
+                             , ("VK_ERROR_OUT_OF_DEVICE_MEMORY",  pure VK_ERROR_OUT_OF_DEVICE_MEMORY)
+                             , ("VK_ERROR_INITIALIZATION_FAILED", pure VK_ERROR_INITIALIZATION_FAILED)
+                             , ("VK_ERROR_DEVICE_LOST",           pure VK_ERROR_DEVICE_LOST)
+                             , ("VK_ERROR_MEMORY_MAP_FAILED",     pure VK_ERROR_MEMORY_MAP_FAILED)
+                             , ("VK_ERROR_LAYER_NOT_PRESENT",     pure VK_ERROR_LAYER_NOT_PRESENT)
+                             , ("VK_ERROR_EXTENSION_NOT_PRESENT", pure VK_ERROR_EXTENSION_NOT_PRESENT)
+                             , ("VK_ERROR_FEATURE_NOT_PRESENT",   pure VK_ERROR_FEATURE_NOT_PRESENT)
+                             , ("VK_ERROR_INCOMPATIBLE_DRIVER",   pure VK_ERROR_INCOMPATIBLE_DRIVER)
+                             , ("VK_ERROR_TOO_MANY_OBJECTS",      pure VK_ERROR_TOO_MANY_OBJECTS)
+                             , ("VK_ERROR_FORMAT_NOT_SUPPORTED",  pure VK_ERROR_FORMAT_NOT_SUPPORTED)
+                             , ("VK_ERROR_FRAGMENTED_POOL",       pure VK_ERROR_FRAGMENTED_POOL)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_ERROR_OUT_OF_POOL_MEMORY",       pure (VkResult (-1000069000)))
+                             , ("VK_ERROR_INVALID_EXTERNAL_HANDLE",  pure (VkResult (-1000072003)))
+                             , ("VK_ERROR_SURFACE_LOST_KHR",         pure (VkResult (-1000000000)))
+                             , ("VK_ERROR_NATIVE_WINDOW_IN_USE_KHR", pure (VkResult (-1000000001)))
+                             , ("VK_SUBOPTIMAL_KHR",                 pure (VkResult 1000001003))
+                             , ("VK_ERROR_OUT_OF_DATE_KHR",          pure (VkResult (-1000001004)))
+                             , ("VK_ERROR_INCOMPATIBLE_DISPLAY_KHR", pure (VkResult (-1000003001)))
+                             , ("VK_ERROR_VALIDATION_FAILED_EXT",    pure (VkResult (-1000011001)))
+                             , ("VK_ERROR_INVALID_SHADER_NV",        pure (VkResult (-1000012000)))
+                             , ("VK_ERROR_FRAGMENTATION_EXT",        pure (VkResult (-1000161000)))
+                             , ("VK_ERROR_NOT_PERMITTED_EXT",        pure (VkResult (-1000174001)))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkResult")
+                        v <- step readPrec
+                        pure (VkResult v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkResult" "VK_SUCCESS"
+pattern VK_SUCCESS :: VkResult
+pattern VK_SUCCESS = VkResult 0
+
+-- No documentation found for Nested "VkResult" "VK_NOT_READY"
+pattern VK_NOT_READY :: VkResult
+pattern VK_NOT_READY = VkResult 1
+
+-- No documentation found for Nested "VkResult" "VK_TIMEOUT"
+pattern VK_TIMEOUT :: VkResult
+pattern VK_TIMEOUT = VkResult 2
+
+-- No documentation found for Nested "VkResult" "VK_EVENT_SET"
+pattern VK_EVENT_SET :: VkResult
+pattern VK_EVENT_SET = VkResult 3
+
+-- No documentation found for Nested "VkResult" "VK_EVENT_RESET"
+pattern VK_EVENT_RESET :: VkResult
+pattern VK_EVENT_RESET = VkResult 4
+
+-- No documentation found for Nested "VkResult" "VK_INCOMPLETE"
+pattern VK_INCOMPLETE :: VkResult
+pattern VK_INCOMPLETE = VkResult 5
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_OUT_OF_HOST_MEMORY"
+pattern VK_ERROR_OUT_OF_HOST_MEMORY :: VkResult
+pattern VK_ERROR_OUT_OF_HOST_MEMORY = VkResult (-1)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_OUT_OF_DEVICE_MEMORY"
+pattern VK_ERROR_OUT_OF_DEVICE_MEMORY :: VkResult
+pattern VK_ERROR_OUT_OF_DEVICE_MEMORY = VkResult (-2)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_INITIALIZATION_FAILED"
+pattern VK_ERROR_INITIALIZATION_FAILED :: VkResult
+pattern VK_ERROR_INITIALIZATION_FAILED = VkResult (-3)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_DEVICE_LOST"
+pattern VK_ERROR_DEVICE_LOST :: VkResult
+pattern VK_ERROR_DEVICE_LOST = VkResult (-4)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_MEMORY_MAP_FAILED"
+pattern VK_ERROR_MEMORY_MAP_FAILED :: VkResult
+pattern VK_ERROR_MEMORY_MAP_FAILED = VkResult (-5)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_LAYER_NOT_PRESENT"
+pattern VK_ERROR_LAYER_NOT_PRESENT :: VkResult
+pattern VK_ERROR_LAYER_NOT_PRESENT = VkResult (-6)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_EXTENSION_NOT_PRESENT"
+pattern VK_ERROR_EXTENSION_NOT_PRESENT :: VkResult
+pattern VK_ERROR_EXTENSION_NOT_PRESENT = VkResult (-7)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_FEATURE_NOT_PRESENT"
+pattern VK_ERROR_FEATURE_NOT_PRESENT :: VkResult
+pattern VK_ERROR_FEATURE_NOT_PRESENT = VkResult (-8)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_INCOMPATIBLE_DRIVER"
+pattern VK_ERROR_INCOMPATIBLE_DRIVER :: VkResult
+pattern VK_ERROR_INCOMPATIBLE_DRIVER = VkResult (-9)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_TOO_MANY_OBJECTS"
+pattern VK_ERROR_TOO_MANY_OBJECTS :: VkResult
+pattern VK_ERROR_TOO_MANY_OBJECTS = VkResult (-10)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_FORMAT_NOT_SUPPORTED"
+pattern VK_ERROR_FORMAT_NOT_SUPPORTED :: VkResult
+pattern VK_ERROR_FORMAT_NOT_SUPPORTED = VkResult (-11)
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_FRAGMENTED_POOL"
+pattern VK_ERROR_FRAGMENTED_POOL :: VkResult
+pattern VK_ERROR_FRAGMENTED_POOL = VkResult (-12)
+-- ** VkStructureType
+
+-- | 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
+-- @VkStructureType@ value is obtained by taking the name of the structure,
+-- stripping the leading @Vk@, prefixing each capital letter with @_@,
+-- converting the entire resulting string to upper case, and prefixing it
+-- with @VK_STRUCTURE_TYPE_@. For example, structures of type
+-- @VkImageCreateInfo@ correspond to a @VkStructureType@ of
+-- @VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO@, and thus its @sType@ member
+-- /must/ equal that when it is passed to the API.
+--
+-- The values @VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO@ and
+-- @VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO@ are reserved for internal
+-- use by the loader, and do not have corresponding Vulkan structures in
+-- this Specification.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkAcquireNextImageInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferFormatPropertiesANDROID',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferPropertiesANDROID',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferUsageANDROID',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.VkAndroidSurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkApplicationInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindBufferMemoryDeviceGroupInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindImageMemoryInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkBindImageMemorySwapchainInfoKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkBindSparseInfo',
+-- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferMemoryBarrier',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkBufferMemoryRequirementsInfo2',
+-- 'Graphics.Vulkan.Core10.BufferView.VkBufferViewCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkCmdProcessCommandsInfoNVX',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkCmdReserveSpaceForCommandsInfoNVX',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferAllocateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferBeginInfo',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.VkCommandBufferInheritanceInfo',
+-- 'Graphics.Vulkan.Core10.CommandPool.VkCommandPoolCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkComputePipelineCreateInfo',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkCopyDescriptorSet',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkD3D12FenceSubmitInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.VkDebugMarkerMarkerInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.VkDebugMarkerObjectNameInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.VkDebugMarkerObjectTagInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportCallbackCreateInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsLabelEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsMessengerCallbackDataEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsMessengerCreateInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsObjectNameInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsObjectTagInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationBufferCreateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationImageCreateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorPoolCreateInfo',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetAllocateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkDescriptorSetLayoutBindingFlagsCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.VkDescriptorSetLayoutSupport',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkDescriptorSetVariableDescriptorCountAllocateInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkDescriptorSetVariableDescriptorCountLayoutSupportEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.VkDeviceEventInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkDeviceGeneratedCommandsFeaturesNVX',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkDeviceGeneratedCommandsLimitsNVX',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupBindSparseInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupCommandBufferBeginInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkDeviceGroupDeviceCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkDeviceGroupPresentCapabilitiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkDeviceGroupPresentInfoKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupRenderPassBeginInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupSubmitInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkDeviceGroupSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.Device.VkDeviceQueueCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_global_priority.VkDeviceQueueGlobalPriorityCreateInfoEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkDeviceQueueInfo2',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.VkDisplayEventInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayModeCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.VkDisplayPowerInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.VkDisplayPresentInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplaySurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.Event.VkEventCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkExportFenceCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.VkExportFenceWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExportMemoryAllocateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExportMemoryAllocateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkExportMemoryWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.VkExportMemoryWin32HandleInfoNV',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkExportSemaphoreCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkExportSemaphoreWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalBufferProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceProperties',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalImageFormatProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryBufferCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreProperties',
+-- 'Graphics.Vulkan.Core10.Fence.VkFenceCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.VkFenceGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.VkFenceGetWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkFormatProperties2',
+-- 'Graphics.Vulkan.Core10.Pass.VkFramebufferCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkGraphicsPipelineCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.VkHdrMetadataEXT',
+-- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.VkIOSSurfaceCreateInfoMVK',
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_image_format_list.VkImageFormatListCreateInfoKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkImageFormatProperties2',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkImageMemoryRequirementsInfo2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkImageSparseMemoryRequirementsInfo2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkImageSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageViewCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkImportAndroidHardwareBufferInfoANDROID',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd.VkImportFenceFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.VkImportFenceWin32HandleInfoKHR',
+-- '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_NV_external_memory_win32.VkImportMemoryWin32HandleInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.VkImportSemaphoreFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkImportSemaphoreWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkIndirectCommandsLayoutCreateInfoNVX',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstanceCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_MVK_macos_surface.VkMacOSSurfaceCreateInfoMVK',
+-- 'Graphics.Vulkan.Core10.Memory.VkMappedMemoryRange',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkMemoryAllocateFlagsInfo',
+-- 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkMemoryBarrier',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedRequirements',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.VkMemoryFdPropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkMemoryGetAndroidHardwareBufferInfoANDROID',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.VkMemoryGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkMemoryGetWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.VkMemoryHostPointerPropertiesEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkMemoryRequirements2',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkMemoryWin32HandlePropertiesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_mir_surface.VkMirSurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkMultisamplePropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableCreateInfoNVX',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage.VkPhysicalDevice16BitStorageFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.VkPhysicalDeviceConservativeRasterizationPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkPhysicalDeviceDescriptorIndexingFeaturesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkPhysicalDeviceDescriptorIndexingPropertiesEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPhysicalDeviceDiscardRectanglePropertiesEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalBufferInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkPhysicalDeviceExternalFenceInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceExternalImageFormatInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.VkPhysicalDeviceExternalMemoryHostPropertiesEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkPhysicalDeviceExternalSemaphoreInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkPhysicalDeviceGroupProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkPhysicalDeviceIDProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceImageFormatInfo2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.VkPhysicalDeviceMaintenance3Properties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceMemoryProperties2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewFeatures',
+-- '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_get_physical_device_properties2.VkPhysicalDeviceProperties2',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkPhysicalDeviceProtectedMemoryFeatures',
+-- '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.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkPhysicalDeviceSamplerYcbcrConversionFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties.VkPhysicalDeviceShaderCorePropertiesAMD',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_shader_draw_parameters.VkPhysicalDeviceShaderDrawParameterFeatures',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceSparseImageFormatInfo2',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup.VkPhysicalDeviceSubgroupProperties',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.VkPhysicalDeviceSurfaceInfo2KHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers.VkPhysicalDeviceVariablePointerFeatures',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT',
+-- 'Graphics.Vulkan.Core10.PipelineCache.VkPipelineCacheCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced.VkPipelineColorBlendAdvancedStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineColorBlendStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples.VkPipelineCoverageModulationStateCreateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color.VkPipelineCoverageToColorStateCreateInfoNV',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineDepthStencilStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.VkPipelineDiscardRectangleStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineDynamicStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineInputAssemblyStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.VkPipelineLayoutCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization.VkPipelineRasterizationConservativeStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineRasterizationStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_rasterization_order.VkPipelineRasterizationStateRasterizationOrderAMD',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkPipelineSampleLocationsStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineShaderStageCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkPipelineTessellationDomainOriginStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineTessellationStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor.VkPipelineVertexInputDivisorStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineVertexInputStateCreateInfo',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineViewportStateCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle.VkPipelineViewportSwizzleStateCreateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.VkPipelineViewportWScalingStateCreateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkPresentInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkPresentRegionsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.VkPresentTimesInfoGOOGLE',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkProtectedSubmitInfo',
+-- 'Graphics.Vulkan.Core10.Query.VkQueryPoolCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkQueueFamilyProperties2',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo',
+-- 'Graphics.Vulkan.Core10.Pass.VkRenderPassCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkRenderPassInputAttachmentAspectCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkRenderPassMultiviewCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkRenderPassSampleLocationsBeginInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.VkSampleLocationsInfoEXT',
+-- 'Graphics.Vulkan.Core10.Sampler.VkSamplerCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkSamplerReductionModeCreateInfoEXT',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionImageFormatProperties',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo',
+-- 'Graphics.Vulkan.Core10.QueueSemaphore.VkSemaphoreCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.VkSemaphoreGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkSemaphoreGetWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Core10.Shader.VkShaderModuleCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.VkShaderModuleValidationCacheCreateInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.VkSharedPresentSurfaceCapabilitiesKHR',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkSparseImageFormatProperties2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkSparseImageMemoryRequirements2',
+-- 'Graphics.Vulkan.Core10.Queue.VkSubmitInfo',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.VkSurfaceCapabilities2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.VkSurfaceFormat2KHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.VkSwapchainCounterCreateInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod.VkTextureLODGatherFormatPropertiesAMD',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.VkValidationCacheCreateInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_validation_flags.VkValidationFlagsEXT',
+-- 'Graphics.Vulkan.Extensions.VK_NN_vi_surface.VkViSurfaceCreateInfoNN',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_wayland_surface.VkWaylandSurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex.VkWin32KeyedMutexAcquireReleaseInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex.VkWin32KeyedMutexAcquireReleaseInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_win32_surface.VkWin32SurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xcb_surface.VkXcbSurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_xlib_surface.VkXlibSurfaceCreateInfoKHR'
+newtype VkStructureType = VkStructureType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkStructureType where
+  showsPrec _ VK_STRUCTURE_TYPE_APPLICATION_INFO = showString "VK_STRUCTURE_TYPE_APPLICATION_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_SUBMIT_INFO = showString "VK_STRUCTURE_TYPE_SUBMIT_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = showString "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = showString "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"
+  showsPrec _ VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = showString "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = showString "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = showString "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = showString "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = showString "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = showString "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = showString "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = showString "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = showString "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"
+  showsPrec _ VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = showString "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"
+  showsPrec _ VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = showString "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = showString "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = showString "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = showString "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = showString "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"
+  showsPrec _ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = showString "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"
+  showsPrec _ VK_STRUCTURE_TYPE_MEMORY_BARRIER = showString "VK_STRUCTURE_TYPE_MEMORY_BARRIER"
+  showsPrec _ VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"
+  showsPrec _ VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = showString "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkStructureType 1000094000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"
+  showsPrec _ (VkStructureType 1000157000) = showString "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"
+  showsPrec _ (VkStructureType 1000157001) = showString "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"
+  showsPrec _ (VkStructureType 1000083000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"
+  showsPrec _ (VkStructureType 1000127000) = showString "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"
+  showsPrec _ (VkStructureType 1000127001) = showString "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"
+  showsPrec _ (VkStructureType 1000060000) = showString "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO"
+  showsPrec _ (VkStructureType 1000060003) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"
+  showsPrec _ (VkStructureType 1000060004) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"
+  showsPrec _ (VkStructureType 1000060005) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"
+  showsPrec _ (VkStructureType 1000060006) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"
+  showsPrec _ (VkStructureType 1000060013) = showString "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"
+  showsPrec _ (VkStructureType 1000060014) = showString "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"
+  showsPrec _ (VkStructureType 1000070000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"
+  showsPrec _ (VkStructureType 1000070001) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000146000) = showString "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"
+  showsPrec _ (VkStructureType 1000146001) = showString "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"
+  showsPrec _ (VkStructureType 1000146002) = showString "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"
+  showsPrec _ (VkStructureType 1000146003) = showString "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"
+  showsPrec _ (VkStructureType 1000146004) = showString "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"
+  showsPrec _ (VkStructureType 1000059000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"
+  showsPrec _ (VkStructureType 1000059001) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"
+  showsPrec _ (VkStructureType 1000059002) = showString "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"
+  showsPrec _ (VkStructureType 1000059003) = showString "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"
+  showsPrec _ (VkStructureType 1000059004) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"
+  showsPrec _ (VkStructureType 1000059005) = showString "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"
+  showsPrec _ (VkStructureType 1000059006) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"
+  showsPrec _ (VkStructureType 1000059007) = showString "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"
+  showsPrec _ (VkStructureType 1000059008) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"
+  showsPrec _ (VkStructureType 1000117000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"
+  showsPrec _ (VkStructureType 1000117001) = showString "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000117002) = showString "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000117003) = showString "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000053000) = showString "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000053001) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"
+  showsPrec _ (VkStructureType 1000053002) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES"
+  showsPrec _ (VkStructureType 1000120000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"
+  showsPrec _ (VkStructureType 1000145000) = showString "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"
+  showsPrec _ (VkStructureType 1000145001) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"
+  showsPrec _ (VkStructureType 1000145002) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"
+  showsPrec _ (VkStructureType 1000145003) = showString "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"
+  showsPrec _ (VkStructureType 1000156000) = showString "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000156001) = showString "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"
+  showsPrec _ (VkStructureType 1000156002) = showString "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"
+  showsPrec _ (VkStructureType 1000156003) = showString "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"
+  showsPrec _ (VkStructureType 1000156004) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
+  showsPrec _ (VkStructureType 1000156005) = showString "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
+  showsPrec _ (VkStructureType 1000085000) = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000071000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"
+  showsPrec _ (VkStructureType 1000071001) = showString "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"
+  showsPrec _ (VkStructureType 1000071002) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"
+  showsPrec _ (VkStructureType 1000071003) = showString "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"
+  showsPrec _ (VkStructureType 1000071004) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"
+  showsPrec _ (VkStructureType 1000072000) = showString "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000072001) = showString "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000072002) = showString "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"
+  showsPrec _ (VkStructureType 1000112000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO"
+  showsPrec _ (VkStructureType 1000112001) = showString "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"
+  showsPrec _ (VkStructureType 1000113000) = showString "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000077000) = showString "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"
+  showsPrec _ (VkStructureType 1000076000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO"
+  showsPrec _ (VkStructureType 1000076001) = showString "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"
+  showsPrec _ (VkStructureType 1000168000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"
+  showsPrec _ (VkStructureType 1000168001) = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"
+  showsPrec _ (VkStructureType 1000063000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES"
+  showsPrec _ (VkStructureType 1000001000) = showString "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000001001) = showString "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"
+  showsPrec _ (VkStructureType 1000060007) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"
+  showsPrec _ (VkStructureType 1000060008) = showString "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000060009) = showString "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"
+  showsPrec _ (VkStructureType 1000060010) = showString "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000060011) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"
+  showsPrec _ (VkStructureType 1000060012) = showString "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000002000) = showString "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000002001) = showString "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000003000) = showString "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"
+  showsPrec _ (VkStructureType 1000004000) = showString "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000005000) = showString "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000006000) = showString "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000007000) = showString "VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000008000) = showString "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000009000) = showString "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000010000) = showString "VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID"
+  showsPrec _ (VkStructureType 1000011000) = showString "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000018000) = showString "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD"
+  showsPrec _ (VkStructureType 1000022000) = showString "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"
+  showsPrec _ (VkStructureType 1000022001) = showString "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"
+  showsPrec _ (VkStructureType 1000022002) = showString "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"
+  showsPrec _ (VkStructureType 1000026000) = showString "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000026001) = showString "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000026002) = showString "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000041000) = showString "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"
+  showsPrec _ (VkStructureType 1000056000) = showString "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000056001) = showString "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000057000) = showString "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+  showsPrec _ (VkStructureType 1000057001) = showString "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+  showsPrec _ (VkStructureType 1000058000) = showString "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"
+  showsPrec _ (VkStructureType 1000061000) = showString "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"
+  showsPrec _ (VkStructureType 1000062000) = showString "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"
+  showsPrec _ (VkStructureType 1000073000) = showString "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000073001) = showString "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000073002) = showString "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"
+  showsPrec _ (VkStructureType 1000073003) = showString "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000074000) = showString "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"
+  showsPrec _ (VkStructureType 1000074001) = showString "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"
+  showsPrec _ (VkStructureType 1000074002) = showString "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"
+  showsPrec _ (VkStructureType 1000075000) = showString "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000078000) = showString "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000078001) = showString "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000078002) = showString "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"
+  showsPrec _ (VkStructureType 1000078003) = showString "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000079000) = showString "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"
+  showsPrec _ (VkStructureType 1000079001) = showString "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"
+  showsPrec _ (VkStructureType 1000080000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR"
+  showsPrec _ (VkStructureType 1000084000) = showString "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"
+  showsPrec _ (VkStructureType 1000086000) = showString "VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX"
+  showsPrec _ (VkStructureType 1000086001) = showString "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX"
+  showsPrec _ (VkStructureType 1000086002) = showString "VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX"
+  showsPrec _ (VkStructureType 1000086003) = showString "VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX"
+  showsPrec _ (VkStructureType 1000086004) = showString "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX"
+  showsPrec _ (VkStructureType 1000086005) = showString "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX"
+  showsPrec _ (VkStructureType 1000087000) = showString "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000090000) = showString "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"
+  showsPrec _ (VkStructureType 1000091000) = showString "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"
+  showsPrec _ (VkStructureType 1000091001) = showString "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"
+  showsPrec _ (VkStructureType 1000091002) = showString "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"
+  showsPrec _ (VkStructureType 1000091003) = showString "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000092000) = showString "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"
+  showsPrec _ (VkStructureType 1000097000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX"
+  showsPrec _ (VkStructureType 1000098000) = showString "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000099000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000099001) = showString "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000101000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000101001) = showString "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000105000) = showString "VK_STRUCTURE_TYPE_HDR_METADATA_EXT"
+  showsPrec _ (VkStructureType 1000111000) = showString "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"
+  showsPrec _ (VkStructureType 1000114000) = showString "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000114001) = showString "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000114002) = showString "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000115000) = showString "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"
+  showsPrec _ (VkStructureType 1000115001) = showString "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"
+  showsPrec _ (VkStructureType 1000119000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"
+  showsPrec _ (VkStructureType 1000119001) = showString "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"
+  showsPrec _ (VkStructureType 1000119002) = showString "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"
+  showsPrec _ (VkStructureType 1000122000) = showString "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"
+  showsPrec _ (VkStructureType 1000123000) = showString "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"
+  showsPrec _ (VkStructureType 1000128000) = showString "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"
+  showsPrec _ (VkStructureType 1000128001) = showString "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"
+  showsPrec _ (VkStructureType 1000128002) = showString "VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"
+  showsPrec _ (VkStructureType 1000128003) = showString "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"
+  showsPrec _ (VkStructureType 1000128004) = showString "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000129000) = showString "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"
+  showsPrec _ (VkStructureType 1000129001) = showString "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"
+  showsPrec _ (VkStructureType 1000129002) = showString "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"
+  showsPrec _ (VkStructureType 1000129003) = showString "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+  showsPrec _ (VkStructureType 1000129004) = showString "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+  showsPrec _ (VkStructureType 1000129005) = showString "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"
+  showsPrec _ (VkStructureType 1000130000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000130001) = showString "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000143000) = showString "VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT"
+  showsPrec _ (VkStructureType 1000143001) = showString "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"
+  showsPrec _ (VkStructureType 1000143002) = showString "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000143003) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000143004) = showString "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000147000) = showString "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR"
+  showsPrec _ (VkStructureType 1000148000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"
+  showsPrec _ (VkStructureType 1000148001) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000148002) = showString "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000149000) = showString "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000152000) = showString "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"
+  showsPrec _ (VkStructureType 1000160000) = showString "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000160001) = showString "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000161000) = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000161001) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT"
+  showsPrec _ (VkStructureType 1000161002) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000161003) = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000161004) = showString "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT"
+  showsPrec _ (VkStructureType 1000174000) = showString "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"
+  showsPrec _ (VkStructureType 1000178000) = showString "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"
+  showsPrec _ (VkStructureType 1000178001) = showString "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000178002) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000185000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"
+  showsPrec _ (VkStructureType 1000190000) = showString "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"
+  showsPrec _ (VkStructureType 1000190001) = showString "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"
+  showsPrec p (VkStructureType x) = showParen (p >= 11) (showString "VkStructureType " . showsPrec 11 x)
+
+instance Read VkStructureType where
+  readPrec = parens ( choose [ ("VK_STRUCTURE_TYPE_APPLICATION_INFO",                          pure VK_STRUCTURE_TYPE_APPLICATION_INFO)
+                             , ("VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO",                      pure VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO",                  pure VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO",                        pure VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_SUBMIT_INFO",                               pure VK_STRUCTURE_TYPE_SUBMIT_INFO)
+                             , ("VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO",                      pure VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE",                       pure VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
+                             , ("VK_STRUCTURE_TYPE_BIND_SPARSE_INFO",                          pure VK_STRUCTURE_TYPE_BIND_SPARSE_INFO)
+                             , ("VK_STRUCTURE_TYPE_FENCE_CREATE_INFO",                         pure VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO",                     pure VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_EVENT_CREATE_INFO",                         pure VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO",                    pure VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO",                        pure VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO",                   pure VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO",                         pure VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO",                    pure VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO",                 pure VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO",                pure VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO",         pure VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO",   pure VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO", pure VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO",   pure VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO",       pure VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO",  pure VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO",    pure VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO",  pure VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO",    pure VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO",        pure VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO",             pure VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO",              pure VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO",               pure VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO",                       pure VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO",         pure VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO",               pure VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO",              pure VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET",                      pure VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
+                             , ("VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET",                       pure VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
+                             , ("VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO",                   pure VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO",                   pure VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO",                  pure VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO",              pure VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO",           pure VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO)
+                             , ("VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO",                 pure VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
+                             , ("VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO",                    pure VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
+                             , ("VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER",                     pure VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER)
+                             , ("VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER",                      pure VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER)
+                             , ("VK_STRUCTURE_TYPE_MEMORY_BARRIER",                            pure VK_STRUCTURE_TYPE_MEMORY_BARRIER)
+                             , ("VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO",               pure VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO)
+                             , ("VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO",                 pure VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES",                          pure (VkStructureType 1000094000))
+                             , ("VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO",                                      pure (VkStructureType 1000157000))
+                             , ("VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO",                                       pure (VkStructureType 1000157001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES",                       pure (VkStructureType 1000083000))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS",                                pure (VkStructureType 1000127000))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO",                               pure (VkStructureType 1000127001))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO",                                   pure (VkStructureType 1000060000))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO",                          pure (VkStructureType 1000060003))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO",                       pure (VkStructureType 1000060004))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO",                                     pure (VkStructureType 1000060005))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO",                                pure (VkStructureType 1000060006))
+                             , ("VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO",                         pure (VkStructureType 1000060013))
+                             , ("VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO",                          pure (VkStructureType 1000060014))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES",                             pure (VkStructureType 1000070000))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO",                              pure (VkStructureType 1000070001))
+                             , ("VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2",                            pure (VkStructureType 1000146000))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2",                             pure (VkStructureType 1000146001))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2",                      pure (VkStructureType 1000146002))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2",                                        pure (VkStructureType 1000146003))
+                             , ("VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2",                           pure (VkStructureType 1000146004))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2",                                   pure (VkStructureType 1000059000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2",                                 pure (VkStructureType 1000059001))
+                             , ("VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2",                                          pure (VkStructureType 1000059002))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2",                                    pure (VkStructureType 1000059003))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2",                          pure (VkStructureType 1000059004))
+                             , ("VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2",                                    pure (VkStructureType 1000059005))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2",                          pure (VkStructureType 1000059006))
+                             , ("VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2",                             pure (VkStructureType 1000059007))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2",                   pure (VkStructureType 1000059008))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES",                    pure (VkStructureType 1000117000))
+                             , ("VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO",              pure (VkStructureType 1000117001))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO",                                 pure (VkStructureType 1000117002))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO",        pure (VkStructureType 1000117003))
+                             , ("VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO",                            pure (VkStructureType 1000053000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES",                           pure (VkStructureType 1000053001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES",                         pure (VkStructureType 1000053002))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES",                    pure (VkStructureType 1000120000))
+                             , ("VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO",                                        pure (VkStructureType 1000145000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES",                    pure (VkStructureType 1000145001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES",                  pure (VkStructureType 1000145002))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2",                                          pure (VkStructureType 1000145003))
+                             , ("VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO",                         pure (VkStructureType 1000156000))
+                             , ("VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO",                                pure (VkStructureType 1000156001))
+                             , ("VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO",                                 pure (VkStructureType 1000156002))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO",                         pure (VkStructureType 1000156003))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES",            pure (VkStructureType 1000156004))
+                             , ("VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES",             pure (VkStructureType 1000156005))
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO",                       pure (VkStructureType 1000085000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO",                   pure (VkStructureType 1000071000))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES",                             pure (VkStructureType 1000071001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO",                         pure (VkStructureType 1000071002))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES",                                   pure (VkStructureType 1000071003))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES",                                pure (VkStructureType 1000071004))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO",                           pure (VkStructureType 1000072000))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO",                            pure (VkStructureType 1000072001))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO",                                  pure (VkStructureType 1000072002))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO",                          pure (VkStructureType 1000112000))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES",                                    pure (VkStructureType 1000112001))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO",                                     pure (VkStructureType 1000113000))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO",                                 pure (VkStructureType 1000077000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO",                      pure (VkStructureType 1000076000))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES",                                pure (VkStructureType 1000076001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES",                     pure (VkStructureType 1000168000))
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT",                                pure (VkStructureType 1000168001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES",               pure (VkStructureType 1000063000))
+                             , ("VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR",                                    pure (VkStructureType 1000001000))
+                             , ("VK_STRUCTURE_TYPE_PRESENT_INFO_KHR",                                             pure (VkStructureType 1000001001))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR",                        pure (VkStructureType 1000060007))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR",                              pure (VkStructureType 1000060008))
+                             , ("VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR",                         pure (VkStructureType 1000060009))
+                             , ("VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR",                                  pure (VkStructureType 1000060010))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR",                                pure (VkStructureType 1000060011))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR",                       pure (VkStructureType 1000060012))
+                             , ("VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR",                                 pure (VkStructureType 1000002000))
+                             , ("VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR",                              pure (VkStructureType 1000002001))
+                             , ("VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR",                                     pure (VkStructureType 1000003000))
+                             , ("VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR",                                 pure (VkStructureType 1000004000))
+                             , ("VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR",                                  pure (VkStructureType 1000005000))
+                             , ("VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR",                              pure (VkStructureType 1000006000))
+                             , ("VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR",                                  pure (VkStructureType 1000007000))
+                             , ("VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR",                              pure (VkStructureType 1000008000))
+                             , ("VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR",                                pure (VkStructureType 1000009000))
+                             , ("VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID",                                        pure (VkStructureType 1000010000))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT",                        pure (VkStructureType 1000011000))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD",         pure (VkStructureType 1000018000))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT",                            pure (VkStructureType 1000022000))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT",                             pure (VkStructureType 1000022001))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT",                                 pure (VkStructureType 1000022002))
+                             , ("VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV",                    pure (VkStructureType 1000026000))
+                             , ("VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV",                   pure (VkStructureType 1000026001))
+                             , ("VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV",                 pure (VkStructureType 1000026002))
+                             , ("VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD",                     pure (VkStructureType 1000041000))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV",                         pure (VkStructureType 1000056000))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV",                               pure (VkStructureType 1000056001))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV",                           pure (VkStructureType 1000057000))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV",                           pure (VkStructureType 1000057001))
+                             , ("VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV",                    pure (VkStructureType 1000058000))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR",                        pure (VkStructureType 1000060007))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR",                              pure (VkStructureType 1000060008))
+                             , ("VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR",                         pure (VkStructureType 1000060009))
+                             , ("VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR",                                  pure (VkStructureType 1000060010))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR",                                pure (VkStructureType 1000060011))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR",                       pure (VkStructureType 1000060012))
+                             , ("VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT",                                         pure (VkStructureType 1000061000))
+                             , ("VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN",                                    pure (VkStructureType 1000062000))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR",                          pure (VkStructureType 1000073000))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR",                          pure (VkStructureType 1000073001))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR",                           pure (VkStructureType 1000073002))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR",                             pure (VkStructureType 1000073003))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR",                                    pure (VkStructureType 1000074000))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR",                                     pure (VkStructureType 1000074001))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR",                                       pure (VkStructureType 1000074002))
+                             , ("VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR",                   pure (VkStructureType 1000075000))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR",                       pure (VkStructureType 1000078000))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR",                       pure (VkStructureType 1000078001))
+                             , ("VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR",                                  pure (VkStructureType 1000078002))
+                             , ("VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR",                          pure (VkStructureType 1000078003))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR",                                 pure (VkStructureType 1000079000))
+                             , ("VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR",                                    pure (VkStructureType 1000079001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR",               pure (VkStructureType 1000080000))
+                             , ("VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR",                                          pure (VkStructureType 1000084000))
+                             , ("VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX",                                 pure (VkStructureType 1000086000))
+                             , ("VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX",                     pure (VkStructureType 1000086001))
+                             , ("VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX",                                pure (VkStructureType 1000086002))
+                             , ("VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX",                      pure (VkStructureType 1000086003))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX",                         pure (VkStructureType 1000086004))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX",                       pure (VkStructureType 1000086005))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV",             pure (VkStructureType 1000087000))
+                             , ("VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT",                                   pure (VkStructureType 1000090000))
+                             , ("VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT",                                       pure (VkStructureType 1000091000))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT",                                        pure (VkStructureType 1000091001))
+                             , ("VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT",                                       pure (VkStructureType 1000091002))
+                             , ("VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT",                            pure (VkStructureType 1000091003))
+                             , ("VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE",                                    pure (VkStructureType 1000092000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX", pure (VkStructureType 1000097000))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV",               pure (VkStructureType 1000098000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT",             pure (VkStructureType 1000099000))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT",             pure (VkStructureType 1000099001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT",    pure (VkStructureType 1000101000))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT",    pure (VkStructureType 1000101001))
+                             , ("VK_STRUCTURE_TYPE_HDR_METADATA_EXT",                                             pure (VkStructureType 1000105000))
+                             , ("VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR",                      pure (VkStructureType 1000111000))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR",                           pure (VkStructureType 1000114000))
+                             , ("VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR",                           pure (VkStructureType 1000114001))
+                             , ("VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR",                              pure (VkStructureType 1000114002))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR",                                     pure (VkStructureType 1000115000))
+                             , ("VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR",                                        pure (VkStructureType 1000115001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR",                           pure (VkStructureType 1000119000))
+                             , ("VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR",                                   pure (VkStructureType 1000119001))
+                             , ("VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR",                                         pure (VkStructureType 1000119002))
+                             , ("VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK",                                  pure (VkStructureType 1000122000))
+                             , ("VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK",                                pure (VkStructureType 1000123000))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT",                             pure (VkStructureType 1000128000))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT",                              pure (VkStructureType 1000128001))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT",                                        pure (VkStructureType 1000128002))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT",                      pure (VkStructureType 1000128003))
+                             , ("VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT",                        pure (VkStructureType 1000128004))
+                             , ("VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID",                        pure (VkStructureType 1000129000))
+                             , ("VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID",                   pure (VkStructureType 1000129001))
+                             , ("VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID",            pure (VkStructureType 1000129002))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID",                  pure (VkStructureType 1000129003))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID",              pure (VkStructureType 1000129004))
+                             , ("VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID",                                      pure (VkStructureType 1000129005))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT",         pure (VkStructureType 1000130000))
+                             , ("VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT",                       pure (VkStructureType 1000130001))
+                             , ("VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT",                                    pure (VkStructureType 1000143000))
+                             , ("VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT",                  pure (VkStructureType 1000143001))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT",              pure (VkStructureType 1000143002))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT",              pure (VkStructureType 1000143003))
+                             , ("VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT",                                   pure (VkStructureType 1000143004))
+                             , ("VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR",                            pure (VkStructureType 1000147000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT",        pure (VkStructureType 1000148000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT",      pure (VkStructureType 1000148001))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT",          pure (VkStructureType 1000148002))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV",              pure (VkStructureType 1000149000))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV",            pure (VkStructureType 1000152000))
+                             , ("VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT",                             pure (VkStructureType 1000160000))
+                             , ("VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT",               pure (VkStructureType 1000160001))
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT",          pure (VkStructureType 1000161000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT",             pure (VkStructureType 1000161001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT",           pure (VkStructureType 1000161002))
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT",   pure (VkStructureType 1000161003))
+                             , ("VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT",  pure (VkStructureType 1000161004))
+                             , ("VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT",                 pure (VkStructureType 1000174000))
+                             , ("VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT",                          pure (VkStructureType 1000178000))
+                             , ("VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT",                           pure (VkStructureType 1000178001))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT",          pure (VkStructureType 1000178002))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD",                   pure (VkStructureType 1000185000))
+                             , ("VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT",      pure (VkStructureType 1000190000))
+                             , ("VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT",          pure (VkStructureType 1000190001))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkStructureType")
+                        v <- step readPrec
+                        pure (VkStructureType v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_APPLICATION_INFO"
+pattern VK_STRUCTURE_TYPE_APPLICATION_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_APPLICATION_INFO = VkStructureType 0
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO = VkStructureType 1
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO = VkStructureType 2
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO = VkStructureType 3
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SUBMIT_INFO"
+pattern VK_STRUCTURE_TYPE_SUBMIT_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SUBMIT_INFO = VkStructureType 4
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO"
+pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO = VkStructureType 5
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE"
+pattern VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE = VkStructureType 6
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO"
+pattern VK_STRUCTURE_TYPE_BIND_SPARSE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_SPARSE_INFO = VkStructureType 7
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_FENCE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_FENCE_CREATE_INFO = VkStructureType 8
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO = VkStructureType 9
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EVENT_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_EVENT_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EVENT_CREATE_INFO = VkStructureType 10
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO = VkStructureType 11
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO = VkStructureType 12
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO = VkStructureType 13
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO = VkStructureType 14
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO = VkStructureType 15
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO = VkStructureType 16
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO = VkStructureType 17
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO = VkStructureType 18
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO = VkStructureType 19
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO = VkStructureType 20
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO = VkStructureType 21
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO = VkStructureType 22
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO = VkStructureType 23
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO = VkStructureType 24
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO = VkStructureType 25
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO = VkStructureType 26
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO = VkStructureType 27
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO = VkStructureType 28
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO = VkStructureType 29
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO = VkStructureType 30
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO = VkStructureType 31
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO = VkStructureType 32
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO = VkStructureType 33
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO = VkStructureType 34
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET"
+pattern VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET :: VkStructureType
+pattern VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET = VkStructureType 35
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET"
+pattern VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET :: VkStructureType
+pattern VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET = VkStructureType 36
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO = VkStructureType 37
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO = VkStructureType 38
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO = VkStructureType 39
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO"
+pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO = VkStructureType 40
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO"
+pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO = VkStructureType 41
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO"
+pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO = VkStructureType 42
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO"
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO = VkStructureType 43
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER"
+pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER = VkStructureType 44
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER"
+pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER = VkStructureType 45
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_BARRIER"
+pattern VK_STRUCTURE_TYPE_MEMORY_BARRIER :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_BARRIER = VkStructureType 46
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_LOADER_INSTANCE_CREATE_INFO = VkStructureType 47
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_LOADER_DEVICE_CREATE_INFO = VkStructureType 48
+-- ** VkObjectType
+
+-- | 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
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsObjectNameInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.VkDebugUtilsObjectTagInfoEXT'
+newtype VkObjectType = VkObjectType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkObjectType where
+  showsPrec _ VK_OBJECT_TYPE_UNKNOWN = showString "VK_OBJECT_TYPE_UNKNOWN"
+  showsPrec _ VK_OBJECT_TYPE_INSTANCE = showString "VK_OBJECT_TYPE_INSTANCE"
+  showsPrec _ VK_OBJECT_TYPE_PHYSICAL_DEVICE = showString "VK_OBJECT_TYPE_PHYSICAL_DEVICE"
+  showsPrec _ VK_OBJECT_TYPE_DEVICE = showString "VK_OBJECT_TYPE_DEVICE"
+  showsPrec _ VK_OBJECT_TYPE_QUEUE = showString "VK_OBJECT_TYPE_QUEUE"
+  showsPrec _ VK_OBJECT_TYPE_SEMAPHORE = showString "VK_OBJECT_TYPE_SEMAPHORE"
+  showsPrec _ VK_OBJECT_TYPE_COMMAND_BUFFER = showString "VK_OBJECT_TYPE_COMMAND_BUFFER"
+  showsPrec _ VK_OBJECT_TYPE_FENCE = showString "VK_OBJECT_TYPE_FENCE"
+  showsPrec _ VK_OBJECT_TYPE_DEVICE_MEMORY = showString "VK_OBJECT_TYPE_DEVICE_MEMORY"
+  showsPrec _ VK_OBJECT_TYPE_BUFFER = showString "VK_OBJECT_TYPE_BUFFER"
+  showsPrec _ VK_OBJECT_TYPE_IMAGE = showString "VK_OBJECT_TYPE_IMAGE"
+  showsPrec _ VK_OBJECT_TYPE_EVENT = showString "VK_OBJECT_TYPE_EVENT"
+  showsPrec _ VK_OBJECT_TYPE_QUERY_POOL = showString "VK_OBJECT_TYPE_QUERY_POOL"
+  showsPrec _ VK_OBJECT_TYPE_BUFFER_VIEW = showString "VK_OBJECT_TYPE_BUFFER_VIEW"
+  showsPrec _ VK_OBJECT_TYPE_IMAGE_VIEW = showString "VK_OBJECT_TYPE_IMAGE_VIEW"
+  showsPrec _ VK_OBJECT_TYPE_SHADER_MODULE = showString "VK_OBJECT_TYPE_SHADER_MODULE"
+  showsPrec _ VK_OBJECT_TYPE_PIPELINE_CACHE = showString "VK_OBJECT_TYPE_PIPELINE_CACHE"
+  showsPrec _ VK_OBJECT_TYPE_PIPELINE_LAYOUT = showString "VK_OBJECT_TYPE_PIPELINE_LAYOUT"
+  showsPrec _ VK_OBJECT_TYPE_RENDER_PASS = showString "VK_OBJECT_TYPE_RENDER_PASS"
+  showsPrec _ VK_OBJECT_TYPE_PIPELINE = showString "VK_OBJECT_TYPE_PIPELINE"
+  showsPrec _ VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = showString "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"
+  showsPrec _ VK_OBJECT_TYPE_SAMPLER = showString "VK_OBJECT_TYPE_SAMPLER"
+  showsPrec _ VK_OBJECT_TYPE_DESCRIPTOR_POOL = showString "VK_OBJECT_TYPE_DESCRIPTOR_POOL"
+  showsPrec _ VK_OBJECT_TYPE_DESCRIPTOR_SET = showString "VK_OBJECT_TYPE_DESCRIPTOR_SET"
+  showsPrec _ VK_OBJECT_TYPE_FRAMEBUFFER = showString "VK_OBJECT_TYPE_FRAMEBUFFER"
+  showsPrec _ VK_OBJECT_TYPE_COMMAND_POOL = showString "VK_OBJECT_TYPE_COMMAND_POOL"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkObjectType 1000156000) = showString "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"
+  showsPrec _ (VkObjectType 1000085000) = showString "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"
+  showsPrec _ (VkObjectType 1000000000) = showString "VK_OBJECT_TYPE_SURFACE_KHR"
+  showsPrec _ (VkObjectType 1000001000) = showString "VK_OBJECT_TYPE_SWAPCHAIN_KHR"
+  showsPrec _ (VkObjectType 1000002000) = showString "VK_OBJECT_TYPE_DISPLAY_KHR"
+  showsPrec _ (VkObjectType 1000002001) = showString "VK_OBJECT_TYPE_DISPLAY_MODE_KHR"
+  showsPrec _ (VkObjectType 1000011000) = showString "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"
+  showsPrec _ (VkObjectType 1000086000) = showString "VK_OBJECT_TYPE_OBJECT_TABLE_NVX"
+  showsPrec _ (VkObjectType 1000086001) = showString "VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX"
+  showsPrec _ (VkObjectType 1000128000) = showString "VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"
+  showsPrec _ (VkObjectType 1000160000) = showString "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT"
+  showsPrec p (VkObjectType x) = showParen (p >= 11) (showString "VkObjectType " . showsPrec 11 x)
+
+instance Read VkObjectType where
+  readPrec = parens ( choose [ ("VK_OBJECT_TYPE_UNKNOWN",               pure VK_OBJECT_TYPE_UNKNOWN)
+                             , ("VK_OBJECT_TYPE_INSTANCE",              pure VK_OBJECT_TYPE_INSTANCE)
+                             , ("VK_OBJECT_TYPE_PHYSICAL_DEVICE",       pure VK_OBJECT_TYPE_PHYSICAL_DEVICE)
+                             , ("VK_OBJECT_TYPE_DEVICE",                pure VK_OBJECT_TYPE_DEVICE)
+                             , ("VK_OBJECT_TYPE_QUEUE",                 pure VK_OBJECT_TYPE_QUEUE)
+                             , ("VK_OBJECT_TYPE_SEMAPHORE",             pure VK_OBJECT_TYPE_SEMAPHORE)
+                             , ("VK_OBJECT_TYPE_COMMAND_BUFFER",        pure VK_OBJECT_TYPE_COMMAND_BUFFER)
+                             , ("VK_OBJECT_TYPE_FENCE",                 pure VK_OBJECT_TYPE_FENCE)
+                             , ("VK_OBJECT_TYPE_DEVICE_MEMORY",         pure VK_OBJECT_TYPE_DEVICE_MEMORY)
+                             , ("VK_OBJECT_TYPE_BUFFER",                pure VK_OBJECT_TYPE_BUFFER)
+                             , ("VK_OBJECT_TYPE_IMAGE",                 pure VK_OBJECT_TYPE_IMAGE)
+                             , ("VK_OBJECT_TYPE_EVENT",                 pure VK_OBJECT_TYPE_EVENT)
+                             , ("VK_OBJECT_TYPE_QUERY_POOL",            pure VK_OBJECT_TYPE_QUERY_POOL)
+                             , ("VK_OBJECT_TYPE_BUFFER_VIEW",           pure VK_OBJECT_TYPE_BUFFER_VIEW)
+                             , ("VK_OBJECT_TYPE_IMAGE_VIEW",            pure VK_OBJECT_TYPE_IMAGE_VIEW)
+                             , ("VK_OBJECT_TYPE_SHADER_MODULE",         pure VK_OBJECT_TYPE_SHADER_MODULE)
+                             , ("VK_OBJECT_TYPE_PIPELINE_CACHE",        pure VK_OBJECT_TYPE_PIPELINE_CACHE)
+                             , ("VK_OBJECT_TYPE_PIPELINE_LAYOUT",       pure VK_OBJECT_TYPE_PIPELINE_LAYOUT)
+                             , ("VK_OBJECT_TYPE_RENDER_PASS",           pure VK_OBJECT_TYPE_RENDER_PASS)
+                             , ("VK_OBJECT_TYPE_PIPELINE",              pure VK_OBJECT_TYPE_PIPELINE)
+                             , ("VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT", pure VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT)
+                             , ("VK_OBJECT_TYPE_SAMPLER",               pure VK_OBJECT_TYPE_SAMPLER)
+                             , ("VK_OBJECT_TYPE_DESCRIPTOR_POOL",       pure VK_OBJECT_TYPE_DESCRIPTOR_POOL)
+                             , ("VK_OBJECT_TYPE_DESCRIPTOR_SET",        pure VK_OBJECT_TYPE_DESCRIPTOR_SET)
+                             , ("VK_OBJECT_TYPE_FRAMEBUFFER",           pure VK_OBJECT_TYPE_FRAMEBUFFER)
+                             , ("VK_OBJECT_TYPE_COMMAND_POOL",          pure VK_OBJECT_TYPE_COMMAND_POOL)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION",     pure (VkObjectType 1000156000))
+                             , ("VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE",   pure (VkObjectType 1000085000))
+                             , ("VK_OBJECT_TYPE_SURFACE_KHR",                  pure (VkObjectType 1000000000))
+                             , ("VK_OBJECT_TYPE_SWAPCHAIN_KHR",                pure (VkObjectType 1000001000))
+                             , ("VK_OBJECT_TYPE_DISPLAY_KHR",                  pure (VkObjectType 1000002000))
+                             , ("VK_OBJECT_TYPE_DISPLAY_MODE_KHR",             pure (VkObjectType 1000002001))
+                             , ("VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT",    pure (VkObjectType 1000011000))
+                             , ("VK_OBJECT_TYPE_OBJECT_TABLE_NVX",             pure (VkObjectType 1000086000))
+                             , ("VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX", pure (VkObjectType 1000086001))
+                             , ("VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT",    pure (VkObjectType 1000128000))
+                             , ("VK_OBJECT_TYPE_VALIDATION_CACHE_EXT",         pure (VkObjectType 1000160000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkObjectType")
+                        v <- step readPrec
+                        pure (VkObjectType v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_UNKNOWN"
+pattern VK_OBJECT_TYPE_UNKNOWN :: VkObjectType
+pattern VK_OBJECT_TYPE_UNKNOWN = VkObjectType 0
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_INSTANCE"
+pattern VK_OBJECT_TYPE_INSTANCE :: VkObjectType
+pattern VK_OBJECT_TYPE_INSTANCE = VkObjectType 1
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PHYSICAL_DEVICE"
+pattern VK_OBJECT_TYPE_PHYSICAL_DEVICE :: VkObjectType
+pattern VK_OBJECT_TYPE_PHYSICAL_DEVICE = VkObjectType 2
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEVICE"
+pattern VK_OBJECT_TYPE_DEVICE :: VkObjectType
+pattern VK_OBJECT_TYPE_DEVICE = VkObjectType 3
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_QUEUE"
+pattern VK_OBJECT_TYPE_QUEUE :: VkObjectType
+pattern VK_OBJECT_TYPE_QUEUE = VkObjectType 4
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SEMAPHORE"
+pattern VK_OBJECT_TYPE_SEMAPHORE :: VkObjectType
+pattern VK_OBJECT_TYPE_SEMAPHORE = VkObjectType 5
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_COMMAND_BUFFER"
+pattern VK_OBJECT_TYPE_COMMAND_BUFFER :: VkObjectType
+pattern VK_OBJECT_TYPE_COMMAND_BUFFER = VkObjectType 6
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_FENCE"
+pattern VK_OBJECT_TYPE_FENCE :: VkObjectType
+pattern VK_OBJECT_TYPE_FENCE = VkObjectType 7
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEVICE_MEMORY"
+pattern VK_OBJECT_TYPE_DEVICE_MEMORY :: VkObjectType
+pattern VK_OBJECT_TYPE_DEVICE_MEMORY = VkObjectType 8
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_BUFFER"
+pattern VK_OBJECT_TYPE_BUFFER :: VkObjectType
+pattern VK_OBJECT_TYPE_BUFFER = VkObjectType 9
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_IMAGE"
+pattern VK_OBJECT_TYPE_IMAGE :: VkObjectType
+pattern VK_OBJECT_TYPE_IMAGE = VkObjectType 10
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_EVENT"
+pattern VK_OBJECT_TYPE_EVENT :: VkObjectType
+pattern VK_OBJECT_TYPE_EVENT = VkObjectType 11
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_QUERY_POOL"
+pattern VK_OBJECT_TYPE_QUERY_POOL :: VkObjectType
+pattern VK_OBJECT_TYPE_QUERY_POOL = VkObjectType 12
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_BUFFER_VIEW"
+pattern VK_OBJECT_TYPE_BUFFER_VIEW :: VkObjectType
+pattern VK_OBJECT_TYPE_BUFFER_VIEW = VkObjectType 13
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_IMAGE_VIEW"
+pattern VK_OBJECT_TYPE_IMAGE_VIEW :: VkObjectType
+pattern VK_OBJECT_TYPE_IMAGE_VIEW = VkObjectType 14
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SHADER_MODULE"
+pattern VK_OBJECT_TYPE_SHADER_MODULE :: VkObjectType
+pattern VK_OBJECT_TYPE_SHADER_MODULE = VkObjectType 15
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE_CACHE"
+pattern VK_OBJECT_TYPE_PIPELINE_CACHE :: VkObjectType
+pattern VK_OBJECT_TYPE_PIPELINE_CACHE = VkObjectType 16
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE_LAYOUT"
+pattern VK_OBJECT_TYPE_PIPELINE_LAYOUT :: VkObjectType
+pattern VK_OBJECT_TYPE_PIPELINE_LAYOUT = VkObjectType 17
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_RENDER_PASS"
+pattern VK_OBJECT_TYPE_RENDER_PASS :: VkObjectType
+pattern VK_OBJECT_TYPE_RENDER_PASS = VkObjectType 18
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_PIPELINE"
+pattern VK_OBJECT_TYPE_PIPELINE :: VkObjectType
+pattern VK_OBJECT_TYPE_PIPELINE = VkObjectType 19
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT"
+pattern VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT :: VkObjectType
+pattern VK_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT = VkObjectType 20
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SAMPLER"
+pattern VK_OBJECT_TYPE_SAMPLER :: VkObjectType
+pattern VK_OBJECT_TYPE_SAMPLER = VkObjectType 21
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_POOL"
+pattern VK_OBJECT_TYPE_DESCRIPTOR_POOL :: VkObjectType
+pattern VK_OBJECT_TYPE_DESCRIPTOR_POOL = VkObjectType 22
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_SET"
+pattern VK_OBJECT_TYPE_DESCRIPTOR_SET :: VkObjectType
+pattern VK_OBJECT_TYPE_DESCRIPTOR_SET = VkObjectType 23
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_FRAMEBUFFER"
+pattern VK_OBJECT_TYPE_FRAMEBUFFER :: VkObjectType
+pattern VK_OBJECT_TYPE_FRAMEBUFFER = VkObjectType 24
+
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_COMMAND_POOL"
+pattern VK_OBJECT_TYPE_COMMAND_POOL :: VkObjectType
+pattern VK_OBJECT_TYPE_COMMAND_POOL = VkObjectType 25
+-- | 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.
+-- Instead, a @Vk*Flags@ type which is an alias of @VkFlags@, and whose
+-- name matches the corresponding @Vk*FlagBits@ that are valid for that
+-- 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/DescriptorSet.hs
@@ -0,0 +1,1739 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorType(..)
+  , pattern VK_DESCRIPTOR_TYPE_SAMPLER
+  , pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER
+  , pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE
+  , pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE
+  , pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER
+  , pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER
+  , pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER
+  , pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER
+  , pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC
+  , pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC
+  , pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT
+  , VkDescriptorSetLayoutCreateFlagBits(..)
+  , VkDescriptorPoolCreateFlagBits(..)
+  , pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT
+  , VkDescriptorPoolResetFlags(..)
+  , VkDescriptorSet
+  , VkDescriptorPool
+  , vkCreateDescriptorSetLayout
+  , vkDestroyDescriptorSetLayout
+  , vkCreateDescriptorPool
+  , vkDestroyDescriptorPool
+  , vkResetDescriptorPool
+  , vkAllocateDescriptorSets
+  , vkFreeDescriptorSets
+  , vkUpdateDescriptorSets
+  , VkDescriptorBufferInfo(..)
+  , VkDescriptorImageInfo(..)
+  , VkWriteDescriptorSet(..)
+  , VkCopyDescriptorSet(..)
+  , VkDescriptorSetLayoutBinding(..)
+  , VkDescriptorSetLayoutCreateInfo(..)
+  , VkDescriptorPoolSize(..)
+  , VkDescriptorPoolCreateInfo(..)
+  , VkDescriptorSetAllocateInfo(..)
+  , VkDescriptorSetLayoutCreateFlags
+  , VkDescriptorPoolCreateFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.BufferView
+  ( VkBufferView
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  )
+import Graphics.Vulkan.Core10.ImageView
+  ( VkImageView
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  )
+import Graphics.Vulkan.Core10.PipelineLayout
+  ( VkShaderStageFlags
+  , VkDescriptorSetLayout
+  )
+import Graphics.Vulkan.Core10.Sampler
+  ( VkSampler
+  )
+
+
+-- ** VkDescriptorType
+
+-- | VkDescriptorType - Specifies the type of a descriptor in a descriptor
+-- set
+--
+-- = Description
+-- #_description#
+--
+-- -   @VK_DESCRIPTOR_TYPE_SAMPLER@ specifies a
+--     <{html_spec_relative}#descriptorsets-sampler sampler descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ specifies a
+--     <{html_spec_relative}#descriptorsets-combinedimagesampler combined image sampler descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ specifies a
+--     <{html_spec_relative}#descriptorsets-sampledimage sampled image descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ specifies a
+--     <{html_spec_relative}#descriptorsets-storageimage storage image descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ specifies a
+--     <{html_spec_relative}#descriptorsets-uniformtexelbuffer uniform texel buffer descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ specifies a
+--     <{html_spec_relative}#descriptorsets-storagetexelbuffer storage texel buffer descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ specifies a
+--     <{html_spec_relative}#descriptorsets-uniformbuffer uniform buffer descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ specifies a
+--     <{html_spec_relative}#descriptorsets-storagebuffer storage buffer descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ specifies a
+--     <{html_spec_relative}#descriptorsets-uniformbufferdynamic dynamic uniform buffer descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ specifies a
+--     <{html_spec_relative}#descriptorsets-storagebufferdynamic dynamic storage buffer descriptor>.
+--
+-- -   @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ specifies a
+--     <{html_spec_relative}#descriptorsets-inputattachment input attachment descriptor>.
+--
+-- When a descriptor set is updated via elements of 'VkWriteDescriptorSet',
+-- members of @pImageInfo@, @pBufferInfo@ and @pTexelBufferView@ are only
+-- accessed by the implementation when they correspond to descriptor type
+-- being defined - otherwise they are ignored. The members accessed are as
+-- follows for each descriptor type:
+--
+-- -   For @VK_DESCRIPTOR_TYPE_SAMPLER@, only the @sample@ member of each
+--     element of 'VkWriteDescriptorSet'::@pImageInfo@ is accessed.
+--
+-- -   For @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@, only the @imageView@ and
+--     @imageLayout@ members of each element of
+--     'VkWriteDescriptorSet'::@pImageInfo@ are accessed.
+--
+-- -   For @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, all members of each
+--     element of 'VkWriteDescriptorSet'::@pImageInfo@ are accessed.
+--
+-- -   For @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@, or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, all members of each
+--     element of 'VkWriteDescriptorSet'::@pBufferInfo@ are accessed.
+--
+-- -   For @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@, each element of
+--     'VkWriteDescriptorSet'::@pTexelBufferView@ is accessed.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorPoolSize', 'VkDescriptorSetLayoutBinding',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.VkDescriptorUpdateTemplateEntry',
+-- 'VkWriteDescriptorSet'
+newtype VkDescriptorType = VkDescriptorType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDescriptorType where
+  showsPrec _ VK_DESCRIPTOR_TYPE_SAMPLER = showString "VK_DESCRIPTOR_TYPE_SAMPLER"
+  showsPrec _ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = showString "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
+  showsPrec _ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = showString "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"
+  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = showString "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"
+  showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = showString "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
+  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = showString "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
+  showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = showString "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"
+  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = showString "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"
+  showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = showString "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
+  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = showString "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
+  showsPrec _ VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = showString "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
+  showsPrec p (VkDescriptorType x) = showParen (p >= 11) (showString "VkDescriptorType " . showsPrec 11 x)
+
+instance Read VkDescriptorType where
+  readPrec = parens ( choose [ ("VK_DESCRIPTOR_TYPE_SAMPLER",                pure VK_DESCRIPTOR_TYPE_SAMPLER)
+                             , ("VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER", pure VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
+                             , ("VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE",          pure VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE)
+                             , ("VK_DESCRIPTOR_TYPE_STORAGE_IMAGE",          pure VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)
+                             , ("VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER",   pure VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER)
+                             , ("VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER",   pure VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)
+                             , ("VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER",         pure VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)
+                             , ("VK_DESCRIPTOR_TYPE_STORAGE_BUFFER",         pure VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
+                             , ("VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC", pure VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)
+                             , ("VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", pure VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
+                             , ("VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT",       pure VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDescriptorType")
+                        v <- step readPrec
+                        pure (VkDescriptorType v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_SAMPLER"
+pattern VK_DESCRIPTOR_TYPE_SAMPLER :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_SAMPLER = VkDescriptorType 0
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
+pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = VkDescriptorType 1
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"
+pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = VkDescriptorType 2
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"
+pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = VkDescriptorType 3
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
+pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = VkDescriptorType 4
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
+pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = VkDescriptorType 5
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"
+pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = VkDescriptorType 6
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"
+pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = VkDescriptorType 7
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
+pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = VkDescriptorType 8
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
+pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = VkDescriptorType 9
+
+-- No documentation found for Nested "VkDescriptorType" "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
+pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT :: VkDescriptorType
+pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = VkDescriptorType 10
+-- ** VkDescriptorSetLayoutCreateFlagBits
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDescriptorSetLayoutCreateFlagBits where
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkDescriptorSetLayoutCreateFlagBits 0x00000001) = showString "VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR"
+  showsPrec _ (VkDescriptorSetLayoutCreateFlagBits 0x00000002) = showString "VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT"
+  showsPrec p (VkDescriptorSetLayoutCreateFlagBits x) = showParen (p >= 11) (showString "VkDescriptorSetLayoutCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkDescriptorSetLayoutCreateFlagBits where
+  readPrec = parens ( choose [ -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR",        pure (VkDescriptorSetLayoutCreateFlagBits 0x00000001))
+                             , ("VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT", pure (VkDescriptorSetLayoutCreateFlagBits 0x00000002))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDescriptorSetLayoutCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkDescriptorSetLayoutCreateFlagBits v)
+                        )
+                    )
+
+
+-- ** VkDescriptorPoolCreateFlagBits
+
+-- | VkDescriptorPoolCreateFlagBits - Bitmask specifying certain supported
+-- operations on a descriptor pool
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorPoolCreateFlags'
+newtype VkDescriptorPoolCreateFlagBits = VkDescriptorPoolCreateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDescriptorPoolCreateFlagBits where
+  showsPrec _ VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = showString "VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkDescriptorPoolCreateFlagBits 0x00000002) = showString "VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT"
+  showsPrec p (VkDescriptorPoolCreateFlagBits x) = showParen (p >= 11) (showString "VkDescriptorPoolCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkDescriptorPoolCreateFlagBits where
+  readPrec = parens ( choose [ ("VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT", pure VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT", pure (VkDescriptorPoolCreateFlagBits 0x00000002))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDescriptorPoolCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkDescriptorPoolCreateFlagBits v)
+                        )
+                    )
+
+-- | @VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT@ specifies that
+-- descriptor sets /can/ return their individual allocations to the pool,
+-- i.e. all of 'vkAllocateDescriptorSets', 'vkFreeDescriptorSets', and
+-- 'vkResetDescriptorPool' are allowed. Otherwise, descriptor sets
+-- allocated from the pool /must/ not be individually freed back to the
+-- pool, i.e. only 'vkAllocateDescriptorSets' and 'vkResetDescriptorPool'
+-- are allowed.
+pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT :: VkDescriptorPoolCreateFlagBits
+pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = VkDescriptorPoolCreateFlagBits 0x00000001
+-- ** VkDescriptorPoolResetFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDescriptorPoolResetFlags where
+  
+  showsPrec p (VkDescriptorPoolResetFlags x) = showParen (p >= 11) (showString "VkDescriptorPoolResetFlags " . showsPrec 11 x)
+
+instance Read VkDescriptorPoolResetFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDescriptorPoolResetFlags")
+                        v <- step readPrec
+                        pure (VkDescriptorPoolResetFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'VkWriteDescriptorSet', 'vkAllocateDescriptorSets',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindDescriptorSets',
+-- 'vkFreeDescriptorSets',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplate',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkUpdateDescriptorSetWithTemplateKHR'
+type VkDescriptorSet = Ptr VkDescriptorSet_T
+-- | Dummy data to tag the 'Ptr' with
+data VkDescriptorPool_T
+-- | VkDescriptorPool - Opaque handle to a descriptor pool object
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorSetAllocateInfo', 'vkCreateDescriptorPool',
+-- 'vkDestroyDescriptorPool', 'vkFreeDescriptorSets',
+-- 'vkResetDescriptorPool'
+type VkDescriptorPool = Ptr VkDescriptorPool_T
+-- | vkCreateDescriptorSetLayout - Create a new descriptor set layout
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the descriptor set
+--     layout.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkDescriptorSetLayoutCreateInfo' structure specifying the state of
+--     the descriptor set layout object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDescriptorSetLayoutCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSetLayout@ /must/ be a valid pointer to a @VkDescriptorSetLayout@
+--     handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkDescriptorSetLayoutCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkCreateDescriptorSetLayout" vkCreateDescriptorSetLayout :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkDescriptorSetLayoutCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSetLayout" ::: Ptr VkDescriptorSetLayout) -> IO VkResult
+-- | vkDestroyDescriptorSetLayout - Destroy a descriptor set layout object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that destroys the descriptor set
+--     layout.
+--
+-- -   @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#
+--
+-- == 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 @descriptorSetLayout@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @descriptorSetLayout@ /must/ be a valid @VkDescriptorSetLayout@
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @descriptorSetLayout@ is a valid handle, it /must/ have been
+--     created, allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorSetLayout@ /must/ be externally
+--     synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.PipelineLayout.VkDescriptorSetLayout',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDestroyDescriptorSetLayout" vkDestroyDescriptorSetLayout :: ("device" ::: VkDevice) -> ("descriptorSetLayout" ::: VkDescriptorSetLayout) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkCreateDescriptorPool - Creates a descriptor pool object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the descriptor pool.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkDescriptorPoolCreateInfo' structure specifying the state of the
+--     descriptor pool object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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.
+--
+-- The created descriptor pool is returned in @pDescriptorPool@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDescriptorPoolCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pDescriptorPool@ /must/ be a valid pointer to a @VkDescriptorPool@
+--     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_FRAGMENTATION_EXT@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDescriptorPool', 'VkDescriptorPoolCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkCreateDescriptorPool" vkCreateDescriptorPool :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkDescriptorPoolCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pDescriptorPool" ::: Ptr VkDescriptorPool) -> IO VkResult
+-- | 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.
+--
+-- = Description
+-- #_description#
+--
+-- When a pool is destroyed, all descriptor sets allocated from the pool
+-- are implicitly freed and become invalid. Descriptor sets allocated from
+-- a given pool do not need to be freed before destroying that descriptor
+-- pool.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @descriptorPool@ (via any
+--     allocated descriptor sets) /must/ have completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @descriptorPool@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @descriptorPool@
+--     was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @descriptorPool@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @descriptorPool@
+--     /must/ be a valid @VkDescriptorPool@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @descriptorPool@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorPool@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDescriptorPool',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDestroyDescriptorPool" vkDestroyDescriptorPool :: ("device" ::: VkDevice) -> ("descriptorPool" ::: VkDescriptorPool) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkResetDescriptorPool - Resets a descriptor pool object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the descriptor pool.
+--
+-- -   @descriptorPool@ is the descriptor pool to be reset.
+--
+-- -   @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
+-- descriptor pool, and the descriptor sets are implicitly freed.
+--
+-- == Valid Usage
+--
+-- -   All uses of @descriptorPool@ (via any allocated descriptor sets)
+--     /must/ have completed execution
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @descriptorPool@ /must/ be a valid @VkDescriptorPool@ handle
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @descriptorPool@ /must/ have been created, allocated, or retrieved
+--     from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorPool@ /must/ be externally synchronized
+--
+-- -   Host access to any @VkDescriptorSet@ objects allocated from
+--     @descriptorPool@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorPool', 'VkDescriptorPoolResetFlags',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkResetDescriptorPool" vkResetDescriptorPool :: ("device" ::: VkDevice) -> ("descriptorPool" ::: VkDescriptorPool) -> ("flags" ::: VkDescriptorPoolResetFlags) -> IO VkResult
+-- | vkAllocateDescriptorSets - Allocate one or more descriptor sets
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the descriptor pool.
+--
+-- -   @pAllocateInfo@ is a pointer to an instance of the
+--     'VkDescriptorSetAllocateInfo' structure describing parameters of the
+--     allocation.
+--
+-- -   @pDescriptorSets@ is a pointer to an array of @VkDescriptorSet@
+--     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__
+--
+-- 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.
+--
+-- 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.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
+--     @VkDescriptorSetAllocateInfo@ structure
+--
+-- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
+--     @pAllocateInfo@::descriptorSetCount @VkDescriptorSet@ handles
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pAllocateInfo@::descriptorPool /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_FRAGMENTED_POOL@
+--
+--     -   @VK_ERROR_OUT_OF_POOL_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorSet', 'VkDescriptorSetAllocateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkAllocateDescriptorSets" vkAllocateDescriptorSets :: ("device" ::: VkDevice) -> ("pAllocateInfo" ::: Ptr VkDescriptorSetAllocateInfo) -> ("pDescriptorSets" ::: Ptr VkDescriptorSet) -> IO VkResult
+-- | vkFreeDescriptorSets - Free one or more descriptor sets
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the descriptor pool.
+--
+-- -   @descriptorPool@ is the descriptor pool from which the descriptor
+--     sets were allocated.
+--
+-- -   @descriptorSetCount@ is the number of elements in the
+--     @pDescriptorSets@ array.
+--
+-- -   @pDescriptorSets@ is an array of handles to @VkDescriptorSet@
+--     objects.
+--
+-- = Description
+-- #_description#
+--
+-- After a successful call to @vkFreeDescriptorSets@, all descriptor sets
+-- in @pDescriptorSets@ are invalid.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to any element of
+--     @pDescriptorSets@ /must/ have completed execution
+--
+-- -   @pDescriptorSets@ /must/ be a valid pointer to an array of
+--     @descriptorSetCount@ @VkDescriptorSet@ handles, each element of
+--     which /must/ either be a valid handle or
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   Each valid handle in @pDescriptorSets@ /must/ have been allocated
+--     from @descriptorPool@
+--
+-- -   @descriptorPool@ /must/ have been created with the
+--     @VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT@ flag
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @descriptorPool@ /must/ be a valid @VkDescriptorPool@ handle
+--
+-- -   @descriptorSetCount@ /must/ be greater than @0@
+--
+-- -   @descriptorPool@ /must/ have been created, allocated, or retrieved
+--     from @device@
+--
+-- -   Each element of @pDescriptorSets@ that is a valid handle /must/ have
+--     been created, allocated, or retrieved from @descriptorPool@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @descriptorPool@ /must/ be externally synchronized
+--
+-- -   Host access to each member of @pDescriptorSets@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorPool', 'VkDescriptorSet',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkFreeDescriptorSets" vkFreeDescriptorSets :: ("device" ::: VkDevice) -> ("descriptorPool" ::: VkDescriptorPool) -> ("descriptorSetCount" ::: Word32) -> ("pDescriptorSets" ::: Ptr VkDescriptorSet) -> IO VkResult
+-- | vkUpdateDescriptorSets - Update the contents of a descriptor set object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that updates the descriptor sets.
+--
+-- -   @descriptorWriteCount@ is the number of elements in the
+--     @pDescriptorWrites@ array.
+--
+-- -   @pDescriptorWrites@ is a pointer to an array of
+--     'VkWriteDescriptorSet' structures describing the descriptor sets to
+--     write to.
+--
+-- -   @descriptorCopyCount@ is the number of elements in the
+--     @pDescriptorCopies@ array.
+--
+-- -   @pDescriptorCopies@ is a pointer to an array of
+--     'VkCopyDescriptorSet' structures describing the descriptor sets to
+--     copy between.
+--
+-- = Description
+-- #_description#
+--
+-- The operations described by @pDescriptorWrites@ are performed first,
+-- followed by the operations described by @pDescriptorCopies@. Within each
+-- array, the operations are performed in the order they appear in the
+-- array.
+--
+-- Each element in the @pDescriptorWrites@ array describes an operation
+-- updating the descriptor set using descriptors for resources specified in
+-- the structure.
+--
+-- Each element in the @pDescriptorCopies@ array is a 'VkCopyDescriptorSet'
+-- structure describing an operation copying descriptors between sets.
+--
+-- 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>,
+-- that command buffer becomes
+-- <{html_spec_relative}#commandbuffers-lifecycle invalid>.
+--
+-- == 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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @descriptorWriteCount@ is not @0@, @pDescriptorWrites@ /must/ be
+--     a valid pointer to an array of @descriptorWriteCount@ valid
+--     @VkWriteDescriptorSet@ structures
+--
+-- -   If @descriptorCopyCount@ is not @0@, @pDescriptorCopies@ /must/ be a
+--     valid pointer to an array of @descriptorCopyCount@ valid
+--     @VkCopyDescriptorSet@ structures
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pDescriptorWrites@[].dstSet /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pDescriptorCopies@[].dstSet /must/ be externally
+--     synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCopyDescriptorSet',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkWriteDescriptorSet'
+foreign import ccall "vkUpdateDescriptorSets" vkUpdateDescriptorSets :: ("device" ::: VkDevice) -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr VkWriteDescriptorSet) -> ("descriptorCopyCount" ::: Word32) -> ("pDescriptorCopies" ::: Ptr VkCopyDescriptorSet) -> IO ()
+-- | 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>
+-- or
+-- <{html_spec_relative}#features-limits-maxStorageBufferRange 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@.
+--
+-- For @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ and
+-- @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ descriptor types, @offset@
+-- is the base offset from which the dynamic offset is applied and @range@
+-- is the static size used for all dynamic offsets.
+--
+-- == Valid Usage
+--
+-- -   @offset@ /must/ be less than the size of @buffer@
+--
+-- -   If @range@ is not equal to @VK_WHOLE_SIZE@, @range@ /must/ be
+--     greater than @0@
+--
+-- -   If @range@ is not equal to @VK_WHOLE_SIZE@, @range@ /must/ be less
+--     than or equal to the size of @buffer@ minus @offset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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"
+  vkBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkDescriptorBufferInfo" "vkOffset"
+  vkOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkDescriptorBufferInfo" "vkRange"
+  vkRange :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorBufferInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDescriptorBufferInfo <$> peek (ptr `plusPtr` 0)
+                                    <*> peek (ptr `plusPtr` 8)
+                                    <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkDescriptorBufferInfo))
+                *> poke (ptr `plusPtr` 8) (vkOffset (poked :: VkDescriptorBufferInfo))
+                *> poke (ptr `plusPtr` 16) (vkRange (poked :: VkDescriptorBufferInfo))
+-- | 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
+--
+-- -   @imageLayout@ /must/ match the actual
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' of each subresource
+--     accessible from @imageView@ at the time this descriptor is accessed
+--
+-- == 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"
+  vkSampler :: VkSampler
+  , -- No documentation found for Nested "VkDescriptorImageInfo" "vkImageView"
+  vkImageView :: VkImageView
+  , -- No documentation found for Nested "VkDescriptorImageInfo" "vkImageLayout"
+  vkImageLayout :: VkImageLayout
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorImageInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDescriptorImageInfo <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSampler (poked :: VkDescriptorImageInfo))
+                *> poke (ptr `plusPtr` 8) (vkImageView (poked :: VkDescriptorImageInfo))
+                *> poke (ptr `plusPtr` 16) (vkImageLayout (poked :: VkDescriptorImageInfo))
+-- | VkWriteDescriptorSet - Structure specifying the parameters of a
+-- descriptor set write operation
+--
+-- = Description
+-- #_description#
+--
+-- Only one of @pImageInfo@, @pBufferInfo@, or @pTexelBufferView@ members
+-- is used according to the descriptor type specified in the
+-- @descriptorType@ member of the containing @VkWriteDescriptorSet@
+-- structure, as specified below.
+--
+-- If the @dstBinding@ has fewer than @descriptorCount@ array elements
+-- remaining starting from @dstArrayElement@, then the remainder will be
+-- used to update the subsequent binding - @dstBinding@+1 starting at array
+-- element zero. If a binding has a @descriptorCount@ of zero, it is
+-- skipped. This behavior applies recursively, with the update affecting
+-- consecutive bindings as needed to update all @descriptorCount@
+-- descriptors.
+--
+-- == Valid Usage
+--
+-- -   @dstBinding@ /must/ be less than or equal to the maximum value of
+--     @binding@ of all 'VkDescriptorSetLayoutBinding' structures specified
+--     when @dstSet@’s descriptor set layout was created
+--
+-- -   @dstBinding@ /must/ be a binding with a non-zero @descriptorCount@
+--
+-- -   All consecutive bindings updated via a single @VkWriteDescriptorSet@
+--     structure, except those with a @descriptorCount@ of zero, /must/
+--     have identical @descriptorType@ and @stageFlags@.
+--
+-- -   All consecutive bindings updated via a single @VkWriteDescriptorSet@
+--     structure, except those with a @descriptorCount@ of zero, /must/ all
+--     either use immutable samplers or /must/ all not use immutable
+--     samplers.
+--
+-- -   @descriptorType@ /must/ match the type of @dstBinding@ within
+--     @dstSet@
+--
+-- -   @dstSet@ /must/ be a valid 'VkDescriptorSet' handle
+--
+-- -   The sum of @dstArrayElement@ and @descriptorCount@ /must/ be less
+--     than or equal to the number of array elements in the descriptor set
+--     binding specified by @dstBinding@, and all applicable consecutive
+--     bindings, as described by
+--     <{html_spec_relative}#descriptorsets-updates-consecutive {html_spec_relative}#descriptorsets-updates-consecutive>
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@, @pImageInfo@ /must/ be a
+--     valid pointer to an array of @descriptorCount@ valid
+--     @VkDescriptorImageInfo@ structures
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@, @pTexelBufferView@ /must/
+--     be a valid pointer to an array of @descriptorCount@ valid
+--     @VkBufferView@ handles
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@, or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, @pBufferInfo@ /must/ be
+--     a valid pointer to an array of @descriptorCount@ valid
+--     @VkDescriptorBufferInfo@ structures
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_SAMPLER@ or
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, and @dstSet@ was not
+--     allocated with a layout that included immutable samplers for
+--     @dstBinding@ with @descriptorType@, the @sampler@ member of each
+--     element of @pImageInfo@ /must/ be a valid @VkSampler@ object
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, or
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@, the @imageView@ and
+--     @imageLayout@ members of each element of @pImageInfo@ /must/ be a
+--     valid @VkImageView@ and
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout', respectively
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, for each
+--     descriptor that will be accessed via load or store operations the
+--     @imageLayout@ member for corresponding elements of @pImageInfo@
+--     /must/ be @VK_IMAGE_LAYOUT_GENERAL@
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@, the @offset@ member of
+--     each element of @pBufferInfo@ /must/ be a multiple of
+--     @VkPhysicalDeviceLimits@::@minUniformBufferOffsetAlignment@
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, the @offset@ member of
+--     each element of @pBufferInfo@ /must/ be a multiple of
+--     @VkPhysicalDeviceLimits@::@minStorageBufferOffsetAlignment@
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@,
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@,
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@, or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, and the @buffer@ member
+--     of any element of @pBufferInfo@ is the handle of a non-sparse
+--     buffer, then that buffer /must/ be bound completely and contiguously
+--     to a single @VkDeviceMemory@ object
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@, the @buffer@ member of
+--     each element of @pBufferInfo@ /must/ have been created with
+--     @VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT@ set
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, the @buffer@ member of
+--     each element of @pBufferInfo@ /must/ have been created with
+--     @VK_BUFFER_USAGE_STORAGE_BUFFER_BIT@ set
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@, the @range@ member of
+--     each element of @pBufferInfo@, or the effective range if @range@ is
+--     @VK_WHOLE_SIZE@, /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxUniformBufferRange@
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@, the @range@ member of
+--     each element of @pBufferInfo@, or the effective range if @range@ is
+--     @VK_WHOLE_SIZE@, /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxStorageBufferRange@
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@,
+--     the @VkBuffer@ that each element of @pTexelBufferView@ was created
+--     from /must/ have been created with
+--     @VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT@ set
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@,
+--     the @VkBuffer@ that each element of @pTexelBufferView@ was created
+--     from /must/ have been created with
+--     @VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT@ set
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ or
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@, the @imageView@ member of
+--     each element of @pImageInfo@ /must/ have been created with the
+--     identity swizzle
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ or
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, the @imageView@ member
+--     of each element of @pImageInfo@ /must/ have been created with
+--     @VK_IMAGE_USAGE_SAMPLED_BIT@ set
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ or
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, the @imageLayout@
+--     member of each element of @pImageInfo@ /must/ be
+--     @VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL@,
+--     @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ or
+--     @VK_IMAGE_LAYOUT_GENERAL@
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@, the
+--     @imageView@ member of each element of @pImageInfo@ /must/ have been
+--     created with @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ set
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@, the
+--     @imageView@ member of each element of @pImageInfo@ /must/ have been
+--     created with @VK_IMAGE_USAGE_STORAGE_BIT@ set
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @descriptorType@ /must/ be a valid 'VkDescriptorType' value
+--
+-- -   @descriptorCount@ /must/ be greater than @0@
+--
+-- -   Both of @dstSet@, and the elements of @pTexelBufferView@ that are
+--     valid handles /must/ have been created, allocated, or retrieved from
+--     the same @VkDevice@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.BufferView.VkBufferView',
+-- 'VkDescriptorBufferInfo', 'VkDescriptorImageInfo', 'VkDescriptorSet',
+-- 'VkDescriptorType', 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetKHR',
+-- 'vkUpdateDescriptorSets'
+data VkWriteDescriptorSet = VkWriteDescriptorSet
+  { -- No documentation found for Nested "VkWriteDescriptorSet" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDstSet"
+  vkDstSet :: VkDescriptorSet
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDstBinding"
+  vkDstBinding :: Word32
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDstArrayElement"
+  vkDstArrayElement :: Word32
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDescriptorCount"
+  vkDescriptorCount :: Word32
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkDescriptorType"
+  vkDescriptorType :: VkDescriptorType
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPImageInfo"
+  vkPImageInfo :: Ptr VkDescriptorImageInfo
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPBufferInfo"
+  vkPBufferInfo :: Ptr VkDescriptorBufferInfo
+  , -- No documentation found for Nested "VkWriteDescriptorSet" "vkPTexelBufferView"
+  vkPTexelBufferView :: Ptr VkBufferView
+  }
+  deriving (Eq, Show)
+
+instance Storable VkWriteDescriptorSet where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkWriteDescriptorSet <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 16) (vkDstSet (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 24) (vkDstBinding (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 28) (vkDstArrayElement (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 32) (vkDescriptorCount (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 36) (vkDescriptorType (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 40) (vkPImageInfo (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 48) (vkPBufferInfo (poked :: VkWriteDescriptorSet))
+                *> poke (ptr `plusPtr` 56) (vkPTexelBufferView (poked :: VkWriteDescriptorSet))
+-- | VkCopyDescriptorSet - Structure specifying a copy descriptor set
+-- operation
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @srcBinding@ /must/ be a valid binding within @srcSet@
+--
+-- -   The sum of @srcArrayElement@ and @descriptorCount@ /must/ be less
+--     than or equal to the number of array elements in the descriptor set
+--     binding specified by @srcBinding@, and all applicable consecutive
+--     bindings, as described by
+--     <{html_spec_relative}#descriptorsets-updates-consecutive {html_spec_relative}#descriptorsets-updates-consecutive>
+--
+-- -   @dstBinding@ /must/ be a valid binding within @dstSet@
+--
+-- -   The sum of @dstArrayElement@ and @descriptorCount@ /must/ be less
+--     than or equal to the number of array elements in the descriptor set
+--     binding specified by @dstBinding@, and all applicable consecutive
+--     bindings, as described by
+--     <{html_spec_relative}#descriptorsets-updates-consecutive {html_spec_relative}#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>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @srcSet@ /must/ be a valid @VkDescriptorSet@ handle
+--
+-- -   @dstSet@ /must/ be a valid @VkDescriptorSet@ handle
+--
+-- -   Both of @dstSet@, and @srcSet@ /must/ have been created, allocated,
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkSrcSet"
+  vkSrcSet :: VkDescriptorSet
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkSrcBinding"
+  vkSrcBinding :: Word32
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkSrcArrayElement"
+  vkSrcArrayElement :: Word32
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDstSet"
+  vkDstSet :: VkDescriptorSet
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDstBinding"
+  vkDstBinding :: Word32
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDstArrayElement"
+  vkDstArrayElement :: Word32
+  , -- No documentation found for Nested "VkCopyDescriptorSet" "vkDescriptorCount"
+  vkDescriptorCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkCopyDescriptorSet where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkCopyDescriptorSet <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 16)
+                                 <*> peek (ptr `plusPtr` 24)
+                                 <*> peek (ptr `plusPtr` 28)
+                                 <*> peek (ptr `plusPtr` 32)
+                                 <*> peek (ptr `plusPtr` 40)
+                                 <*> peek (ptr `plusPtr` 44)
+                                 <*> peek (ptr `plusPtr` 48)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 16) (vkSrcSet (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 24) (vkSrcBinding (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 28) (vkSrcArrayElement (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 32) (vkDstSet (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 40) (vkDstBinding (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 44) (vkDstArrayElement (poked :: VkCopyDescriptorSet))
+                *> poke (ptr `plusPtr` 48) (vkDescriptorCount (poked :: VkCopyDescriptorSet))
+-- | VkDescriptorSetLayoutBinding - Structure specifying a descriptor set
+-- 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.
+--
+-- -   @descriptorType@ is a 'VkDescriptorType' specifying which type of
+--     resource descriptors are used for this binding.
+--
+-- -   @descriptorCount@ is the number of descriptors contained in the
+--     binding, accessed in a shader as an array. If @descriptorCount@ is
+--     zero this binding entry is reserved and the resource /must/ not be
+--     accessed from any stage via this binding within any pipeline using
+--     the set layout.
+--
+-- -   @stageFlags@ member is a bitmask of
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' specifying
+--     which pipeline shader stages /can/ access a resource for this
+--     binding. @VK_SHADER_STAGE_ALL@ is a shorthand specifying that all
+--     defined shader stages, including any additional stages defined by
+--     extensions, /can/ access the resource.
+--
+--     If a shader stage is not included in @stageFlags@, then a resource
+--     /must/ not be accessed from that stage via this binding within any
+--     pipeline using the set layout. Other than input attachments which
+--     are limited to the fragment shader, there are no limitations on what
+--     combinations of stages /can/ use a descriptor binding, and in
+--     particular a binding /can/ be used by both graphics stages and the
+--     compute stage.
+--
+-- = Description
+-- #_description#
+--
+-- -   @pImmutableSamplers@ affects initialization of samplers. If
+--     @descriptorType@ specifies a @VK_DESCRIPTOR_TYPE_SAMPLER@ or
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@ type descriptor, then
+--     @pImmutableSamplers@ /can/ be used to initialize a set of /immutable
+--     samplers/. Immutable samplers are permanently bound into the set
+--     layout; later binding a sampler into an immutable sampler slot in a
+--     descriptor set is not allowed. If @pImmutableSamplers@ is not
+--     @NULL@, then it is considered to be a pointer to an array of sampler
+--     handles that will be consumed by the set layout and used for the
+--     corresponding binding. If @pImmutableSamplers@ is @NULL@, then the
+--     sampler slots are dynamic and sampler handles /must/ be bound into
+--     descriptor sets using this layout. If @descriptorType@ is not one of
+--     these descriptor types, then @pImmutableSamplers@ is ignored.
+--
+-- The above layout definition allows the descriptor bindings to be
+-- specified sparsely such that not all binding numbers between 0 and the
+-- maximum binding number need to be specified in the @pBindings@ array.
+-- Bindings that are not specified have a @descriptorCount@ and
+-- @stageFlags@ of zero, and the @descriptorType@ is treated as undefined.
+-- However, all binding numbers between 0 and the maximum binding number in
+-- the 'VkDescriptorSetLayoutCreateInfo'::@pBindings@ array /may/ consume
+-- memory in the descriptor set layout even if not all descriptor bindings
+-- are used, though it /should/ not consume additional memory from the
+-- descriptor pool.
+--
+-- __Note__
+--
+-- The maximum binding number specified /should/ be as compact as possible
+-- to avoid wasted memory.
+--
+-- == Valid Usage
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_SAMPLER@ or
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, and @descriptorCount@
+--     is not @0@ and @pImmutableSamplers@ is not @NULL@,
+--     @pImmutableSamplers@ /must/ be a valid pointer to an array of
+--     @descriptorCount@ valid @VkSampler@ handles
+--
+-- -   If @descriptorCount@ is not @0@, @stageFlags@ /must/ be a valid
+--     combination of
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' values
+--
+-- -   If @descriptorType@ is @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ and
+--     @descriptorCount@ is not @0@, then @stageFlags@ /must/ be @0@ or
+--     @VK_SHADER_STAGE_FRAGMENT_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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"
+  vkBinding :: Word32
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkDescriptorType"
+  vkDescriptorType :: VkDescriptorType
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkDescriptorCount"
+  vkDescriptorCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkStageFlags"
+  vkStageFlags :: VkShaderStageFlags
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBinding" "vkPImmutableSamplers"
+  vkPImmutableSamplers :: Ptr VkSampler
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorSetLayoutBinding where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDescriptorSetLayoutBinding <$> 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) (vkBinding (poked :: VkDescriptorSetLayoutBinding))
+                *> poke (ptr `plusPtr` 4) (vkDescriptorType (poked :: VkDescriptorSetLayoutBinding))
+                *> poke (ptr `plusPtr` 8) (vkDescriptorCount (poked :: VkDescriptorSetLayoutBinding))
+                *> poke (ptr `plusPtr` 12) (vkStageFlags (poked :: VkDescriptorSetLayoutBinding))
+                *> poke (ptr `plusPtr` 16) (vkPImmutableSamplers (poked :: VkDescriptorSetLayoutBinding))
+-- | 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.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkDescriptorSetLayoutBindingFlagsCreateInfoEXT'
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkDescriptorSetLayoutCreateFlagBits' values
+--
+-- -   If @bindingCount@ is not @0@, @pBindings@ /must/ be a valid pointer
+--     to an array of @bindingCount@ valid @VkDescriptorSetLayoutBinding@
+--     structures
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorSetLayoutBinding', 'VkDescriptorSetLayoutCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateDescriptorSetLayout',
+-- '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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkFlags"
+  vkFlags :: VkDescriptorSetLayoutCreateFlags
+  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkBindingCount"
+  vkBindingCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorSetLayoutCreateInfo" "vkPBindings"
+  vkPBindings :: Ptr VkDescriptorSetLayoutBinding
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorSetLayoutCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDescriptorSetLayoutCreateInfo <$> 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 :: VkDescriptorSetLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorSetLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkBindingCount (poked :: VkDescriptorSetLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPBindings (poked :: VkDescriptorSetLayoutCreateInfo))
+-- | VkDescriptorPoolSize - Structure specifying descriptor pool size
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @descriptorCount@ /must/ be greater than @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid 'VkDescriptorType' value
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorPoolCreateInfo', 'VkDescriptorType'
+data VkDescriptorPoolSize = VkDescriptorPoolSize
+  { -- No documentation found for Nested "VkDescriptorPoolSize" "vkType"
+  vkType :: VkDescriptorType
+  , -- No documentation found for Nested "VkDescriptorPoolSize" "vkDescriptorCount"
+  vkDescriptorCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorPoolSize where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkDescriptorPoolSize <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkDescriptorPoolSize))
+                *> poke (ptr `plusPtr` 4) (vkDescriptorCount (poked :: VkDescriptorPoolSize))
+-- | VkDescriptorPoolCreateInfo - Structure specifying parameters of a newly
+-- 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
+-- number of descriptors of each type.
+--
+-- Fragmentation of a descriptor pool is possible and /may/ lead to
+-- descriptor set allocation failures. A failure due to fragmentation is
+-- defined as failing a descriptor set allocation despite the sum of all
+-- outstanding descriptor set allocations from the pool plus the requested
+-- allocation requiring no more than the total number of descriptors
+-- requested at pool creation. Implementations provide certain guarantees
+-- of when fragmentation /must/ not cause allocation failure, as described
+-- below.
+--
+-- If a descriptor pool has not had any descriptor sets freed since it was
+-- created or most recently reset then fragmentation /must/ not cause an
+-- allocation failure (note that this is always the case for a pool created
+-- without the @VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT@ bit
+-- set). Additionally, if all sets allocated from the pool since it was
+-- created or most recently reset use the same number of descriptors (of
+-- each type) and the requested allocation also uses that same number of
+-- descriptors (of each type), then fragmentation /must/ not cause an
+-- allocation failure.
+--
+-- If an allocation failure occurs due to fragmentation, an application
+-- /can/ create an additional descriptor pool to perform further descriptor
+-- set allocations.
+--
+-- == Valid Usage
+--
+-- -   @maxSets@ /must/ be greater than @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkDescriptorPoolCreateFlagBits' values
+--
+-- -   @pPoolSizes@ /must/ be a valid pointer to an array of
+--     @poolSizeCount@ valid @VkDescriptorPoolSize@ structures
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkFlags"
+  vkFlags :: VkDescriptorPoolCreateFlags
+  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkMaxSets"
+  vkMaxSets :: Word32
+  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkPoolSizeCount"
+  vkPoolSizeCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorPoolCreateInfo" "vkPPoolSizes"
+  vkPPoolSizes :: Ptr VkDescriptorPoolSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorPoolCreateInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDescriptorPoolCreateInfo <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+                                        <*> peek (ptr `plusPtr` 20)
+                                        <*> peek (ptr `plusPtr` 24)
+                                        <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorPoolCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorPoolCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorPoolCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkMaxSets (poked :: VkDescriptorPoolCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPoolSizeCount (poked :: VkDescriptorPoolCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPPoolSizes (poked :: VkDescriptorPoolCreateInfo))
+-- | 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@
+--
+-- -   @descriptorPool@ /must/ have enough free descriptor capacity
+--     remaining to allocate the descriptor sets of the specified layouts
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkDescriptorSetVariableDescriptorCountAllocateInfoEXT'
+--
+-- -   @descriptorPool@ /must/ be a valid @VkDescriptorPool@ handle
+--
+-- -   @pSetLayouts@ /must/ be a valid pointer to an array of
+--     @descriptorSetCount@ valid @VkDescriptorSetLayout@ handles
+--
+-- -   @descriptorSetCount@ /must/ be greater than @0@
+--
+-- -   Both of @descriptorPool@, and the elements of @pSetLayouts@ /must/
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkDescriptorPool"
+  vkDescriptorPool :: VkDescriptorPool
+  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkDescriptorSetCount"
+  vkDescriptorSetCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorSetAllocateInfo" "vkPSetLayouts"
+  vkPSetLayouts :: Ptr VkDescriptorSetLayout
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorSetAllocateInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDescriptorSetAllocateInfo <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+                                         <*> peek (ptr `plusPtr` 24)
+                                         <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetAllocateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetAllocateInfo))
+                *> poke (ptr `plusPtr` 16) (vkDescriptorPool (poked :: VkDescriptorSetAllocateInfo))
+                *> poke (ptr `plusPtr` 24) (vkDescriptorSetCount (poked :: VkDescriptorSetAllocateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPSetLayouts (poked :: VkDescriptorSetAllocateInfo))
+-- | VkDescriptorSetLayoutCreateFlags - Bitmask of
+-- 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Device.hs
@@ -0,0 +1,463 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Device
+  ( VkDeviceCreateFlags(..)
+  , VkDeviceQueueCreateFlagBits(..)
+  , vkCreateDevice
+  , vkDestroyDevice
+  , VkDeviceQueueCreateInfo(..)
+  , VkDeviceCreateInfo(..)
+  , VkDeviceQueueCreateFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CChar(..)
+  , CFloat(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDeviceFeatures(..)
+  , VkDevice
+  , VkAllocationCallbacks(..)
+  , VkPhysicalDevice
+  )
+
+
+-- ** VkDeviceCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDeviceCreateFlags where
+  
+  showsPrec p (VkDeviceCreateFlags x) = showParen (p >= 11) (showString "VkDeviceCreateFlags " . showsPrec 11 x)
+
+instance Read VkDeviceCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDeviceCreateFlags")
+                        v <- step readPrec
+                        pure (VkDeviceCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkDeviceQueueCreateFlagBits
+
+-- | VkDeviceQueueCreateFlagBits - Bitmask specifying behavior of the queue
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDeviceQueueCreateFlags'
+newtype VkDeviceQueueCreateFlagBits = VkDeviceQueueCreateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDeviceQueueCreateFlagBits where
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkDeviceQueueCreateFlagBits 0x00000001) = showString "VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT"
+  showsPrec p (VkDeviceQueueCreateFlagBits x) = showParen (p >= 11) (showString "VkDeviceQueueCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkDeviceQueueCreateFlagBits where
+  readPrec = parens ( choose [ -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT", pure (VkDeviceQueueCreateFlagBits 0x00000001))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDeviceQueueCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkDeviceQueueCreateFlagBits v)
+                        )
+                    )
+
+
+-- | 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>).
+--
+-- -   @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.
+--
+-- -   @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
+-- @pCreateInfo@, respectively, are supported by the implementation. If any
+-- requested extension is not supported, @vkCreateDevice@ /must/ return
+-- @VK_ERROR_EXTENSION_NOT_PRESENT@. If any requested feature is not
+-- supported, @vkCreateDevice@ /must/ return
+-- @VK_ERROR_FEATURE_NOT_PRESENT@. Support for extensions /can/ be checked
+-- before creating a device by querying
+-- 'Graphics.Vulkan.Core10.ExtensionDiscovery.vkEnumerateDeviceExtensionProperties'.
+-- Support for features /can/ similarly be checked by querying
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFeatures'.
+--
+-- After verifying and enabling the extensions the @VkDevice@ 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.
+--
+-- Multiple logical devices /can/ be created from the same physical device.
+-- Logical device creation /may/ fail due to lack of device-specific
+-- resources (in addition to the other errors). If that occurs,
+-- @vkCreateDevice@ will return @VK_ERROR_TOO_MANY_OBJECTS@.
+--
+-- == Valid Usage
+--
+-- -   All
+--     <{html_spec_relative}#extended-functionality-extensions-dependencies required extensions>
+--     for each extension in the
+--     'VkDeviceCreateInfo'::@ppEnabledExtensionNames@ list /must/ also be
+--     present in that list.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDeviceCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pDevice@ /must/ be a valid pointer to a @VkDevice@ 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_EXTENSION_NOT_PRESENT@
+--
+--     -   @VK_ERROR_FEATURE_NOT_PRESENT@
+--
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDeviceCreateInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkCreateDevice" vkCreateDevice :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pCreateInfo" ::: Ptr VkDeviceCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pDevice" ::: Ptr VkDevice) -> IO VkResult
+-- | 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.
+--
+-- = Description
+-- #_description#
+--
+-- To ensure that no work is active on the device,
+-- 'Graphics.Vulkan.Core10.Queue.vkDeviceWaitIdle' /can/ be used to gate
+-- the destruction of the device. Prior to destroying a device, an
+-- application is responsible for destroying\/freeing any Vulkan objects
+-- that were created using that device as the first parameter of the
+-- corresponding @vkCreate*@ or @vkAllocate*@ command.
+--
+-- __Note__
+--
+-- The lifetime of each of these objects is bound by the lifetime of the
+-- @VkDevice@ object. Therefore, to avoid resource leaks, it is critical
+-- that an application explicitly free all of these resources prior to
+-- calling @vkDestroyDevice@.
+--
+-- == Valid Usage
+--
+-- -   All child objects created on @device@ /must/ have been destroyed
+--     prior to destroying @device@
+--
+-- -   If @VkAllocationCallbacks@ were provided when @device@ was created,
+--     a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @device@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @device@ is not @NULL@, @device@ /must/ be a valid @VkDevice@
+--     handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @device@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDestroyDevice" vkDestroyDevice :: ("device" ::: VkDevice) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | VkDeviceQueueCreateInfo - Structure specifying parameters of a newly
+-- created device queue
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by @vkGetPhysicalDeviceQueueFamilyProperties@
+--
+-- -   @queueCount@ /must/ be less than or equal to the @queueCount@ member
+--     of the @VkQueueFamilyProperties@ structure, as returned by
+--     @vkGetPhysicalDeviceQueueFamilyProperties@ in the
+--     @pQueueFamilyProperties@[@queueFamilyIndex@]
+--
+-- -   Each element of @pQueuePriorities@ /must/ be between @0.0@ and @1.0@
+--     inclusive
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_global_priority.VkDeviceQueueGlobalPriorityCreateInfoEXT'
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkDeviceQueueCreateFlagBits' values
+--
+-- -   @pQueuePriorities@ /must/ be a valid pointer to an array of
+--     @queueCount@ @float@ values
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkFlags"
+  vkFlags :: VkDeviceQueueCreateFlags
+  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkQueueFamilyIndex"
+  vkQueueFamilyIndex :: Word32
+  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkQueueCount"
+  vkQueueCount :: Word32
+  , -- No documentation found for Nested "VkDeviceQueueCreateInfo" "vkPQueuePriorities"
+  vkPQueuePriorities :: Ptr CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceQueueCreateInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDeviceQueueCreateInfo <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 16)
+                                     <*> peek (ptr `plusPtr` 20)
+                                     <*> peek (ptr `plusPtr` 24)
+                                     <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceQueueCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceQueueCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceQueueCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkDeviceQueueCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkQueueCount (poked :: VkDeviceQueueCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPQueuePriorities (poked :: VkDeviceQueueCreateInfo))
+-- | 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@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation.VkDeviceGroupDeviceCreateInfo',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage.VkPhysicalDevice16BitStorageFeatures',
+--     'Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing.VkPhysicalDeviceDescriptorIndexingFeaturesEXT',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkPhysicalDeviceMultiviewFeatures',
+--     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkPhysicalDeviceProtectedMemoryFeatures',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkPhysicalDeviceSamplerYcbcrConversionFeatures',
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers.VkPhysicalDeviceVariablePointerFeatures'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @pQueueCreateInfos@ /must/ be a valid pointer to an array of
+--     @queueCreateInfoCount@ valid @VkDeviceQueueCreateInfo@ structures
+--
+-- -   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
+--
+-- -   If @pEnabledFeatures@ is not @NULL@, @pEnabledFeatures@ /must/ be a
+--     valid pointer to a valid @VkPhysicalDeviceFeatures@ structure
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkFlags"
+  vkFlags :: VkDeviceCreateFlags
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkQueueCreateInfoCount"
+  vkQueueCreateInfoCount :: Word32
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPQueueCreateInfos"
+  vkPQueueCreateInfos :: Ptr VkDeviceQueueCreateInfo
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkEnabledLayerCount"
+  vkEnabledLayerCount :: Word32
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPPEnabledLayerNames"
+  vkPPEnabledLayerNames :: Ptr (Ptr CChar)
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkEnabledExtensionCount"
+  vkEnabledExtensionCount :: Word32
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPPEnabledExtensionNames"
+  vkPPEnabledExtensionNames :: Ptr (Ptr CChar)
+  , -- No documentation found for Nested "VkDeviceCreateInfo" "vkPEnabledFeatures"
+  vkPEnabledFeatures :: Ptr VkPhysicalDeviceFeatures
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceCreateInfo where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkDeviceCreateInfo <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkQueueCreateInfoCount (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPQueueCreateInfos (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPPEnabledLayerNames (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkPPEnabledExtensionNames (poked :: VkDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 64) (vkPEnabledFeatures (poked :: VkDeviceCreateInfo))
+-- | 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'
+type VkDeviceQueueCreateFlags = VkDeviceQueueCreateFlagBits
diff --git a/src/Graphics/Vulkan/Core10/DeviceInitialization.hs b/src/Graphics/Vulkan/Core10/DeviceInitialization.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/DeviceInitialization.hs
@@ -0,0 +1,5289 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageTiling(..)
+  , pattern VK_IMAGE_TILING_OPTIMAL
+  , pattern VK_IMAGE_TILING_LINEAR
+  , VkImageType(..)
+  , pattern VK_IMAGE_TYPE_1D
+  , pattern VK_IMAGE_TYPE_2D
+  , pattern VK_IMAGE_TYPE_3D
+  , VkPhysicalDeviceType(..)
+  , pattern VK_PHYSICAL_DEVICE_TYPE_OTHER
+  , pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
+  , pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU
+  , pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU
+  , pattern VK_PHYSICAL_DEVICE_TYPE_CPU
+  , VkSystemAllocationScope(..)
+  , pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND
+  , pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT
+  , pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE
+  , pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE
+  , pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE
+  , VkInternalAllocationType(..)
+  , pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE
+  , VkInstanceCreateFlags(..)
+  , VkQueueFlagBits(..)
+  , pattern VK_QUEUE_GRAPHICS_BIT
+  , pattern VK_QUEUE_COMPUTE_BIT
+  , pattern VK_QUEUE_TRANSFER_BIT
+  , pattern VK_QUEUE_SPARSE_BINDING_BIT
+  , VkMemoryPropertyFlagBits(..)
+  , pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT
+  , pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT
+  , pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT
+  , pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT
+  , pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT
+  , VkMemoryHeapFlagBits(..)
+  , pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT
+  , VkImageUsageFlagBits(..)
+  , pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT
+  , pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT
+  , pattern VK_IMAGE_USAGE_SAMPLED_BIT
+  , pattern VK_IMAGE_USAGE_STORAGE_BIT
+  , pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT
+  , pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT
+  , pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT
+  , pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT
+  , VkImageCreateFlagBits(..)
+  , pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT
+  , pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT
+  , pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT
+  , pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT
+  , pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT
+  , VkFormatFeatureFlagBits(..)
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT
+  , pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT
+  , pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT
+  , pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT
+  , pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT
+  , pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT
+  , pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT
+  , pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT
+  , pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT
+  , pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT
+  , pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT
+  , pattern VK_FORMAT_FEATURE_BLIT_DST_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT
+  , VkSampleCountFlagBits(..)
+  , pattern VK_SAMPLE_COUNT_1_BIT
+  , pattern VK_SAMPLE_COUNT_2_BIT
+  , pattern VK_SAMPLE_COUNT_4_BIT
+  , pattern VK_SAMPLE_COUNT_8_BIT
+  , pattern VK_SAMPLE_COUNT_16_BIT
+  , pattern VK_SAMPLE_COUNT_32_BIT
+  , pattern VK_SAMPLE_COUNT_64_BIT
+  , VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
+  , pattern VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
+  , VK_UUID_SIZE
+  , pattern VK_UUID_SIZE
+  , VK_MAX_MEMORY_TYPES
+  , pattern VK_MAX_MEMORY_TYPES
+  , VK_MAX_MEMORY_HEAPS
+  , pattern VK_MAX_MEMORY_HEAPS
+  , PFN_vkInternalAllocationNotification
+  , PFN_vkInternalFreeNotification
+  , PFN_vkReallocationFunction
+  , PFN_vkAllocationFunction
+  , PFN_vkFreeFunction
+  , PFN_vkVoidFunction
+  , VkInstance
+  , VkPhysicalDevice
+  , VkDevice
+  , vkCreateInstance
+  , vkDestroyInstance
+  , vkEnumeratePhysicalDevices
+  , vkGetDeviceProcAddr
+  , vkGetInstanceProcAddr
+  , vkGetPhysicalDeviceProperties
+  , vkGetPhysicalDeviceQueueFamilyProperties
+  , vkGetPhysicalDeviceMemoryProperties
+  , vkGetPhysicalDeviceFeatures
+  , vkGetPhysicalDeviceFormatProperties
+  , vkGetPhysicalDeviceImageFormatProperties
+  , VkExtent3D(..)
+  , VkPhysicalDeviceProperties(..)
+  , VkApplicationInfo(..)
+  , VkAllocationCallbacks(..)
+  , VkInstanceCreateInfo(..)
+  , VkQueueFamilyProperties(..)
+  , VkPhysicalDeviceMemoryProperties(..)
+  , VkMemoryType(..)
+  , VkMemoryHeap(..)
+  , VkFormatProperties(..)
+  , VkImageFormatProperties(..)
+  , VkPhysicalDeviceFeatures(..)
+  , VkPhysicalDeviceSparseProperties(..)
+  , VkPhysicalDeviceLimits(..)
+  , VkQueueFlags
+  , VkMemoryPropertyFlags
+  , VkMemoryHeapFlags
+  , VkImageUsageFlags
+  , VkImageCreateFlags
+  , VkFormatFeatureFlags
+  , VkSampleCountFlags
+  , VkDeviceSize
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word64
+  , Word32
+  , Word8
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  , CSize(..)
+  , CChar(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkFormat(..)
+  , VkResult(..)
+  , VkFlags
+  )
+
+
+-- ** VkImageTiling
+
+-- | VkImageTiling - Specifies the tiling arrangement of data in an image
+--
+-- = See Also
+-- #_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.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkAndroidHardwareBufferPropertiesANDROID',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindBufferMemoryInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2.VkBindImageMemoryInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferCopy',
+-- 'Graphics.Vulkan.Core10.Buffer.VkBufferCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferImageCopy',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkBufferMemoryBarrier',
+-- 'Graphics.Vulkan.Core10.BufferView.VkBufferViewCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkCmdProcessCommandsInfoNVX',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo',
+-- 'VkImageFormatProperties',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkIndirectCommandsTokenNVX',
+-- 'Graphics.Vulkan.Core10.Memory.VkMappedMemoryRange',
+-- 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo', 'VkMemoryHeap',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_external_memory_host.VkPhysicalDeviceExternalMemoryHostPropertiesEXT',
+-- 'VkPhysicalDeviceLimits',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3.VkPhysicalDeviceMaintenance3Properties',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryBind',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryRequirements',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseMemoryBind',
+-- 'Graphics.Vulkan.Core10.Image.VkSubresourceLayout',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindBufferMemory',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindImageMemory',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindIndexBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindVertexBuffers',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDispatchIndirect',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexedIndirect',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndexedIndirectCountAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndirect',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndirectCountAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdFillBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdUpdateBuffer',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.vkCmdWriteBufferMarkerAMD',
+-- 'Graphics.Vulkan.Core10.Memory.vkGetDeviceMemoryCommitment',
+-- 'Graphics.Vulkan.Core10.Query.vkGetQueryPoolResults',
+-- 'Graphics.Vulkan.Core10.Memory.vkMapMemory'
+type VkDeviceSize = Word64
diff --git a/src/Graphics/Vulkan/Core10/Event.hs b/src/Graphics/Vulkan/Core10/Event.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Event.hs
@@ -0,0 +1,413 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Event
+  ( VkEventCreateFlags(..)
+  , VkEvent
+  , vkCreateEvent
+  , vkDestroyEvent
+  , vkGetEventStatus
+  , vkSetEvent
+  , vkResetEvent
+  , VkEventCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+
+
+-- ** VkEventCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkEventCreateFlags where
+  
+  showsPrec p (VkEventCreateFlags x) = showParen (p >= 11) (showString "VkEventCreateFlags " . showsPrec 11 x)
+
+instance Read VkEventCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkEventCreateFlags")
+                        v <- step readPrec
+                        pure (VkEventCreateFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdWaitEvents',
+-- 'vkCreateEvent', 'vkDestroyEvent', 'vkGetEventStatus', 'vkResetEvent',
+-- 'vkSetEvent'
+type VkEvent = Ptr VkEvent_T
+-- | vkCreateEvent - Create a new event object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the event.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the @VkEventCreateInfo@
+--     structure which contains information about how the event is to be
+--     created.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkEventCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pEvent@ /must/ be a valid pointer to a @VkEvent@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkEventCreateInfo'
+foreign import ccall "vkCreateEvent" vkCreateEvent :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkEventCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pEvent" ::: Ptr VkEvent) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @event@ /must/ have completed
+--     execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @event@ was created, a
+--     compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @event@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @event@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @event@ /must/ be a valid @VkEvent@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @event@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @event@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkEvent'
+foreign import ccall "vkDestroyEvent" vkDestroyEvent :: ("device" ::: VkDevice) -> ("event" ::: VkEvent) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | 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
+--
+-- 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.
+--
+-- The state of an event /can/ be updated by the host. The state of the
+-- event is immediately changed, and subsequent calls to @vkGetEventStatus@
+-- will return the new state. If an event is already in the requested
+-- state, then updating it to the same state has no effect.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @event@ /must/ be a valid @VkEvent@ handle
+--
+-- -   @event@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_EVENT_SET@
+--
+--     -   @VK_EVENT_RESET@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @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.
+--
+-- If @event@ is already in the signaled state when 'vkSetEvent' is
+-- executed, then 'vkSetEvent' has no effect, and no event signal operation
+-- occurs.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @event@ /must/ be a valid @VkEvent@ handle
+--
+-- -   @event@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @event@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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.
+--
+-- If @event@ is already in the unsignaled state when 'vkResetEvent' is
+-- executed, then 'vkResetEvent' has no effect, and no event unsignal
+-- operation occurs.
+--
+-- == Valid Usage
+--
+-- -   @event@ /must/ not be waited on by a @vkCmdWaitEvents@ command that
+--     is currently executing
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @event@ /must/ be a valid @VkEvent@ handle
+--
+-- -   @event@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @event@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkEventCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkEventCreateInfo" "vkFlags"
+  vkFlags :: VkEventCreateFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkEventCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkEventCreateInfo <$> peek (ptr `plusPtr` 0)
+                               <*> peek (ptr `plusPtr` 8)
+                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkEventCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkEventCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkEventCreateInfo))
diff --git a/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs b/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/ExtensionDiscovery.hs
@@ -0,0 +1,207 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.ExtensionDiscovery
+  ( VK_MAX_EXTENSION_NAME_SIZE
+  , pattern VK_MAX_EXTENSION_NAME_SIZE
+  , vkEnumerateInstanceExtensionProperties
+  , vkEnumerateDeviceExtensionProperties
+  , VkExtensionProperties(..)
+  ) where
+
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CChar(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+
+
+-- No documentation found for TopLevel "VK_MAX_EXTENSION_NAME_SIZE"
+type VK_MAX_EXTENSION_NAME_SIZE = 256
+-- No documentation found for Nested "Integral a => a" "VK_MAX_EXTENSION_NAME_SIZE"
+pattern VK_MAX_EXTENSION_NAME_SIZE :: Integral a => a
+pattern VK_MAX_EXTENSION_NAME_SIZE = 256
+-- | vkEnumerateInstanceExtensionProperties - Returns up to requested number
+-- 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.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     extension properties available or queried, as described below.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'VkExtensionProperties' structures.
+--
+-- = Description
+-- #_description#
+--
+-- When @pLayerName@ parameter is @NULL@, only extensions provided by the
+-- Vulkan implementation or by implicitly enabled layers are returned. When
+-- @pLayerName@ is the name of a layer, the instance extensions provided by
+-- that layer are returned.
+--
+-- If @pProperties@ is @NULL@, then the number of extensions properties
+-- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
+-- /must/ point to a variable set by the user to the number of elements in
+-- the @pProperties@ array, and on return the variable is overwritten with
+-- the number of structures actually written to @pProperties@. If
+-- @pPropertyCount@ is less than the number of extension properties
+-- available, at most @pPropertyCount@ structures will be written. If
+-- @pPropertyCount@ is smaller than the number of extensions available,
+-- @VK_INCOMPLETE@ will be returned instead of @VK_SUCCESS@, to indicate
+-- that not all the available properties were returned.
+--
+-- Because the list of available layers may change externally between calls
+-- to @vkEnumerateInstanceExtensionProperties@, two calls may retrieve
+-- different results if a @pLayerName@ is available in one call but not in
+-- another. The extensions supported by a layer may also change between two
+-- calls, e.g. if the layer implementation is replaced by a different
+-- version between those calls.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   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@ @VkExtensionProperties@ structures
+--
+-- == 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_LAYER_NOT_PRESENT@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkExtensionProperties'
+foreign import ccall "vkEnumerateInstanceExtensionProperties" vkEnumerateInstanceExtensionProperties :: ("pLayerName" ::: Ptr CChar) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkExtensionProperties) -> IO VkResult
+-- | vkEnumerateDeviceExtensionProperties - Returns properties of available
+-- physical device extensions
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device that will be queried.
+--
+-- -   @pLayerName@ is either @NULL@ or a pointer to a null-terminated
+--     UTF-8 string naming the layer to retrieve extensions from.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     extension properties available or queried, and is treated in the
+--     same fashion as the
+--     'vkEnumerateInstanceExtensionProperties'::@pPropertyCount@
+--     parameter.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'VkExtensionProperties' structures.
+--
+-- = Description
+-- #_description#
+--
+-- When @pLayerName@ parameter is @NULL@, only extensions provided by the
+-- Vulkan implementation or by implicitly enabled layers are returned. When
+-- @pLayerName@ is the name of a layer, the device extensions provided by
+-- that layer are returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   If @pLayerName@ is not @NULL@, @pLayerName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- -   @pPropertyCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   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@ @VkExtensionProperties@ structures
+--
+-- == 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_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"
+  vkExtensionName :: Vector VK_MAX_EXTENSION_NAME_SIZE CChar
+  , -- No documentation found for Nested "VkExtensionProperties" "vkSpecVersion"
+  vkSpecVersion :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExtensionProperties where
+  sizeOf ~_ = 260
+  alignment ~_ = 4
+  peek ptr = VkExtensionProperties <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 256)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkExtensionName (poked :: VkExtensionProperties))
+                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkExtensionProperties))
diff --git a/src/Graphics/Vulkan/Core10/Fence.hs b/src/Graphics/Vulkan/Core10/Fence.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Fence.hs
@@ -0,0 +1,477 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Fence
+  ( VkFenceCreateFlagBits(..)
+  , pattern VK_FENCE_CREATE_SIGNALED_BIT
+  , vkCreateFence
+  , vkDestroyFence
+  , vkResetFences
+  , vkGetFenceStatus
+  , vkWaitForFences
+  , VkFenceCreateInfo(..)
+  , VkFenceCreateFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word64
+  , Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkBool32(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkFence
+  )
+
+
+-- ** VkFenceCreateFlagBits
+
+-- | VkFenceCreateFlagBits - Bitmask specifying initial state and behavior of
+-- a fence
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkFenceCreateFlags'
+newtype VkFenceCreateFlagBits = VkFenceCreateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkFenceCreateFlagBits where
+  showsPrec _ VK_FENCE_CREATE_SIGNALED_BIT = showString "VK_FENCE_CREATE_SIGNALED_BIT"
+  showsPrec p (VkFenceCreateFlagBits x) = showParen (p >= 11) (showString "VkFenceCreateFlagBits " . showsPrec 11 x)
+
+instance Read VkFenceCreateFlagBits where
+  readPrec = parens ( choose [ ("VK_FENCE_CREATE_SIGNALED_BIT", pure VK_FENCE_CREATE_SIGNALED_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkFenceCreateFlagBits")
+                        v <- step readPrec
+                        pure (VkFenceCreateFlagBits v)
+                        )
+                    )
+
+-- | @VK_FENCE_CREATE_SIGNALED_BIT@ specifies that the fence object is
+-- created in the signaled state. Otherwise, it is created in the
+-- unsignaled state.
+pattern VK_FENCE_CREATE_SIGNALED_BIT :: VkFenceCreateFlagBits
+pattern VK_FENCE_CREATE_SIGNALED_BIT = VkFenceCreateFlagBits 0x00000001
+-- | vkCreateFence - Create a new fence object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the fence.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the @VkFenceCreateInfo@
+--     structure which contains information about how the fence is to be
+--     created.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkFenceCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pFence@ /must/ be a valid pointer to a @VkFence@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Core10.Queue.VkFence', 'VkFenceCreateInfo'
+foreign import ccall "vkCreateFence" vkCreateFence :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkFenceCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pFence" ::: Ptr VkFence) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All <{html_spec_relative}#devsandqueues-submission queue submission>
+--     commands that refer to @fence@ /must/ have completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @fence@ was created, a
+--     compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @fence@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @fence@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @fence@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Queue.VkFence'
+foreign import ccall "vkDestroyFence" vkDestroyFence :: ("device" ::: VkDevice) -> ("fence" ::: VkFence) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkResetFences - Resets one or more fence objects
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the fences.
+--
+-- -   @fenceCount@ is the number of fences to reset.
+--
+-- -   @pFences@ is a pointer to an array of fence handles to reset.
+--
+-- = Description
+-- #_description#
+--
+-- When 'vkResetFences' is executed on the host, it defines a /fence
+-- unsignal operation/ for each fence, which resets the fence to the
+-- unsignaled state.
+--
+-- If any member of @pFences@ is already in the unsignaled state when
+-- 'vkResetFences' is executed, then 'vkResetFences' has no effect on that
+-- fence.
+--
+-- == Valid Usage
+--
+-- -   Each element of @pFences@ /must/ not be currently associated with
+--     any queue command that has not yet completed execution on that queue
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@
+--     valid @VkFence@ handles
+--
+-- -   @fenceCount@ /must/ be greater than @0@
+--
+-- -   Each element of @pFences@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to each member of @pFences@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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'
+foreign import ccall "vkResetFences" vkResetFences :: ("device" ::: VkDevice) -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr VkFence) -> IO VkResult
+-- | 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
+--
+-- If a <{html_spec_relative}#devsandqueues-submission queue 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>),
+-- @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@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   @fence@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_NOT_READY@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Queue.VkFence'
+foreign import ccall "vkGetFenceStatus" vkGetFenceStatus :: ("device" ::: VkDevice) -> ("fence" ::: VkFence) -> IO VkResult
+-- | vkWaitForFences - Wait for one or more fences to become signaled
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the fences.
+--
+-- -   @fenceCount@ is the number of fences to wait on.
+--
+-- -   @pFences@ is a pointer to an array of @fenceCount@ fence handles.
+--
+-- -   @waitAll@ is the condition that /must/ be satisfied to successfully
+--     unblock the wait. If @waitAll@ is @VK_TRUE@, then the condition is
+--     that all fences in @pFences@ are signaled. Otherwise, the condition
+--     is that at least one fence in @pFences@ is signaled.
+--
+-- -   @timeout@ is the timeout period in units of nanoseconds. @timeout@
+--     is adjusted to the closest value allowed by the
+--     implementation-dependent timeout accuracy, which /may/ be
+--     substantially longer than one nanosecond, and /may/ be longer than
+--     the requested period.
+--
+-- = Description
+-- #_description#
+--
+-- If the condition is satisfied when @vkWaitForFences@ is called, then
+-- @vkWaitForFences@ returns immediately. If the condition is not satisfied
+-- at the time @vkWaitForFences@ is called, then @vkWaitForFences@ will
+-- block and wait up to @timeout@ nanoseconds for the condition to become
+-- satisfied.
+--
+-- If @timeout@ is zero, then @vkWaitForFences@ does not wait, but simply
+-- returns the current state of the fences. @VK_TIMEOUT@ will be returned
+-- in this case if the condition is not satisfied, even though no actual
+-- wait was performed.
+--
+-- If the specified timeout period expires before the condition is
+-- satisfied, @vkWaitForFences@ returns @VK_TIMEOUT@. If the condition is
+-- 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@.
+--
+-- __Note__
+--
+-- While we guarantee that @vkWaitForFences@ /must/ return in finite time,
+-- no guarantees are made that it returns immediately upon device loss.
+-- However, the client can reasonably expect that the delay will be on the
+-- order of seconds and that calling @vkWaitForFences@ will not result in a
+-- permanently (or seemingly permanently) dead process.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pFences@ /must/ be a valid pointer to an array of @fenceCount@
+--     valid @VkFence@ handles
+--
+-- -   @fenceCount@ /must/ be greater than @0@
+--
+-- -   Each element of @pFences@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_TIMEOUT@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+-- = See Also
+-- #_see_also#
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Queue.VkFence'
+foreign import ccall "vkWaitForFences" vkWaitForFences :: ("device" ::: VkDevice) -> ("fenceCount" ::: Word32) -> ("pFences" ::: Ptr VkFence) -> ("waitAll" ::: VkBool32) -> ("timeout" ::: Word64) -> IO VkResult
+-- | VkFenceCreateInfo - Structure specifying parameters of a newly created
+-- fence
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_FENCE_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkExportFenceCreateInfo'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32.VkExportFenceWin32HandleInfoKHR'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be a valid combination of 'VkFenceCreateFlagBits'
+--     values
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkFenceCreateFlags', 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateFence'
+data VkFenceCreateInfo = VkFenceCreateInfo
+  { -- No documentation found for Nested "VkFenceCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkFenceCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkFenceCreateInfo" "vkFlags"
+  vkFlags :: VkFenceCreateFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkFenceCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkFenceCreateInfo <$> peek (ptr `plusPtr` 0)
+                               <*> peek (ptr `plusPtr` 8)
+                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFenceCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFenceCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFenceCreateInfo))
+-- | 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Image.hs
@@ -0,0 +1,947 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  , pattern VK_IMAGE_LAYOUT_UNDEFINED
+  , pattern VK_IMAGE_LAYOUT_GENERAL
+  , pattern VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_PREINITIALIZED
+  , vkCreateImage
+  , vkDestroyImage
+  , vkGetImageSubresourceLayout
+  , VkImageCreateInfo(..)
+  , VkSubresourceLayout(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Buffer
+  ( VkSharingMode(..)
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkImageUsageFlags
+  , VkImageTiling(..)
+  , VkSampleCountFlagBits(..)
+  , VkExtent3D(..)
+  , VkImageType(..)
+  , VkImageCreateFlags
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkImage
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkImageSubresource(..)
+  )
+
+
+-- ** VkImageLayout
+
+-- | VkImageLayout - Layout of image and image subresources
+--
+-- = Description
+-- #_description#
+--
+-- The type(s) of device access supported by each layout are:
+--
+-- -   @VK_IMAGE_LAYOUT_UNDEFINED@ does not support device access. This
+--     layout /must/ only be used as the @initialLayout@ member of
+--     @VkImageCreateInfo@ or @VkAttachmentDescription@, or as the
+--     @oldLayout@ in an image transition. When transitioning out of this
+--     layout, the contents of the memory are not guaranteed to be
+--     preserved.
+--
+-- -   @VK_IMAGE_LAYOUT_PREINITIALIZED@ does not support device access.
+--     This layout /must/ only be used as the @initialLayout@ member of
+--     @VkImageCreateInfo@ or @VkAttachmentDescription@, or as the
+--     @oldLayout@ in an image transition. When transitioning out of this
+--     layout, the contents of the memory are preserved. This layout is
+--     intended to be used as the initial layout for an image whose
+--     contents are written by the host, and hence the data /can/ be
+--     written to memory immediately, without first executing a layout
+--     transition. Currently, @VK_IMAGE_LAYOUT_PREINITIALIZED@ is only
+--     useful with @VK_IMAGE_TILING_LINEAR@ images because there is not a
+--     standard layout defined for @VK_IMAGE_TILING_OPTIMAL@ images.
+--
+-- -   @VK_IMAGE_LAYOUT_GENERAL@ supports all types of device access.
+--
+-- -   @VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL@ /must/ only be used as a
+--     color or resolve attachment in a @VkFramebuffer@. This layout is
+--     valid only for image subresources of images created with the
+--     @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@ usage bit enabled.
+--
+-- -   @VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL@ /must/ only be
+--     used as a depth\/stencil attachment in a @VkFramebuffer@. This
+--     layout is valid only for image subresources of images created with
+--     the @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@ usage bit enabled.
+--
+-- -   @VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL@ /must/ only be
+--     used as a read-only depth\/stencil attachment in a @VkFramebuffer@
+--     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).
+--     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
+--     valid only for image subresources of images created with the
+--     @VK_IMAGE_USAGE_SAMPLED_BIT@ or
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ usage bit enabled.
+--
+-- -   @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>).
+--     This layout is valid only for image subresources of images created
+--     with the @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ usage bit enabled.
+--
+-- -   @VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL@ /must/ only be used as a
+--     destination image of a transfer command. This layout is valid only
+--     for image subresources of images created with the
+--     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@ usage bit enabled.
+--
+-- 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
+-- API the application /must/ specify a parameter or structure member that
+-- 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>).
+-- 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
+-- accesses.
+--
+-- When performing a layout transition on an image subresource, the old
+-- layout value /must/ either equal the current layout of the image
+-- subresource (at the time the transition executes), or else be
+-- @VK_IMAGE_LAYOUT_UNDEFINED@ (implying that the contents of the image
+-- subresource need not be preserved). The new layout used in a transition
+-- /must/ not be @VK_IMAGE_LAYOUT_UNDEFINED@ or
+-- @VK_IMAGE_LAYOUT_PREINITIALIZED@.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription',
+-- 'Graphics.Vulkan.Core10.Pass.VkAttachmentReference',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorImageInfo',
+-- 'VkImageCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBlitImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearDepthStencilImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyBufferToImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyImageToBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResolveImage'
+newtype VkImageLayout = VkImageLayout Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkImageLayout where
+  showsPrec _ VK_IMAGE_LAYOUT_UNDEFINED = showString "VK_IMAGE_LAYOUT_UNDEFINED"
+  showsPrec _ VK_IMAGE_LAYOUT_GENERAL = showString "VK_IMAGE_LAYOUT_GENERAL"
+  showsPrec _ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = showString "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL"
+  showsPrec _ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = showString "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL"
+  showsPrec _ VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = showString "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL"
+  showsPrec _ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = showString "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL"
+  showsPrec _ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = showString "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL"
+  showsPrec _ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = showString "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL"
+  showsPrec _ VK_IMAGE_LAYOUT_PREINITIALIZED = showString "VK_IMAGE_LAYOUT_PREINITIALIZED"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkImageLayout 1000117000) = showString "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"
+  showsPrec _ (VkImageLayout 1000117001) = showString "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"
+  showsPrec _ (VkImageLayout 1000001002) = showString "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR"
+  showsPrec _ (VkImageLayout 1000111000) = showString "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR"
+  showsPrec p (VkImageLayout x) = showParen (p >= 11) (showString "VkImageLayout " . showsPrec 11 x)
+
+instance Read VkImageLayout where
+  readPrec = parens ( choose [ ("VK_IMAGE_LAYOUT_UNDEFINED",                        pure VK_IMAGE_LAYOUT_UNDEFINED)
+                             , ("VK_IMAGE_LAYOUT_GENERAL",                          pure VK_IMAGE_LAYOUT_GENERAL)
+                             , ("VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL",         pure VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
+                             , ("VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL", pure VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL)
+                             , ("VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL",  pure VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL)
+                             , ("VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL",         pure VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
+                             , ("VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL",             pure VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
+                             , ("VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL",             pure VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
+                             , ("VK_IMAGE_LAYOUT_PREINITIALIZED",                   pure VK_IMAGE_LAYOUT_PREINITIALIZED)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL", pure (VkImageLayout 1000117000))
+                             , ("VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL", pure (VkImageLayout 1000117001))
+                             , ("VK_IMAGE_LAYOUT_PRESENT_SRC_KHR",                            pure (VkImageLayout 1000001002))
+                             , ("VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR",                         pure (VkImageLayout 1000111000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageLayout")
+                        v <- step readPrec
+                        pure (VkImageLayout v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_UNDEFINED"
+pattern VK_IMAGE_LAYOUT_UNDEFINED :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_UNDEFINED = VkImageLayout 0
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_GENERAL"
+pattern VK_IMAGE_LAYOUT_GENERAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_GENERAL = VkImageLayout 1
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = VkImageLayout 2
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = VkImageLayout 3
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = VkImageLayout 4
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = VkImageLayout 5
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = VkImageLayout 6
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = VkImageLayout 7
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_PREINITIALIZED"
+pattern VK_IMAGE_LAYOUT_PREINITIALIZED :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_PREINITIALIZED = VkImageLayout 8
+-- | vkCreateImage - Create a new image object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the image.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the @VkImageCreateInfo@
+--     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.
+--
+-- -   @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
+--     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@, creating this @VkImage@ /must/
+--     not cause the total required sparse memory for all currently valid
+--     sparse resources on the device to exceed
+--     @VkPhysicalDeviceLimits@::@sparseAddressSpaceSize@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkImageCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pImage@ /must/ be a valid pointer to a @VkImage@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage', 'VkImageCreateInfo'
+foreign import ccall "vkCreateImage" vkCreateImage :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkImageCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pImage" ::: Ptr VkImage) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @image@, either directly or via
+--     a @VkImageView@, /must/ have completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @image@ was created, a
+--     compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @image@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @image@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @image@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @image@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage'
+foreign import ccall "vkDestroyImage" vkDestroyImage :: ("device" ::: VkDevice) -> ("image" ::: VkImage) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkGetImageSubresourceLayout - Retrieve information about an image
+-- subresource
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @image@ is the image whose layout is being queried.
+--
+-- -   @pSubresource@ is a pointer to a
+--     'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageSubresource'
+--     structure selecting a specific image for the image subresource.
+--
+-- -   @pLayout@ points to a 'VkSubresourceLayout' structure in which the
+--     layout is returned.
+--
+-- = Description
+-- #_description#
+--
+-- 'vkGetImageSubresourceLayout' is invariant for the lifetime of a single
+-- image.
+--
+-- == Valid Usage
+--
+-- -   @image@ /must/ have been created with @tiling@ equal to
+--     @VK_IMAGE_TILING_LINEAR@
+--
+-- -   The @aspectMask@ member of @pSubresource@ /must/ only have a single
+--     bit set
+--
+-- -   The @mipLevel@ member of @pSubresource@ /must/ be less than the
+--     @mipLevels@ specified in 'VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   The @arrayLayer@ member of @pSubresource@ /must/ be less than the
+--     @arrayLayers@ specified in 'VkImageCreateInfo' when @image@ was
+--     created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @pSubresource@ /must/ be a valid pointer to a valid
+--     @VkImageSubresource@ structure
+--
+-- -   @pLayout@ /must/ be a valid pointer to a @VkSubresourceLayout@
+--     structure
+--
+-- -   @image@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageSubresource',
+-- 'VkSubresourceLayout'
+foreign import ccall "vkGetImageSubresourceLayout" vkGetImageSubresourceLayout :: ("device" ::: VkDevice) -> ("image" ::: VkImage) -> ("pSubresource" ::: Ptr VkImageSubresource) -> ("pLayout" ::: Ptr VkSubresourceLayout) -> IO ()
+-- | VkImageCreateInfo - Structure specifying the parameters of a newly
+-- 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
+-- created with @tiling@ equal to @VK_IMAGE_TILING_OPTIMAL@. Creation of
+-- images with tiling @VK_IMAGE_TILING_LINEAR@ /may/ not be supported
+-- unless other parameters meet all of the constraints:
+--
+-- -   @imageType@ is @VK_IMAGE_TYPE_2D@
+--
+-- -   @format@ is not a depth\/stencil format
+--
+-- -   @mipLevels@ is 1
+--
+-- -   @arrayLayers@ is 1
+--
+-- -   @samples@ is @VK_SAMPLE_COUNT_1_BIT@
+--
+-- -   @usage@ only includes @VK_IMAGE_USAGE_TRANSFER_SRC_BIT@ and\/or
+--     @VK_IMAGE_USAGE_TRANSFER_DST_BIT@
+--
+-- Implementations /may/ support additional limits and capabilities beyond
+-- 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'.
+-- 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'.
+-- 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
+-- be larger than @maxResourceSize@.
+--
+-- To determine the set of valid @usage@ bits for a given format, call
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceFormatProperties'.
+--
+-- == 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 @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
+--     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
+--     @queueFamilyIndexCount@ @uint32_t@ values
+--
+-- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
+--     @queueFamilyIndexCount@ /must/ be greater than @1@
+--
+-- -   If @sharingMode@ is @VK_SHARING_MODE_CONCURRENT@, each element of
+--     @pQueueFamilyIndices@ /must/ be unique and /must/ be less than
+--     @pQueueFamilyPropertyCount@ returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'
+--     for the @physicalDevice@ that was used to create @device@
+--
+-- -   @format@ /must/ not be @VK_FORMAT_UNDEFINED@
+--
+-- -   @extent@::@width@ /must/ be greater than @0@.
+--
+-- -   @extent@::@height@ /must/ be greater than @0@.
+--
+-- -   @extent@::@depth@ /must/ be greater than @0@.
+--
+-- -   @mipLevels@ /must/ be greater than @0@
+--
+-- -   @arrayLayers@ /must/ be greater than @0@
+--
+-- -   If @flags@ contains @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@,
+--     @imageType@ /must/ be @VK_IMAGE_TYPE_2D@
+--
+-- -   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
+--     @vkGetPhysicalDeviceImageFormatProperties@ with @format@,
+--     @imageType@, @tiling@, @usage@, and @flags@ equal to those in this
+--     structure) - whichever is higher
+--
+-- -   If @imageType@ is @VK_IMAGE_TYPE_2D@ and @flags@ does not contain
+--     @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@, @extent.width@ and
+--     @extent.height@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxImageDimension2D@, or
+--     @VkImageFormatProperties@::@maxExtent.width@\/@height@ (as returned
+--     by @vkGetPhysicalDeviceImageFormatProperties@ with @format@,
+--     @imageType@, @tiling@, @usage@, and @flags@ equal to those in this
+--     structure) - whichever is higher
+--
+-- -   If @imageType@ is @VK_IMAGE_TYPE_2D@ and @flags@ contains
+--     @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@, @extent.width@ and
+--     @extent.height@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxImageDimensionCube@, or
+--     @VkImageFormatProperties@::@maxExtent.width@\/@height@ (as returned
+--     by @vkGetPhysicalDeviceImageFormatProperties@ with @format@,
+--     @imageType@, @tiling@, @usage@, and @flags@ equal to those in this
+--     structure) - whichever is higher
+--
+-- -   If @imageType@ is @VK_IMAGE_TYPE_2D@ and @flags@ contains
+--     @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@, @extent.width@ and
+--     @extent.height@ /must/ be equal and @arrayLayers@ /must/ be greater
+--     than or equal to 6
+--
+-- -   If @imageType@ is @VK_IMAGE_TYPE_3D@, @extent.width@,
+--     @extent.height@ and @extent.depth@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxImageDimension3D@, or
+--     @VkImageFormatProperties@::@maxExtent.width@\/@height@\/@depth@ (as
+--     returned by @vkGetPhysicalDeviceImageFormatProperties@ with
+--     @format@, @imageType@, @tiling@, @usage@, and @flags@ equal to those
+--     in this structure) - whichever is higher
+--
+-- -   If @imageType@ is @VK_IMAGE_TYPE_1D@, both @extent.height@ and
+--     @extent.depth@ /must/ be @1@
+--
+-- -   If @imageType@ is @VK_IMAGE_TYPE_2D@, @extent.depth@ /must/ be @1@
+--
+-- -   @mipLevels@ /must/ be less than or equal to
+--     ⌊log2(max(@extent.width@, @extent.height@, @extent.depth@))⌋ + 1.
+--
+-- -   @mipLevels@ /must/ be less than or equal to
+--     @VkImageFormatProperties@::@maxMipLevels@ (as returned by
+--     @vkGetPhysicalDeviceImageFormatProperties@ with @format@,
+--     @imageType@, @tiling@, @usage@, and @flags@ equal to those in this
+--     structure)
+--
+-- -   @arrayLayers@ /must/ be less than or equal to
+--     @VkImageFormatProperties@::@maxArrayLayers@ (as returned by
+--     @vkGetPhysicalDeviceImageFormatProperties@ with @format@,
+--     @imageType@, @tiling@, @usage@, and @flags@ equal to those in this
+--     structure)
+--
+-- -   If @imageType@ is @VK_IMAGE_TYPE_3D@, @arrayLayers@ /must/ be @1@.
+--
+-- -   If @samples@ is not @VK_SAMPLE_COUNT_1_BIT@, @imageType@ /must/ be
+--     @VK_IMAGE_TYPE_2D@, @flags@ /must/ not contain
+--     @VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT@, @tiling@ /must/ be
+--     @VK_IMAGE_TILING_OPTIMAL@, and @mipLevels@ /must/ be equal to @1@
+--
+-- -   If @usage@ includes @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@, then
+--     bits other than @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@,
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, and
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@ /must/ not be set
+--
+-- -   If @usage@ includes @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@,
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@,
+--     @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@, or
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@, @extent.width@ /must/ be less
+--     than or equal to @VkPhysicalDeviceLimits@::@maxFramebufferWidth@
+--
+-- -   If @usage@ includes @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@,
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@,
+--     @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@, or
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@, @extent.height@ /must/ be
+--     less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxFramebufferHeight@
+--
+-- -   If @usage@ includes @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@,
+--     @usage@ /must/ also contain at least one of
+--     @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@,
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, or
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@.
+--
+-- -   @samples@ /must/ be a bit value that is set in
+--     @VkImageFormatProperties@::@sampleCounts@ returned by
+--     @vkGetPhysicalDeviceImageFormatProperties@ with @format@,
+--     @imageType@, @tiling@, @usage@, and @flags@ equal to those in this
+--     structure
+--
+-- -   If the
+--     <{html_spec_relative}#features-features-shaderStorageImageMultisample multisampled storage images>
+--     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>
+--     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>
+--     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>
+--     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>
+--     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>
+--     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>
+--     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>
+--     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>
+--     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@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_LINEAR@, @format@ /must/ be a format
+--     that has at least one supported feature bit present in the value of
+--     @VkFormatProperties@::@linearTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_LINEAR@, and
+--     @VkFormatProperties@::@linearTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
+--     @usage@ /must/ not contain @VK_IMAGE_USAGE_SAMPLED_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_LINEAR@, and
+--     @VkFormatProperties@::@linearTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@,
+--     @usage@ /must/ not contain @VK_IMAGE_USAGE_STORAGE_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_LINEAR@, and
+--     @VkFormatProperties@::@linearTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@,
+--     @usage@ /must/ not contain @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_LINEAR@, and
+--     @VkFormatProperties@::@linearTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include
+--     @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@, @usage@ /must/ not
+--     contain @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_OPTIMAL@, @format@ /must/ be a
+--     format that has at least one supported feature bit present in the
+--     value of @VkFormatProperties@::@optimalTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_OPTIMAL@, and
+--     @VkFormatProperties@::@optimalTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@,
+--     @usage@ /must/ not contain @VK_IMAGE_USAGE_SAMPLED_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_OPTIMAL@, and
+--     @VkFormatProperties@::@optimalTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@,
+--     @usage@ /must/ not contain @VK_IMAGE_USAGE_STORAGE_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_OPTIMAL@, and
+--     @VkFormatProperties@::@optimalTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@,
+--     @usage@ /must/ not contain @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@
+--
+-- -   If @tiling@ is @VK_IMAGE_TILING_OPTIMAL@, and
+--     @VkFormatProperties@::@optimalTilingFeatures@ (as returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@) does not include
+--     @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@, @usage@ /must/ not
+--     contain @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@
+--
+-- -   If @flags@ contains @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ or
+--     @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@, it /must/ also contain
+--     @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@
+--
+-- -   If any of the bits @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@,
+--     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@, or
+--     @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@ are set,
+--     @VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT@ /must/ not also be set
+--
+-- -   @initialLayout@ /must/ be @VK_IMAGE_LAYOUT_UNDEFINED@ or
+--     @VK_IMAGE_LAYOUT_PREINITIALIZED@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationImageCreateInfoNV',
+--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkExternalFormatANDROID',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExternalMemoryImageCreateInfo',
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV',
+--     'Graphics.Vulkan.Extensions.VK_KHR_image_format_list.VkImageFormatListCreateInfoKHR',
+--     or
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkImageSwapchainCreateInfoKHR'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageCreateFlagBits'
+--     values
+--
+-- -   @imageType@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType' value
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @samples@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+--     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@
+--
+-- -   @sharingMode@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Buffer.VkSharingMode' value
+--
+-- -   @initialLayout@ /must/ be a valid 'VkImageLayout' value
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
+-- 'Graphics.Vulkan.Core10.Core.VkFormat',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageCreateFlags',
+-- 'VkImageLayout',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageTiling',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageType',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits',
+-- 'Graphics.Vulkan.Core10.Buffer.VkSharingMode',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateImage'
+data VkImageCreateInfo = VkImageCreateInfo
+  { -- No documentation found for Nested "VkImageCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkFlags"
+  vkFlags :: VkImageCreateFlags
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkImageType"
+  vkImageType :: VkImageType
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkExtent"
+  vkExtent :: VkExtent3D
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkMipLevels"
+  vkMipLevels :: Word32
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkArrayLayers"
+  vkArrayLayers :: Word32
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkSamples"
+  vkSamples :: VkSampleCountFlagBits
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkTiling"
+  vkTiling :: VkImageTiling
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkUsage"
+  vkUsage :: VkImageUsageFlags
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkSharingMode"
+  vkSharingMode :: VkSharingMode
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkQueueFamilyIndexCount"
+  vkQueueFamilyIndexCount :: Word32
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkPQueueFamilyIndices"
+  vkPQueueFamilyIndices :: Ptr Word32
+  , -- No documentation found for Nested "VkImageCreateInfo" "vkInitialLayout"
+  vkInitialLayout :: VkImageLayout
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageCreateInfo where
+  sizeOf ~_ = 88
+  alignment ~_ = 8
+  peek ptr = VkImageCreateInfo <$> 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` 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` 72)
+                               <*> peek (ptr `plusPtr` 80)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkImageType (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkFormat (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkExtent (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkMipLevels (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 44) (vkArrayLayers (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkSamples (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 52) (vkTiling (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkUsage (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 60) (vkSharingMode (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkImageCreateInfo))
+                *> poke (ptr `plusPtr` 80) (vkInitialLayout (poked :: VkImageCreateInfo))
+-- | 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
+-- memory. For uncompressed formats, @rowPitch@ is the number of bytes
+-- between texels with the same x coordinate in adjacent rows (y
+-- coordinates differ by one). @arrayPitch@ is the number of bytes between
+-- texels with the same x and y coordinate in adjacent array layers of the
+-- image (array layer values differ by one). @depthPitch@ is the number of
+-- bytes between texels with the same x and y coordinate in adjacent slices
+-- of a 3D image (z coordinates differ by one). Expressed as an addressing
+-- formula, the starting byte of a texel in the image subresource has
+-- address:
+--
+-- > // (x,y,z,layer) are in texel coordinates
+-- > address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*elementSize + offset
+--
+-- For compressed formats, the @rowPitch@ is the number of bytes between
+-- compressed texel blocks in adjacent rows. @arrayPitch@ is the number of
+-- bytes between compressed texel blocks in adjacent array layers.
+-- @depthPitch@ is the number of bytes between compressed texel blocks in
+-- adjacent slices of a 3D image.
+--
+-- > // (x,y,z,layer) are in compressed texel block coordinates
+-- > address(x,y,z,layer) = layer*arrayPitch + z*depthPitch + y*rowPitch + x*compressedTexelBlockByteSize + offset;
+--
+-- @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.
+--
+-- = See Also
+-- #_see_also#
+--
+-- @VkDeviceSize@, 'vkGetImageSubresourceLayout'
+data VkSubresourceLayout = VkSubresourceLayout
+  { -- No documentation found for Nested "VkSubresourceLayout" "vkOffset"
+  vkOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkSubresourceLayout" "vkSize"
+  vkSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkSubresourceLayout" "vkRowPitch"
+  vkRowPitch :: VkDeviceSize
+  , -- No documentation found for Nested "VkSubresourceLayout" "vkArrayPitch"
+  vkArrayPitch :: VkDeviceSize
+  , -- No documentation found for Nested "VkSubresourceLayout" "vkDepthPitch"
+  vkDepthPitch :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSubresourceLayout where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkSubresourceLayout <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 16)
+                                 <*> peek (ptr `plusPtr` 24)
+                                 <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkSubresourceLayout))
+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSubresourceLayout))
+                *> poke (ptr `plusPtr` 16) (vkRowPitch (poked :: VkSubresourceLayout))
+                *> poke (ptr `plusPtr` 24) (vkArrayPitch (poked :: VkSubresourceLayout))
+                *> poke (ptr `plusPtr` 32) (vkDepthPitch (poked :: VkSubresourceLayout))
diff --git a/src/Graphics/Vulkan/Core10/ImageView.hs b/src/Graphics/Vulkan/Core10/ImageView.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/ImageView.hs
@@ -0,0 +1,906 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.ImageView
+  ( VkComponentSwizzle(..)
+  , pattern VK_COMPONENT_SWIZZLE_IDENTITY
+  , pattern VK_COMPONENT_SWIZZLE_ZERO
+  , pattern VK_COMPONENT_SWIZZLE_ONE
+  , pattern VK_COMPONENT_SWIZZLE_R
+  , pattern VK_COMPONENT_SWIZZLE_G
+  , pattern VK_COMPONENT_SWIZZLE_B
+  , pattern VK_COMPONENT_SWIZZLE_A
+  , VkImageViewType(..)
+  , pattern VK_IMAGE_VIEW_TYPE_1D
+  , pattern VK_IMAGE_VIEW_TYPE_2D
+  , pattern VK_IMAGE_VIEW_TYPE_3D
+  , pattern VK_IMAGE_VIEW_TYPE_CUBE
+  , pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY
+  , pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY
+  , pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY
+  , VkImageViewCreateFlags(..)
+  , VkImageView
+  , vkCreateImageView
+  , vkDestroyImageView
+  , VkComponentMapping(..)
+  , VkImageSubresourceRange(..)
+  , VkImageViewCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkImage
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkImageAspectFlags
+  )
+
+
+-- ** VkComponentSwizzle
+
+-- | VkComponentSwizzle - Specify how a component is swizzled
+--
+-- = Description
+-- #_description#
+--
+-- -   @VK_COMPONENT_SWIZZLE_IDENTITY@ specifies that the component is set
+--     to the identity swizzle.
+--
+-- -   @VK_COMPONENT_SWIZZLE_ZERO@ specifies that the component is set to
+--     zero.
+--
+-- -   @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>
+--     section for each 'Graphics.Vulkan.Core10.Core.VkFormat'.
+--
+-- -   @VK_COMPONENT_SWIZZLE_R@ specifies that the component is set to the
+--     value of the R component of the image.
+--
+-- -   @VK_COMPONENT_SWIZZLE_G@ specifies that the component is set to the
+--     value of the G component of the image.
+--
+-- -   @VK_COMPONENT_SWIZZLE_B@ specifies that the component is set to the
+--     value of the B component of the image.
+--
+-- -   @VK_COMPONENT_SWIZZLE_A@ specifies that the component is set to the
+--     value of the A component of the image.
+--
+-- 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@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkComponentMapping'
+newtype VkComponentSwizzle = VkComponentSwizzle Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkComponentSwizzle where
+  showsPrec _ VK_COMPONENT_SWIZZLE_IDENTITY = showString "VK_COMPONENT_SWIZZLE_IDENTITY"
+  showsPrec _ VK_COMPONENT_SWIZZLE_ZERO = showString "VK_COMPONENT_SWIZZLE_ZERO"
+  showsPrec _ VK_COMPONENT_SWIZZLE_ONE = showString "VK_COMPONENT_SWIZZLE_ONE"
+  showsPrec _ VK_COMPONENT_SWIZZLE_R = showString "VK_COMPONENT_SWIZZLE_R"
+  showsPrec _ VK_COMPONENT_SWIZZLE_G = showString "VK_COMPONENT_SWIZZLE_G"
+  showsPrec _ VK_COMPONENT_SWIZZLE_B = showString "VK_COMPONENT_SWIZZLE_B"
+  showsPrec _ VK_COMPONENT_SWIZZLE_A = showString "VK_COMPONENT_SWIZZLE_A"
+  showsPrec p (VkComponentSwizzle x) = showParen (p >= 11) (showString "VkComponentSwizzle " . showsPrec 11 x)
+
+instance Read VkComponentSwizzle where
+  readPrec = parens ( choose [ ("VK_COMPONENT_SWIZZLE_IDENTITY", pure VK_COMPONENT_SWIZZLE_IDENTITY)
+                             , ("VK_COMPONENT_SWIZZLE_ZERO",     pure VK_COMPONENT_SWIZZLE_ZERO)
+                             , ("VK_COMPONENT_SWIZZLE_ONE",      pure VK_COMPONENT_SWIZZLE_ONE)
+                             , ("VK_COMPONENT_SWIZZLE_R",        pure VK_COMPONENT_SWIZZLE_R)
+                             , ("VK_COMPONENT_SWIZZLE_G",        pure VK_COMPONENT_SWIZZLE_G)
+                             , ("VK_COMPONENT_SWIZZLE_B",        pure VK_COMPONENT_SWIZZLE_B)
+                             , ("VK_COMPONENT_SWIZZLE_A",        pure VK_COMPONENT_SWIZZLE_A)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkComponentSwizzle")
+                        v <- step readPrec
+                        pure (VkComponentSwizzle v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_IDENTITY"
+pattern VK_COMPONENT_SWIZZLE_IDENTITY :: VkComponentSwizzle
+pattern VK_COMPONENT_SWIZZLE_IDENTITY = VkComponentSwizzle 0
+
+-- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_ZERO"
+pattern VK_COMPONENT_SWIZZLE_ZERO :: VkComponentSwizzle
+pattern VK_COMPONENT_SWIZZLE_ZERO = VkComponentSwizzle 1
+
+-- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_ONE"
+pattern VK_COMPONENT_SWIZZLE_ONE :: VkComponentSwizzle
+pattern VK_COMPONENT_SWIZZLE_ONE = VkComponentSwizzle 2
+
+-- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_R"
+pattern VK_COMPONENT_SWIZZLE_R :: VkComponentSwizzle
+pattern VK_COMPONENT_SWIZZLE_R = VkComponentSwizzle 3
+
+-- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_G"
+pattern VK_COMPONENT_SWIZZLE_G :: VkComponentSwizzle
+pattern VK_COMPONENT_SWIZZLE_G = VkComponentSwizzle 4
+
+-- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_B"
+pattern VK_COMPONENT_SWIZZLE_B :: VkComponentSwizzle
+pattern VK_COMPONENT_SWIZZLE_B = VkComponentSwizzle 5
+
+-- No documentation found for Nested "VkComponentSwizzle" "VK_COMPONENT_SWIZZLE_A"
+pattern VK_COMPONENT_SWIZZLE_A :: VkComponentSwizzle
+pattern VK_COMPONENT_SWIZZLE_A = VkComponentSwizzle 6
+-- ** VkImageViewType
+
+-- | 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>
+-- 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
+  deriving (Eq, Ord, Storable)
+
+instance Show VkImageViewType where
+  showsPrec _ VK_IMAGE_VIEW_TYPE_1D = showString "VK_IMAGE_VIEW_TYPE_1D"
+  showsPrec _ VK_IMAGE_VIEW_TYPE_2D = showString "VK_IMAGE_VIEW_TYPE_2D"
+  showsPrec _ VK_IMAGE_VIEW_TYPE_3D = showString "VK_IMAGE_VIEW_TYPE_3D"
+  showsPrec _ VK_IMAGE_VIEW_TYPE_CUBE = showString "VK_IMAGE_VIEW_TYPE_CUBE"
+  showsPrec _ VK_IMAGE_VIEW_TYPE_1D_ARRAY = showString "VK_IMAGE_VIEW_TYPE_1D_ARRAY"
+  showsPrec _ VK_IMAGE_VIEW_TYPE_2D_ARRAY = showString "VK_IMAGE_VIEW_TYPE_2D_ARRAY"
+  showsPrec _ VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = showString "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY"
+  showsPrec p (VkImageViewType x) = showParen (p >= 11) (showString "VkImageViewType " . showsPrec 11 x)
+
+instance Read VkImageViewType where
+  readPrec = parens ( choose [ ("VK_IMAGE_VIEW_TYPE_1D",         pure VK_IMAGE_VIEW_TYPE_1D)
+                             , ("VK_IMAGE_VIEW_TYPE_2D",         pure VK_IMAGE_VIEW_TYPE_2D)
+                             , ("VK_IMAGE_VIEW_TYPE_3D",         pure VK_IMAGE_VIEW_TYPE_3D)
+                             , ("VK_IMAGE_VIEW_TYPE_CUBE",       pure VK_IMAGE_VIEW_TYPE_CUBE)
+                             , ("VK_IMAGE_VIEW_TYPE_1D_ARRAY",   pure VK_IMAGE_VIEW_TYPE_1D_ARRAY)
+                             , ("VK_IMAGE_VIEW_TYPE_2D_ARRAY",   pure VK_IMAGE_VIEW_TYPE_2D_ARRAY)
+                             , ("VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", pure VK_IMAGE_VIEW_TYPE_CUBE_ARRAY)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageViewType")
+                        v <- step readPrec
+                        pure (VkImageViewType v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D"
+pattern VK_IMAGE_VIEW_TYPE_1D :: VkImageViewType
+pattern VK_IMAGE_VIEW_TYPE_1D = VkImageViewType 0
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D"
+pattern VK_IMAGE_VIEW_TYPE_2D :: VkImageViewType
+pattern VK_IMAGE_VIEW_TYPE_2D = VkImageViewType 1
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_3D"
+pattern VK_IMAGE_VIEW_TYPE_3D :: VkImageViewType
+pattern VK_IMAGE_VIEW_TYPE_3D = VkImageViewType 2
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE"
+pattern VK_IMAGE_VIEW_TYPE_CUBE :: VkImageViewType
+pattern VK_IMAGE_VIEW_TYPE_CUBE = VkImageViewType 3
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_1D_ARRAY"
+pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY :: VkImageViewType
+pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY = VkImageViewType 4
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_2D_ARRAY"
+pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY :: VkImageViewType
+pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY = VkImageViewType 5
+
+-- No documentation found for Nested "VkImageViewType" "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY"
+pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY :: VkImageViewType
+pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = VkImageViewType 6
+-- ** VkImageViewCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkImageViewCreateFlags where
+  
+  showsPrec p (VkImageViewCreateFlags x) = showParen (p >= 11) (showString "VkImageViewCreateFlags " . showsPrec 11 x)
+
+instance Read VkImageViewCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageViewCreateFlags")
+                        v <- step readPrec
+                        pure (VkImageViewCreateFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'vkCreateImageView', 'vkDestroyImageView'
+type VkImageView = Ptr VkImageView_T
+-- | vkCreateImageView - Create an image view from an existing image
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the image view.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkImageViewCreateInfo@ structure containing parameters to be used
+--     to create the image view.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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.
+--
+-- The remaining parameters are contained in the @pCreateInfo@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkImageViewCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pView@ /must/ be a valid pointer to a @VkImageView@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkImageViewCreateInfo'
+foreign import ccall "vkCreateImageView" vkCreateImageView :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkImageViewCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pView" ::: Ptr VkImageView) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @imageView@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @imageView@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @imageView@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @imageView@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @imageView@
+--     /must/ be a valid @VkImageView@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @imageView@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   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
+--
+-- -   @g@ /must/ be a valid 'VkComponentSwizzle' value
+--
+-- -   @b@ /must/ be a valid 'VkComponentSwizzle' value
+--
+-- -   @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"
+  vkR :: VkComponentSwizzle
+  , -- No documentation found for Nested "VkComponentMapping" "vkG"
+  vkG :: VkComponentSwizzle
+  , -- No documentation found for Nested "VkComponentMapping" "vkB"
+  vkB :: VkComponentSwizzle
+  , -- No documentation found for Nested "VkComponentMapping" "vkA"
+  vkA :: VkComponentSwizzle
+  }
+  deriving (Eq, Show)
+
+instance Storable VkComponentMapping where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek ptr = VkComponentMapping <$> peek (ptr `plusPtr` 0)
+                                <*> peek (ptr `plusPtr` 4)
+                                <*> peek (ptr `plusPtr` 8)
+                                <*> peek (ptr `plusPtr` 12)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkR (poked :: VkComponentMapping))
+                *> poke (ptr `plusPtr` 4) (vkG (poked :: VkComponentMapping))
+                *> poke (ptr `plusPtr` 8) (vkB (poked :: VkComponentMapping))
+                *> poke (ptr `plusPtr` 12) (vkA (poked :: VkComponentMapping))
+-- | 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
+-- levels or layers in an image after the @baseMipLevel@ or
+-- @baseArrayLayer@, it /can/ set @levelCount@ and @layerCount@ to the
+-- special values @VK_REMAINING_MIP_LEVELS@ and @VK_REMAINING_ARRAY_LAYERS@
+-- without knowing the exact number of mip levels or layers.
+--
+-- For cube and cube array image views, the layers of the image view
+-- starting at @baseArrayLayer@ correspond to faces in the order +X, -X,
+-- +Y, -Y, +Z, -Z. For cube arrays, each set of six sequential layers is a
+-- single cube, so the number of cube maps in a cube map array view is
+-- /@layerCount@ \/ 6/, and image array layer (@baseArrayLayer@ + i) is
+-- face index (i mod 6) of cube /i \/ 6/. If the number of layers in the
+-- view, whether set explicitly in @layerCount@ or implied by
+-- @VK_REMAINING_ARRAY_LAYERS@, is not a multiple of 6, behavior when
+-- indexing the last cube is undefined.
+--
+-- @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,
+-- @aspectMask@ /must/ include at least one of @VK_IMAGE_ASPECT_DEPTH_BIT@
+-- and @VK_IMAGE_ASPECT_STENCIL_BIT@, and /can/ include both.
+--
+-- 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
+-- whether the imageView is used for depth reads (i.e. using a
+-- floating-point sampler or input attachment in the shader) or stencil
+-- reads (i.e. using an unsigned integer sampler or input attachment in the
+-- shader). When an imageView of a depth\/stencil image is used as a
+-- depth\/stencil framebuffer attachment, the @aspectMask@ is ignored and
+-- both depth and stencil image subresources are used.
+--
+-- 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.
+--
+-- == Valid Usage
+--
+-- -   If @levelCount@ is not @VK_REMAINING_MIP_LEVELS@, it /must/ be
+--     greater than @0@
+--
+-- -   If @layerCount@ is not @VK_REMAINING_ARRAY_LAYERS@, it /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#
+--
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkImageAspectFlags',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier',
+-- 'VkImageViewCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearDepthStencilImage'
+data VkImageSubresourceRange = VkImageSubresourceRange
+  { -- No documentation found for Nested "VkImageSubresourceRange" "vkAspectMask"
+  vkAspectMask :: VkImageAspectFlags
+  , -- No documentation found for Nested "VkImageSubresourceRange" "vkBaseMipLevel"
+  vkBaseMipLevel :: Word32
+  , -- No documentation found for Nested "VkImageSubresourceRange" "vkLevelCount"
+  vkLevelCount :: Word32
+  , -- No documentation found for Nested "VkImageSubresourceRange" "vkBaseArrayLayer"
+  vkBaseArrayLayer :: Word32
+  , -- No documentation found for Nested "VkImageSubresourceRange" "vkLayerCount"
+  vkLayerCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageSubresourceRange where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek ptr = VkImageSubresourceRange <$> 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) (vkAspectMask (poked :: VkImageSubresourceRange))
+                *> poke (ptr `plusPtr` 4) (vkBaseMipLevel (poked :: VkImageSubresourceRange))
+                *> poke (ptr `plusPtr` 8) (vkLevelCount (poked :: VkImageSubresourceRange))
+                *> poke (ptr `plusPtr` 12) (vkBaseArrayLayer (poked :: VkImageSubresourceRange))
+                *> poke (ptr `plusPtr` 16) (vkLayerCount (poked :: VkImageSubresourceRange))
+-- | VkImageViewCreateInfo - Structure specifying parameters of a newly
+-- 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>
+-- 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.
+--
+-- __Note__
+--
+-- Values intended to be used with one view format /may/ not be exactly
+-- preserved when written or read through a different format. For example,
+-- an integer value that happens to have the bit pattern of a floating
+-- point denorm or NaN /may/ be flushed or canonicalized when written or
+-- 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>.
+--
+-- > +---------+------------------------+-----------------------------------+
+-- > | 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
+--
+-- == 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>
+--     feature is not enabled, @viewType@ /must/ not be
+--     @VK_IMAGE_VIEW_TYPE_CUBE_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@
+--     returned by @vkGetPhysicalDeviceFormatProperties@ with the same
+--     value of @format@
+--
+-- -   @image@ /must/ have been created with a @usage@ value containing at
+--     least one of @VK_IMAGE_USAGE_SAMPLED_BIT@,
+--     @VK_IMAGE_USAGE_STORAGE_BIT@, @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@,
+--     @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, or
+--     @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@
+--     contains @VK_IMAGE_USAGE_SAMPLED_BIT@, @format@ /must/ be supported
+--     for sampled images, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@
+--     contains @VK_IMAGE_USAGE_STORAGE_BIT@, @format@ /must/ be supported
+--     for storage images, as specified by the
+--     @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@
+--     contains @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@, @format@ /must/ be
+--     supported for color attachments, as specified by the
+--     @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_LINEAR@ and @usage@
+--     contains @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, @format@
+--     /must/ be supported for depth\/stencil attachments, as specified by
+--     the @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@ flag in
+--     @VkFormatProperties@::@linearTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@, @format@
+--     /must/ be format that has at least one supported feature bit present
+--     in the value of @VkFormatProperties@::@optimalTilingFeatures@
+--     returned by @vkGetPhysicalDeviceFormatProperties@ with the same
+--     value of @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@
+--     contains @VK_IMAGE_USAGE_SAMPLED_BIT@, @format@ /must/ be supported
+--     for sampled images, as specified by the
+--     @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ flag in
+--     @VkFormatProperties@::@optimalTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@
+--     contains @VK_IMAGE_USAGE_STORAGE_BIT@, @format@ /must/ be supported
+--     for storage images, as specified by the
+--     @VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT@ flag in
+--     @VkFormatProperties@::@optimalTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@
+--     contains @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@, @format@ /must/ be
+--     supported for color attachments, as specified by the
+--     @VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT@ flag in
+--     @VkFormatProperties@::@optimalTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   If @image@ was created with @VK_IMAGE_TILING_OPTIMAL@ and @usage@
+--     contains @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@, @format@
+--     /must/ be supported for depth\/stencil attachments, as specified by
+--     the @VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT@ flag in
+--     @VkFormatProperties@::@optimalTilingFeatures@ returned by
+--     @vkGetPhysicalDeviceFormatProperties@ with the same value of
+--     @format@
+--
+-- -   @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@ 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>
+--
+-- -   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@
+--
+-- -   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>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkImageViewUsageCreateInfo'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @viewType@ /must/ be a valid 'VkImageViewType' value
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @components@ /must/ be a valid @VkComponentMapping@ structure
+--
+-- -   @subresourceRange@ /must/ be a valid @VkImageSubresourceRange@
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkFlags"
+  vkFlags :: VkImageViewCreateFlags
+  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkImage"
+  vkImage :: VkImage
+  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkViewType"
+  vkViewType :: VkImageViewType
+  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkComponents"
+  vkComponents :: VkComponentMapping
+  , -- No documentation found for Nested "VkImageViewCreateInfo" "vkSubresourceRange"
+  vkSubresourceRange :: VkImageSubresourceRange
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageViewCreateInfo where
+  sizeOf ~_ = 80
+  alignment ~_ = 8
+  peek ptr = VkImageViewCreateInfo <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+                                   <*> peek (ptr `plusPtr` 24)
+                                   <*> peek (ptr `plusPtr` 32)
+                                   <*> peek (ptr `plusPtr` 36)
+                                   <*> peek (ptr `plusPtr` 40)
+                                   <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageViewCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageViewCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageViewCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkImage (poked :: VkImageViewCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkViewType (poked :: VkImageViewCreateInfo))
+                *> poke (ptr `plusPtr` 36) (vkFormat (poked :: VkImageViewCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkComponents (poked :: VkImageViewCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkSubresourceRange (poked :: VkImageViewCreateInfo))
diff --git a/src/Graphics/Vulkan/Core10/LayerDiscovery.hs b/src/Graphics/Vulkan/Core10/LayerDiscovery.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/LayerDiscovery.hs
@@ -0,0 +1,205 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.LayerDiscovery
+  ( VK_MAX_DESCRIPTION_SIZE
+  , pattern VK_MAX_DESCRIPTION_SIZE
+  , vkEnumerateInstanceLayerProperties
+  , vkEnumerateDeviceLayerProperties
+  , VkLayerProperties(..)
+  ) where
+
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CChar(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core10.ExtensionDiscovery
+  ( VK_MAX_EXTENSION_NAME_SIZE
+  )
+
+
+-- No documentation found for TopLevel "VK_MAX_DESCRIPTION_SIZE"
+type VK_MAX_DESCRIPTION_SIZE = 256
+-- No documentation found for Nested "Integral a => a" "VK_MAX_DESCRIPTION_SIZE"
+pattern VK_MAX_DESCRIPTION_SIZE :: Integral a => a
+pattern VK_MAX_DESCRIPTION_SIZE = 256
+-- | vkEnumerateInstanceLayerProperties - Returns up to requested number of
+-- 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.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'VkLayerProperties' structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pProperties@ is @NULL@, then the number of layer properties
+-- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
+-- /must/ point to a variable set by the user to the number of elements in
+-- the @pProperties@ array, and on return the variable is overwritten with
+-- the number of structures actually written to @pProperties@. If
+-- @pPropertyCount@ is less than the number of layer properties available,
+-- at most @pPropertyCount@ structures will be written. If @pPropertyCount@
+-- is smaller than the number of layers available, @VK_INCOMPLETE@ will be
+-- returned instead of @VK_SUCCESS@, to indicate that not all the available
+-- layer properties were returned.
+--
+-- The list of available layers may change at any time due to actions
+-- outside of the Vulkan implementation, so two calls to
+-- @vkEnumerateInstanceLayerProperties@ with the same parameters /may/
+-- return different results, or retrieve different @pPropertyCount@ values
+-- or @pProperties@ contents. Once an instance has been created, the layers
+-- enabled for that instance will continue to be enabled and valid for the
+-- lifetime of that instance, even if some of them become unavailable for
+-- future instances.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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@ @VkLayerProperties@ structures
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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
+-- | vkEnumerateDeviceLayerProperties - Returns properties of available
+-- physical device layers
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     layer properties available or queried.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     'VkLayerProperties' structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pProperties@ is @NULL@, then the number of layer properties
+-- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
+-- /must/ point to a variable set by the user to the number of elements in
+-- the @pProperties@ array, and on return the variable is overwritten with
+-- the number of structures actually written to @pProperties@. If
+-- @pPropertyCount@ is less than the number of layer properties available,
+-- at most @pPropertyCount@ structures will be written. If @pPropertyCount@
+-- is smaller than the number of layers available, @VK_INCOMPLETE@ will be
+-- returned instead of @VK_SUCCESS@, to indicate that not all the available
+-- layer properties were returned.
+--
+-- The list of layers enumerated by @vkEnumerateDeviceLayerProperties@
+-- /must/ be exactly the sequence of layers enabled for the instance. The
+-- members of @VkLayerProperties@ for each enumerated layer /must/ be the
+-- same as the properties when the layer was enumerated by
+-- @vkEnumerateInstanceLayerProperties@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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@ @VkLayerProperties@ structures
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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"
+  vkLayerName :: Vector VK_MAX_EXTENSION_NAME_SIZE CChar
+  , -- No documentation found for Nested "VkLayerProperties" "vkSpecVersion"
+  vkSpecVersion :: Word32
+  , -- No documentation found for Nested "VkLayerProperties" "vkImplementationVersion"
+  vkImplementationVersion :: Word32
+  , -- No documentation found for Nested "VkLayerProperties" "vkDescription"
+  vkDescription :: Vector VK_MAX_DESCRIPTION_SIZE CChar
+  }
+  deriving (Eq, Show)
+
+instance Storable VkLayerProperties where
+  sizeOf ~_ = 520
+  alignment ~_ = 4
+  peek ptr = VkLayerProperties <$> peek (ptr `plusPtr` 0)
+                               <*> peek (ptr `plusPtr` 256)
+                               <*> peek (ptr `plusPtr` 260)
+                               <*> peek (ptr `plusPtr` 264)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkLayerName (poked :: VkLayerProperties))
+                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkLayerProperties))
+                *> poke (ptr `plusPtr` 260) (vkImplementationVersion (poked :: VkLayerProperties))
+                *> poke (ptr `plusPtr` 264) (vkDescription (poked :: VkLayerProperties))
diff --git a/src/Graphics/Vulkan/Core10/Memory.hs b/src/Graphics/Vulkan/Core10/Memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Memory.hs
@@ -0,0 +1,753 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Memory
+  ( VkMemoryMapFlags(..)
+  , VkDeviceMemory
+  , vkAllocateMemory
+  , vkFreeMemory
+  , vkMapMemory
+  , vkUnmapMemory
+  , vkFlushMappedMemoryRanges
+  , vkInvalidateMappedMemoryRanges
+  , vkGetDeviceMemoryCommitment
+  , VkMemoryAllocateInfo(..)
+  , VkMappedMemoryRange(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+
+
+-- ** VkMemoryMapFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkMemoryMapFlags where
+  
+  showsPrec p (VkMemoryMapFlags x) = showParen (p >= 11) (showString "VkMemoryMapFlags " . showsPrec 11 x)
+
+instance Read VkMemoryMapFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkMemoryMapFlags")
+                        v <- step readPrec
+                        pure (VkMemoryMapFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'VkMappedMemoryRange',
+-- 'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkMemoryGetAndroidHardwareBufferInfoANDROID',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd.VkMemoryGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkMemoryGetWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryBind',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseMemoryBind',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex.VkWin32KeyedMutexAcquireReleaseInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex.VkWin32KeyedMutexAcquireReleaseInfoNV',
+-- 'vkAllocateMemory',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindBufferMemory',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.vkBindImageMemory',
+-- 'vkFreeMemory', 'vkGetDeviceMemoryCommitment',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.vkGetMemoryWin32HandleNV',
+-- 'vkMapMemory', 'vkUnmapMemory'
+type VkDeviceMemory = Ptr VkDeviceMemory_T
+-- | vkAllocateMemory - Allocate device memory
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @pAllocateInfo@ is a pointer to an instance of the
+--     'VkMemoryAllocateInfo' structure describing parameters of the
+--     allocation. A successful returned allocation /must/ use the
+--     requested parameters — no substitution is permitted by the
+--     implementation.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+-- implementation requires 128 byte alignment for images and 64 byte
+-- alignment for buffers, the device memory returned through this mechanism
+-- would be 128-byte aligned. This ensures that applications /can/
+-- correctly suballocate objects of different types (with potentially
+-- different alignment requirements) in the same memory object.
+--
+-- When memory is allocated, its contents are undefined.
+--
+-- The maximum number of valid memory allocations that /can/ exist
+-- simultaneously within a
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice' /may/ be
+-- restricted by implementation- or platform-dependent limits. If a call to
+-- '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>
+-- feature describes the number of allocations that /can/ exist
+-- simultaneously before encountering these internal limits.
+--
+-- Some platforms /may/ have a limit on the maximum size of a single
+-- 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.
+--
+-- == Valid Usage
+--
+-- -   @pAllocateInfo@->@allocationSize@ /must/ be less than or equal to
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceMemoryProperties'::@memoryHeaps@[@pAllocateInfo@->@memoryTypeIndex@].@size@
+--     as returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceMemoryProperties'
+--     for the
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice' that
+--     @device@ was created from.
+--
+-- -   @pAllocateInfo@->@memoryTypeIndex@ /must/ be less than
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceMemoryProperties'::@memoryTypeCount@
+--     as returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceMemoryProperties'
+--     for the
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice' that
+--     @device@ was created from.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pAllocateInfo@ /must/ be a valid pointer to a valid
+--     @VkMemoryAllocateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pMemory@ /must/ be a valid pointer to a @VkDeviceMemory@ 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_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDeviceMemory', 'VkMemoryAllocateInfo'
+foreign import ccall "vkAllocateMemory" vkAllocateMemory :: ("device" ::: VkDevice) -> ("pAllocateInfo" ::: Ptr VkMemoryAllocateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pMemory" ::: Ptr VkDeviceMemory) -> IO VkResult
+-- | 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.
+--
+-- = 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
+-- in the /pending state/. The memory /can/ remain bound to images or
+-- buffers at the time the memory object is freed, but any further use of
+-- them (on host or device) for anything other than destroying those
+-- objects will result in undefined behavior. If there are still any bound
+-- images or buffers, the memory /may/ not be immediately released by the
+-- implementation, but /must/ be released by the time all bound images and
+-- buffers have been destroyed. Once memory is released, it is returned to
+-- 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>
+-- section.
+--
+-- If a memory object is mapped at the time it is freed, it is implicitly
+-- unmapped.
+--
+-- __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.
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @memory@ (via images or
+--     buffers) /must/ have completed execution
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @memory@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @memory@ /must/
+--     be a valid @VkDeviceMemory@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @memory@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @memory@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkDeviceMemory'
+foreign import ccall "vkFreeMemory" vkFreeMemory :: ("device" ::: VkDevice) -> ("memory" ::: VkDeviceMemory) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkMapMemory - Map a memory object into application address space
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the @VkDeviceMemory@ object to be mapped.
+--
+-- -   @offset@ is a zero-based byte offset from the beginning of the
+--     memory object.
+--
+-- -   @size@ is the size of the memory range to map, or @VK_WHOLE_SIZE@ to
+--     map from @offset@ to the end of the allocation.
+--
+-- -   @flags@ is reserved for future use.
+--
+-- -   @ppData@ points to a pointer in which is returned a host-accessible
+--     pointer to the beginning of the mapped range. This pointer minus
+--     @offset@ /must/ be aligned to at least
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@minMemoryMapAlignment@.
+--
+-- = Description
+-- #_description#
+--
+-- It is an application error to call @vkMapMemory@ on a memory object that
+-- is already mapped.
+--
+-- __Note__
+--
+-- @vkMapMemory@ will fail if the implementation is unable to allocate an
+-- appropriately sized contiguous virtual address range, e.g. due to
+-- virtual address space fragmentation or platform limits. In such cases,
+-- @vkMapMemory@ /must/ return @VK_ERROR_MEMORY_MAP_FAILED@. The
+-- application /can/ improve the likelihood of success by reducing the size
+-- of the mapped range and\/or removing unneeded mappings using
+-- @VkUnmapMemory@.
+--
+-- @vkMapMemory@ does not check whether the device memory is currently in
+-- use before returning the host-accessible pointer. The application /must/
+-- guarantee that any previously submitted command that writes to this
+-- 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
+-- 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
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@nonCoherentAtomSize@,
+-- and round the end of the range up to the nearest multiple of
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@nonCoherentAtomSize@.
+--
+-- While a range of device memory is mapped for host access, the
+-- application is responsible for synchronizing both device and host access
+-- to that memory range.
+--
+-- __Note__
+--
+-- 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>
+-- as they are crucial to maintaining memory access ordering.
+--
+-- == Valid Usage
+--
+-- -   @memory@ /must/ not be currently mapped
+--
+-- -   @offset@ /must/ be less than the size of @memory@
+--
+-- -   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 the @memory@ minus @offset@
+--
+-- -   @memory@ /must/ have been created with a memory type that reports
+--     @VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @ppData@ /must/ be a valid pointer to a pointer value
+--
+-- -   @memory@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @memory@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_MEMORY_MAP_FAILED@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDeviceMemory', @VkDeviceSize@, 'VkMemoryMapFlags'
+foreign import ccall "vkMapMemory" vkMapMemory :: ("device" ::: VkDevice) -> ("memory" ::: VkDeviceMemory) -> ("offset" ::: VkDeviceSize) -> ("size" ::: VkDeviceSize) -> ("flags" ::: VkMemoryMapFlags) -> ("ppData" ::: Ptr (Ptr ())) -> IO VkResult
+-- | 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
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @memory@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   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.
+--
+-- -   @memoryRangeCount@ is the length of the @pMemoryRanges@ array.
+--
+-- -   @pMemoryRanges@ is a pointer to an array of 'VkMappedMemoryRange'
+--     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>.
+--
+-- Within each range described by @pMemoryRanges@, each set of
+-- @nonCoherentAtomSize@ bytes in that range is flushed if any byte in that
+-- set has been written by the host since it was first mapped, or the last
+-- time it was flushed. If @pMemoryRanges@ includes sets of
+-- @nonCoherentAtomSize@ bytes where no bytes have been written by the
+-- host, those bytes /must/ not be flushed.
+--
+-- Unmapping non-coherent memory does not implicitly flush the mapped
+-- memory, and host writes that have not been flushed /may/ not ever be
+-- visible to the device. However, implementations /must/ ensure that
+-- writes that have not been flushed do not become visible to any other
+-- memory.
+--
+-- __Note__
+--
+-- The above guarantee avoids a potential memory corruption in scenarios
+-- where host writes to a mapped memory object have not been flushed before
+-- the memory is unmapped (or freed), and the virtual address range is
+-- subsequently reused for a different mapping (or memory allocation).
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pMemoryRanges@ /must/ be a valid pointer to an array of
+--     @memoryRangeCount@ valid @VkMappedMemoryRange@ structures
+--
+-- -   @memoryRangeCount@ /must/ be greater than @0@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkMappedMemoryRange'
+foreign import ccall "vkFlushMappedMemoryRanges" vkFlushMappedMemoryRanges :: ("device" ::: VkDevice) -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr VkMappedMemoryRange) -> IO VkResult
+-- | vkInvalidateMappedMemoryRanges - Invalidate ranges of mapped memory
+-- objects
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the memory ranges.
+--
+-- -   @memoryRangeCount@ is the length of the @pMemoryRanges@ array.
+--
+-- -   @pMemoryRanges@ is a pointer to an array of 'VkMappedMemoryRange'
+--     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.
+--
+-- Within each range described by @pMemoryRanges@, each set of
+-- @nonCoherentAtomSize@ bytes in that range is invalidated if any byte in
+-- that set has been written by the device since it was first mapped, or
+-- the last time it was invalidated.
+--
+-- __Note__
+--
+-- Mapping non-coherent memory does not implicitly invalidate the mapped
+-- memory, and device writes that have not been invalidated /must/ be made
+-- visible before the host reads or overwrites them.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pMemoryRanges@ /must/ be a valid pointer to an array of
+--     @memoryRangeCount@ valid @VkMappedMemoryRange@ structures
+--
+-- -   @memoryRangeCount@ /must/ be greater than @0@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkMappedMemoryRange'
+foreign import ccall "vkInvalidateMappedMemoryRanges" vkInvalidateMappedMemoryRanges :: ("device" ::: VkDevice) -> ("memoryRangeCount" ::: Word32) -> ("pMemoryRanges" ::: Ptr VkMappedMemoryRange) -> IO VkResult
+-- | vkGetDeviceMemoryCommitment - Query the current commitment for a
+-- VkDeviceMemory
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the memory object being queried.
+--
+-- -   @pCommittedMemoryInBytes@ is a pointer to a @VkDeviceSize@ value in
+--     which the number of bytes currently committed is returned, on
+--     success.
+--
+-- = Description
+-- #_description#
+--
+-- The implementation /may/ update the commitment at any time, and the
+-- value returned by this query /may/ be out of date.
+--
+-- The implementation guarantees to allocate any committed memory from the
+-- heapIndex indicated by the memory type that the memory object was
+-- created with.
+--
+-- == Valid Usage
+--
+-- -   @memory@ /must/ have been created with a memory type that reports
+--     @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @pCommittedMemoryInBytes@ /must/ be a valid pointer to a
+--     @VkDeviceSize@ value
+--
+-- -   @memory@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDeviceMemory', @VkDeviceSize@
+foreign import ccall "vkGetDeviceMemoryCommitment" vkGetDeviceMemoryCommitment :: ("device" ::: VkDevice) -> ("memory" ::: VkDeviceMemory) -> ("pCommittedMemoryInBytes" ::: Ptr VkDeviceSize) -> IO ()
+-- | VkMemoryAllocateInfo - Structure containing parameters of a memory
+-- allocation
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @allocationSize@ /must/ be greater than @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExportMemoryAllocateInfo',
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExportMemoryAllocateInfoNV',
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkExportMemoryWin32HandleInfoKHR',
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.VkExportMemoryWin32HandleInfoNV',
+--     'Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer.VkImportAndroidHardwareBufferInfoANDROID',
+--     '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_NV_external_memory_win32.VkImportMemoryWin32HandleInfoNV',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkMemoryAllocateFlagsInfo',
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo'
+--
+-- -   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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryAllocateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryAllocateInfo" "vkAllocationSize"
+  vkAllocationSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkMemoryAllocateInfo" "vkMemoryTypeIndex"
+  vkMemoryTypeIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryAllocateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkMemoryAllocateInfo <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryAllocateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryAllocateInfo))
+                *> poke (ptr `plusPtr` 16) (vkAllocationSize (poked :: VkMemoryAllocateInfo))
+                *> poke (ptr `plusPtr` 24) (vkMemoryTypeIndex (poked :: VkMemoryAllocateInfo))
+-- | VkMappedMemoryRange - Structure specifying a mapped memory range
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @memory@ /must/ be currently mapped
+--
+-- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @offset@ and @size@
+--     /must/ specify a range contained within the currently mapped range
+--     of @memory@
+--
+-- -   If @size@ is equal to @VK_WHOLE_SIZE@, @offset@ /must/ be within the
+--     currently mapped range of @memory@
+--
+-- -   If @size@ is equal to @VK_WHOLE_SIZE@, the end of the current
+--     mapping of @memory@ /must/ be a multiple of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@nonCoherentAtomSize@
+--     bytes from the beginning of the memory object.
+--
+-- -   @offset@ /must/ be a multiple of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@nonCoherentAtomSize@
+--
+-- -   If @size@ is not equal to @VK_WHOLE_SIZE@, @size@ /must/ either be a
+--     multiple of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@nonCoherentAtomSize@,
+--     or @offset@ plus @size@ /must/ equal the size of @memory@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMappedMemoryRange" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMappedMemoryRange" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  , -- No documentation found for Nested "VkMappedMemoryRange" "vkOffset"
+  vkOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkMappedMemoryRange" "vkSize"
+  vkSize :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMappedMemoryRange where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkMappedMemoryRange <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 16)
+                                 <*> peek (ptr `plusPtr` 24)
+                                 <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMappedMemoryRange))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMappedMemoryRange))
+                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkMappedMemoryRange))
+                *> poke (ptr `plusPtr` 24) (vkOffset (poked :: VkMappedMemoryRange))
+                *> poke (ptr `plusPtr` 32) (vkSize (poked :: VkMappedMemoryRange))
diff --git a/src/Graphics/Vulkan/Core10/MemoryManagement.hs b/src/Graphics/Vulkan/Core10/MemoryManagement.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/MemoryManagement.hs
@@ -0,0 +1,388 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  , VkImage
+  , vkGetBufferMemoryRequirements
+  , vkBindBufferMemory
+  , vkGetImageMemoryRequirements
+  , vkBindImageMemory
+  , VkMemoryRequirements(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkBufferMemoryRequirementsInfo2',
+-- 'Graphics.Vulkan.Core10.BufferView.VkBufferViewCreateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkCmdProcessCommandsInfoNVX',
+-- 'Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation.VkDedicatedAllocationMemoryAllocateInfoNV',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkIndirectCommandsTokenNVX',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableIndexBufferEntryNVX',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.VkObjectTableVertexBufferEntryNVX',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseBufferMemoryBindInfo',
+-- 'vkBindBufferMemory',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindIndexBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindVertexBuffers',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyBufferToImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyImageToBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDispatchIndirect',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexedIndirect',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndexedIndirectCountAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndirect',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndirectCountAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdFillBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdUpdateBuffer',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.vkCmdWriteBufferMarkerAMD',
+-- 'Graphics.Vulkan.Core10.Buffer.vkCreateBuffer',
+-- 'Graphics.Vulkan.Core10.Buffer.vkDestroyBuffer',
+-- 'vkGetBufferMemoryRequirements'
+type VkBuffer = Ptr VkBuffer_T
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkImageMemoryRequirementsInfo2',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2.VkImageSparseMemoryRequirementsInfo2',
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageViewCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation.VkMemoryDedicatedAllocateInfo',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageMemoryBindInfo',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.VkSparseImageOpaqueMemoryBindInfo',
+-- 'vkBindImageMemory',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBlitImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearDepthStencilImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyBufferToImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyImageToBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResolveImage',
+-- 'Graphics.Vulkan.Core10.Image.vkCreateImage',
+-- 'Graphics.Vulkan.Core10.Image.vkDestroyImage',
+-- 'vkGetImageMemoryRequirements',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkGetImageSparseMemoryRequirements',
+-- 'Graphics.Vulkan.Core10.Image.vkGetImageSubresourceLayout',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetSwapchainImagesKHR'
+type VkImage = Ptr VkImage_T
+-- | vkGetBufferMemoryRequirements - Returns the memory requirements for
+-- specified Vulkan object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the buffer.
+--
+-- -   @buffer@ is the buffer to query.
+--
+-- -   @pMemoryRequirements@ points to an instance of the
+--     '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
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @pMemoryRequirements@ /must/ be a valid pointer to a
+--     @VkMemoryRequirements@ structure
+--
+-- -   @buffer@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkBuffer', 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkMemoryRequirements'
+foreign import ccall "vkGetBufferMemoryRequirements" vkGetBufferMemoryRequirements :: ("device" ::: VkDevice) -> ("buffer" ::: VkBuffer) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements) -> IO ()
+-- | vkBindBufferMemory - Bind device memory to a buffer object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the buffer and memory.
+--
+-- -   @buffer@ is the buffer to be attached to memory.
+--
+-- -   @memory@ is a @VkDeviceMemory@ object describing the device memory
+--     to attach.
+--
+-- -   @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.
+--
+-- = Description
+-- #_description#
+--
+-- == 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@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @buffer@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- -   @memory@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @buffer@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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@
+foreign import ccall "vkBindBufferMemory" vkBindBufferMemory :: ("device" ::: VkDevice) -> ("buffer" ::: VkBuffer) -> ("memory" ::: VkDeviceMemory) -> ("memoryOffset" ::: VkDeviceSize) -> IO VkResult
+-- | vkGetImageMemoryRequirements - Returns the memory requirements for
+-- specified Vulkan object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @image@ is the image to query.
+--
+-- -   @pMemoryRequirements@ points to an instance of the
+--     'VkMemoryRequirements' structure in which the memory requirements of
+--     the image object are returned.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @pMemoryRequirements@ /must/ be a valid pointer to a
+--     @VkMemoryRequirements@ structure
+--
+-- -   @image@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkImage',
+-- 'VkMemoryRequirements'
+foreign import ccall "vkGetImageMemoryRequirements" vkGetImageMemoryRequirements :: ("device" ::: VkDevice) -> ("image" ::: VkImage) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements) -> IO ()
+-- | vkBindImageMemory - Bind device memory to an image object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the image and memory.
+--
+-- -   @image@ is the image.
+--
+-- -   @memory@ is the @VkDeviceMemory@ object describing the device memory
+--     to attach.
+--
+-- -   @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.
+--
+-- = Description
+-- #_description#
+--
+-- == 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@
+--
+-- -   @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 @vkGetImageMemoryRequirements@
+--     with @image@
+--
+-- -   @memoryOffset@ /must/ be an integer multiple of the @alignment@
+--     member of the @VkMemoryRequirements@ structure returned from a call
+--     to @vkGetImageMemoryRequirements@ with @image@
+--
+-- -   The @size@ member of the @VkMemoryRequirements@ structure returned
+--     from a call to @vkGetImageMemoryRequirements@ with @image@ /must/ be
+--     less than or equal to the size of @memory@ minus @memoryOffset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @image@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- -   @memory@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @image@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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@,
+-- 'VkImage'
+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"
+  vkSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkMemoryRequirements" "vkAlignment"
+  vkAlignment :: VkDeviceSize
+  , -- No documentation found for Nested "VkMemoryRequirements" "vkMemoryTypeBits"
+  vkMemoryTypeBits :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryRequirements where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryRequirements <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryRequirements))
+                *> poke (ptr `plusPtr` 8) (vkAlignment (poked :: VkMemoryRequirements))
+                *> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryRequirements))
diff --git a/src/Graphics/Vulkan/Core10/Pass.hs b/src/Graphics/Vulkan/Core10/Pass.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Pass.hs
@@ -0,0 +1,1964 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Pass
+  ( VkAttachmentLoadOp(..)
+  , pattern VK_ATTACHMENT_LOAD_OP_LOAD
+  , pattern VK_ATTACHMENT_LOAD_OP_CLEAR
+  , pattern VK_ATTACHMENT_LOAD_OP_DONT_CARE
+  , VkAttachmentStoreOp(..)
+  , pattern VK_ATTACHMENT_STORE_OP_STORE
+  , pattern VK_ATTACHMENT_STORE_OP_DONT_CARE
+  , VkPipelineBindPoint(..)
+  , pattern VK_PIPELINE_BIND_POINT_GRAPHICS
+  , pattern VK_PIPELINE_BIND_POINT_COMPUTE
+  , VkFramebufferCreateFlags(..)
+  , VkRenderPassCreateFlags(..)
+  , VkAccessFlagBits(..)
+  , pattern VK_ACCESS_INDIRECT_COMMAND_READ_BIT
+  , pattern VK_ACCESS_INDEX_READ_BIT
+  , pattern VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT
+  , pattern VK_ACCESS_UNIFORM_READ_BIT
+  , pattern VK_ACCESS_INPUT_ATTACHMENT_READ_BIT
+  , pattern VK_ACCESS_SHADER_READ_BIT
+  , pattern VK_ACCESS_SHADER_WRITE_BIT
+  , pattern VK_ACCESS_COLOR_ATTACHMENT_READ_BIT
+  , pattern VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT
+  , pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT
+  , pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT
+  , pattern VK_ACCESS_TRANSFER_READ_BIT
+  , pattern VK_ACCESS_TRANSFER_WRITE_BIT
+  , pattern VK_ACCESS_HOST_READ_BIT
+  , pattern VK_ACCESS_HOST_WRITE_BIT
+  , pattern VK_ACCESS_MEMORY_READ_BIT
+  , pattern VK_ACCESS_MEMORY_WRITE_BIT
+  , VkSubpassDescriptionFlagBits(..)
+  , VkAttachmentDescriptionFlagBits(..)
+  , pattern VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT
+  , VkDependencyFlagBits(..)
+  , pattern VK_DEPENDENCY_BY_REGION_BIT
+  , VkFramebuffer
+  , vkCreateFramebuffer
+  , vkDestroyFramebuffer
+  , vkCreateRenderPass
+  , vkDestroyRenderPass
+  , vkGetRenderAreaGranularity
+  , VkAttachmentDescription(..)
+  , VkAttachmentReference(..)
+  , VkSubpassDescription(..)
+  , VkSubpassDependency(..)
+  , VkRenderPassCreateInfo(..)
+  , VkFramebufferCreateInfo(..)
+  , VkAccessFlags
+  , VkSubpassDescriptionFlags
+  , VkAttachmentDescriptionFlags
+  , VkDependencyFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFormat(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkSampleCountFlagBits(..)
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  )
+import Graphics.Vulkan.Core10.ImageView
+  ( VkImageView
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkExtent2D(..)
+  , VkRenderPass
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkPipelineStageFlags
+  )
+
+
+-- ** VkAttachmentLoadOp
+
+-- | VkAttachmentLoadOp - Specify how contents of an attachment are treated
+-- at the beginning of a subpass
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAttachmentDescription'
+newtype VkAttachmentLoadOp = VkAttachmentLoadOp Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkAttachmentLoadOp where
+  showsPrec _ VK_ATTACHMENT_LOAD_OP_LOAD = showString "VK_ATTACHMENT_LOAD_OP_LOAD"
+  showsPrec _ VK_ATTACHMENT_LOAD_OP_CLEAR = showString "VK_ATTACHMENT_LOAD_OP_CLEAR"
+  showsPrec _ VK_ATTACHMENT_LOAD_OP_DONT_CARE = showString "VK_ATTACHMENT_LOAD_OP_DONT_CARE"
+  showsPrec p (VkAttachmentLoadOp x) = showParen (p >= 11) (showString "VkAttachmentLoadOp " . showsPrec 11 x)
+
+instance Read VkAttachmentLoadOp where
+  readPrec = parens ( choose [ ("VK_ATTACHMENT_LOAD_OP_LOAD",      pure VK_ATTACHMENT_LOAD_OP_LOAD)
+                             , ("VK_ATTACHMENT_LOAD_OP_CLEAR",     pure VK_ATTACHMENT_LOAD_OP_CLEAR)
+                             , ("VK_ATTACHMENT_LOAD_OP_DONT_CARE", pure VK_ATTACHMENT_LOAD_OP_DONT_CARE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkAttachmentLoadOp")
+                        v <- step readPrec
+                        pure (VkAttachmentLoadOp v)
+                        )
+                    )
+
+-- | @VK_ATTACHMENT_LOAD_OP_LOAD@ specifies that the previous contents of the
+-- image within the render area will be preserved. For attachments with a
+-- depth\/stencil format, this uses the access type
+-- @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT@. For attachments with a
+-- color format, this uses the access type
+-- @VK_ACCESS_COLOR_ATTACHMENT_READ_BIT@.
+pattern VK_ATTACHMENT_LOAD_OP_LOAD :: VkAttachmentLoadOp
+pattern VK_ATTACHMENT_LOAD_OP_LOAD = VkAttachmentLoadOp 0
+
+-- | @VK_ATTACHMENT_LOAD_OP_CLEAR@ specifies that the contents within the
+-- render area will be cleared to a uniform value, which is specified when
+-- a render pass instance is begun. For attachments with a depth\/stencil
+-- format, this uses the access type
+-- @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT@. For attachments with a
+-- color format, this uses the access type
+-- @VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT@.
+pattern VK_ATTACHMENT_LOAD_OP_CLEAR :: VkAttachmentLoadOp
+pattern VK_ATTACHMENT_LOAD_OP_CLEAR = VkAttachmentLoadOp 1
+
+-- | @VK_ATTACHMENT_LOAD_OP_DONT_CARE@ specifies that the previous contents
+-- within the area need not be preserved; the contents of the attachment
+-- will be undefined inside the render area. For attachments with a
+-- depth\/stencil format, this uses the access type
+-- @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT@. For attachments with a
+-- color format, this uses the access type
+-- @VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT@.
+pattern VK_ATTACHMENT_LOAD_OP_DONT_CARE :: VkAttachmentLoadOp
+pattern VK_ATTACHMENT_LOAD_OP_DONT_CARE = VkAttachmentLoadOp 2
+-- ** VkAttachmentStoreOp
+
+-- | VkAttachmentStoreOp - Specify how contents of an attachment are treated
+-- at the end of a subpass
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAttachmentDescription'
+newtype VkAttachmentStoreOp = VkAttachmentStoreOp Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkAttachmentStoreOp where
+  showsPrec _ VK_ATTACHMENT_STORE_OP_STORE = showString "VK_ATTACHMENT_STORE_OP_STORE"
+  showsPrec _ VK_ATTACHMENT_STORE_OP_DONT_CARE = showString "VK_ATTACHMENT_STORE_OP_DONT_CARE"
+  showsPrec p (VkAttachmentStoreOp x) = showParen (p >= 11) (showString "VkAttachmentStoreOp " . showsPrec 11 x)
+
+instance Read VkAttachmentStoreOp where
+  readPrec = parens ( choose [ ("VK_ATTACHMENT_STORE_OP_STORE",     pure VK_ATTACHMENT_STORE_OP_STORE)
+                             , ("VK_ATTACHMENT_STORE_OP_DONT_CARE", pure VK_ATTACHMENT_STORE_OP_DONT_CARE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkAttachmentStoreOp")
+                        v <- step readPrec
+                        pure (VkAttachmentStoreOp v)
+                        )
+                    )
+
+-- | @VK_ATTACHMENT_STORE_OP_STORE@ specifies the contents generated during
+-- the render pass and within the render area are written to memory. For
+-- attachments with a depth\/stencil format, this uses the access type
+-- @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT@. For attachments with a
+-- color format, this uses the access type
+-- @VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT@.
+pattern VK_ATTACHMENT_STORE_OP_STORE :: VkAttachmentStoreOp
+pattern VK_ATTACHMENT_STORE_OP_STORE = VkAttachmentStoreOp 0
+
+-- | @VK_ATTACHMENT_STORE_OP_DONT_CARE@ specifies the contents within the
+-- render area are not needed after rendering, and /may/ be discarded; the
+-- contents of the attachment will be undefined inside the render area. For
+-- attachments with a depth\/stencil format, this uses the access type
+-- @VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT@. For attachments with a
+-- color format, this uses the access type
+-- @VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT@.
+pattern VK_ATTACHMENT_STORE_OP_DONT_CARE :: VkAttachmentStoreOp
+pattern VK_ATTACHMENT_STORE_OP_DONT_CARE = VkAttachmentStoreOp 1
+-- ** VkPipelineBindPoint
+
+-- | VkPipelineBindPoint - Specify the bind point of a pipeline object to a
+-- 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',
+-- 'VkSubpassDescription',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindDescriptorSets',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindPipeline',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetKHR'
+newtype VkPipelineBindPoint = VkPipelineBindPoint Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkPipelineBindPoint where
+  showsPrec _ VK_PIPELINE_BIND_POINT_GRAPHICS = showString "VK_PIPELINE_BIND_POINT_GRAPHICS"
+  showsPrec _ VK_PIPELINE_BIND_POINT_COMPUTE = showString "VK_PIPELINE_BIND_POINT_COMPUTE"
+  showsPrec p (VkPipelineBindPoint x) = showParen (p >= 11) (showString "VkPipelineBindPoint " . showsPrec 11 x)
+
+instance Read VkPipelineBindPoint where
+  readPrec = parens ( choose [ ("VK_PIPELINE_BIND_POINT_GRAPHICS", pure VK_PIPELINE_BIND_POINT_GRAPHICS)
+                             , ("VK_PIPELINE_BIND_POINT_COMPUTE",  pure VK_PIPELINE_BIND_POINT_COMPUTE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineBindPoint")
+                        v <- step readPrec
+                        pure (VkPipelineBindPoint v)
+                        )
+                    )
+
+-- | @VK_PIPELINE_BIND_POINT_GRAPHICS@ specifies binding as a graphics
+-- pipeline.
+pattern VK_PIPELINE_BIND_POINT_GRAPHICS :: VkPipelineBindPoint
+pattern VK_PIPELINE_BIND_POINT_GRAPHICS = VkPipelineBindPoint 0
+
+-- | @VK_PIPELINE_BIND_POINT_COMPUTE@ specifies binding as a compute
+-- pipeline.
+pattern VK_PIPELINE_BIND_POINT_COMPUTE :: VkPipelineBindPoint
+pattern VK_PIPELINE_BIND_POINT_COMPUTE = VkPipelineBindPoint 1
+-- ** VkFramebufferCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkFramebufferCreateFlags where
+  
+  showsPrec p (VkFramebufferCreateFlags x) = showParen (p >= 11) (showString "VkFramebufferCreateFlags " . showsPrec 11 x)
+
+instance Read VkFramebufferCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkFramebufferCreateFlags")
+                        v <- step readPrec
+                        pure (VkFramebufferCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkRenderPassCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkRenderPassCreateFlags where
+  
+  showsPrec p (VkRenderPassCreateFlags x) = showParen (p >= 11) (showString "VkRenderPassCreateFlags " . showsPrec 11 x)
+
+instance Read VkRenderPassCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkRenderPassCreateFlags")
+                        v <- step readPrec
+                        pure (VkRenderPassCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkAccessFlagBits
+
+-- | VkAccessFlagBits - Bitmask specifying memory access types that will
+-- 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
+--     dispatch command.
+--
+-- -   @VK_ACCESS_INDEX_READ_BIT@ specifies read access to an index buffer
+--     as part of an indexed drawing command, bound by
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindIndexBuffer'.
+--
+-- -   @VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT@ specifies read access to a
+--     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_INPUT_ATTACHMENT_READ_BIT@ specifies read access to an
+--     <{html_spec_relative}#renderpass input attachment> 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_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_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>.
+--
+-- -   @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>.
+--
+-- -   @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>.
+--
+-- -   @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>.
+--
+-- -   @VK_ACCESS_TRANSFER_READ_BIT@ specifies read access to an image or
+--     buffer in a <{html_spec_relative}#copies copy> 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.
+--
+-- -   @VK_ACCESS_HOST_READ_BIT@ specifies read access by a host operation.
+--     Accesses of this type are not performed through a resource, but
+--     directly on memory.
+--
+-- -   @VK_ACCESS_HOST_WRITE_BIT@ specifies write access by a host
+--     operation. Accesses of this type are not performed through a
+--     resource, but directly on memory.
+--
+-- -   @VK_ACCESS_MEMORY_READ_BIT@ specifies read access via non-specific
+--     entities. These entities include the Vulkan device and host, but
+--     /may/ also include entities external to the Vulkan device or
+--     otherwise not part of the core Vulkan pipeline. When included in a
+--     destination access mask, makes all available writes visible to all
+--     future read accesses on entities known to the Vulkan device.
+--
+-- -   @VK_ACCESS_MEMORY_WRITE_BIT@ specifies write access via non-specific
+--     entities. These entities include the Vulkan device and host, but
+--     /may/ also include entities external to the Vulkan device or
+--     otherwise not part of the core Vulkan pipeline. When included in a
+--     source access mask, all writes that are performed by entities known
+--     to the Vulkan device are made available. When included in a
+--     destination access mask, makes all available writes visible to all
+--     future write accesses on entities known to the Vulkan device.
+--
+-- 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>
+-- - 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
+-- pipeline stage in the corresponding stage mask that is able to perform
+-- 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
+--
+-- 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>.
+-- 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.
+--
+-- 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.
+--
+-- __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>
+-- 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
+-- the device read access, writes /can/ be made available by using an
+-- explicit memory barrier.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAccessFlags'
+newtype VkAccessFlagBits = VkAccessFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkAccessFlagBits where
+  showsPrec _ VK_ACCESS_INDIRECT_COMMAND_READ_BIT = showString "VK_ACCESS_INDIRECT_COMMAND_READ_BIT"
+  showsPrec _ VK_ACCESS_INDEX_READ_BIT = showString "VK_ACCESS_INDEX_READ_BIT"
+  showsPrec _ VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = showString "VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"
+  showsPrec _ VK_ACCESS_UNIFORM_READ_BIT = showString "VK_ACCESS_UNIFORM_READ_BIT"
+  showsPrec _ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = showString "VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"
+  showsPrec _ VK_ACCESS_SHADER_READ_BIT = showString "VK_ACCESS_SHADER_READ_BIT"
+  showsPrec _ VK_ACCESS_SHADER_WRITE_BIT = showString "VK_ACCESS_SHADER_WRITE_BIT"
+  showsPrec _ VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = showString "VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"
+  showsPrec _ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = showString "VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"
+  showsPrec _ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = showString "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"
+  showsPrec _ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = showString "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"
+  showsPrec _ VK_ACCESS_TRANSFER_READ_BIT = showString "VK_ACCESS_TRANSFER_READ_BIT"
+  showsPrec _ VK_ACCESS_TRANSFER_WRITE_BIT = showString "VK_ACCESS_TRANSFER_WRITE_BIT"
+  showsPrec _ VK_ACCESS_HOST_READ_BIT = showString "VK_ACCESS_HOST_READ_BIT"
+  showsPrec _ VK_ACCESS_HOST_WRITE_BIT = showString "VK_ACCESS_HOST_WRITE_BIT"
+  showsPrec _ VK_ACCESS_MEMORY_READ_BIT = showString "VK_ACCESS_MEMORY_READ_BIT"
+  showsPrec _ VK_ACCESS_MEMORY_WRITE_BIT = showString "VK_ACCESS_MEMORY_WRITE_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkAccessFlagBits 0x00020000) = showString "VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX"
+  showsPrec _ (VkAccessFlagBits 0x00040000) = showString "VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX"
+  showsPrec _ (VkAccessFlagBits 0x00080000) = showString "VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"
+  showsPrec p (VkAccessFlagBits x) = showParen (p >= 11) (showString "VkAccessFlagBits " . showsPrec 11 x)
+
+instance Read VkAccessFlagBits where
+  readPrec = parens ( choose [ ("VK_ACCESS_INDIRECT_COMMAND_READ_BIT",          pure VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
+                             , ("VK_ACCESS_INDEX_READ_BIT",                     pure VK_ACCESS_INDEX_READ_BIT)
+                             , ("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT",          pure VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
+                             , ("VK_ACCESS_UNIFORM_READ_BIT",                   pure VK_ACCESS_UNIFORM_READ_BIT)
+                             , ("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT",          pure VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
+                             , ("VK_ACCESS_SHADER_READ_BIT",                    pure VK_ACCESS_SHADER_READ_BIT)
+                             , ("VK_ACCESS_SHADER_WRITE_BIT",                   pure VK_ACCESS_SHADER_WRITE_BIT)
+                             , ("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT",          pure VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
+                             , ("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT",         pure VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
+                             , ("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT",  pure VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
+                             , ("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT", pure VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
+                             , ("VK_ACCESS_TRANSFER_READ_BIT",                  pure VK_ACCESS_TRANSFER_READ_BIT)
+                             , ("VK_ACCESS_TRANSFER_WRITE_BIT",                 pure VK_ACCESS_TRANSFER_WRITE_BIT)
+                             , ("VK_ACCESS_HOST_READ_BIT",                      pure VK_ACCESS_HOST_READ_BIT)
+                             , ("VK_ACCESS_HOST_WRITE_BIT",                     pure VK_ACCESS_HOST_WRITE_BIT)
+                             , ("VK_ACCESS_MEMORY_READ_BIT",                    pure VK_ACCESS_MEMORY_READ_BIT)
+                             , ("VK_ACCESS_MEMORY_WRITE_BIT",                   pure VK_ACCESS_MEMORY_WRITE_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX",              pure (VkAccessFlagBits 0x00020000))
+                             , ("VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX",             pure (VkAccessFlagBits 0x00040000))
+                             , ("VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT", pure (VkAccessFlagBits 0x00080000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkAccessFlagBits")
+                        v <- step readPrec
+                        pure (VkAccessFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_INDIRECT_COMMAND_READ_BIT"
+pattern VK_ACCESS_INDIRECT_COMMAND_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_INDIRECT_COMMAND_READ_BIT = VkAccessFlagBits 0x00000001
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_INDEX_READ_BIT"
+pattern VK_ACCESS_INDEX_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_INDEX_READ_BIT = VkAccessFlagBits 0x00000002
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"
+pattern VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = VkAccessFlagBits 0x00000004
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_UNIFORM_READ_BIT"
+pattern VK_ACCESS_UNIFORM_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_UNIFORM_READ_BIT = VkAccessFlagBits 0x00000008
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"
+pattern VK_ACCESS_INPUT_ATTACHMENT_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x00000010
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_SHADER_READ_BIT"
+pattern VK_ACCESS_SHADER_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_SHADER_READ_BIT = VkAccessFlagBits 0x00000020
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_SHADER_WRITE_BIT"
+pattern VK_ACCESS_SHADER_WRITE_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_SHADER_WRITE_BIT = VkAccessFlagBits 0x00000040
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"
+pattern VK_ACCESS_COLOR_ATTACHMENT_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x00000080
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"
+pattern VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x00000100
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"
+pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x00000200
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"
+pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x00000400
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_TRANSFER_READ_BIT"
+pattern VK_ACCESS_TRANSFER_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_TRANSFER_READ_BIT = VkAccessFlagBits 0x00000800
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_TRANSFER_WRITE_BIT"
+pattern VK_ACCESS_TRANSFER_WRITE_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_TRANSFER_WRITE_BIT = VkAccessFlagBits 0x00001000
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_HOST_READ_BIT"
+pattern VK_ACCESS_HOST_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_HOST_READ_BIT = VkAccessFlagBits 0x00002000
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_HOST_WRITE_BIT"
+pattern VK_ACCESS_HOST_WRITE_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_HOST_WRITE_BIT = VkAccessFlagBits 0x00004000
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_MEMORY_READ_BIT"
+pattern VK_ACCESS_MEMORY_READ_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_MEMORY_READ_BIT = VkAccessFlagBits 0x00008000
+
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_MEMORY_WRITE_BIT"
+pattern VK_ACCESS_MEMORY_WRITE_BIT :: VkAccessFlagBits
+pattern VK_ACCESS_MEMORY_WRITE_BIT = VkAccessFlagBits 0x00010000
+-- ** VkSubpassDescriptionFlagBits
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSubpassDescriptionFlagBits where
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkSubpassDescriptionFlagBits 0x00000001) = showString "VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX"
+  showsPrec _ (VkSubpassDescriptionFlagBits 0x00000002) = showString "VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX"
+  showsPrec p (VkSubpassDescriptionFlagBits x) = showParen (p >= 11) (showString "VkSubpassDescriptionFlagBits " . showsPrec 11 x)
+
+instance Read VkSubpassDescriptionFlagBits where
+  readPrec = parens ( choose [ -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX",      pure (VkSubpassDescriptionFlagBits 0x00000001))
+                             , ("VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX", pure (VkSubpassDescriptionFlagBits 0x00000002))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSubpassDescriptionFlagBits")
+                        v <- step readPrec
+                        pure (VkSubpassDescriptionFlagBits v)
+                        )
+                    )
+
+
+-- ** VkAttachmentDescriptionFlagBits
+
+-- | VkAttachmentDescriptionFlagBits - Bitmask specifying additional
+-- properties of an attachment
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAttachmentDescriptionFlags'
+newtype VkAttachmentDescriptionFlagBits = VkAttachmentDescriptionFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkAttachmentDescriptionFlagBits where
+  showsPrec _ VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = showString "VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"
+  showsPrec p (VkAttachmentDescriptionFlagBits x) = showParen (p >= 11) (showString "VkAttachmentDescriptionFlagBits " . showsPrec 11 x)
+
+instance Read VkAttachmentDescriptionFlagBits where
+  readPrec = parens ( choose [ ("VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT", pure VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkAttachmentDescriptionFlagBits")
+                        v <- step readPrec
+                        pure (VkAttachmentDescriptionFlagBits v)
+                        )
+                    )
+
+-- | @VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT@ specifies that the attachment
+-- aliases the same device memory as other attachments.
+pattern VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT :: VkAttachmentDescriptionFlagBits
+pattern VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = VkAttachmentDescriptionFlagBits 0x00000001
+-- ** VkDependencyFlagBits
+
+-- | VkDependencyFlagBits - Bitmask specifying how execution and memory
+-- dependencies are formed
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDependencyFlags'
+newtype VkDependencyFlagBits = VkDependencyFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDependencyFlagBits where
+  showsPrec _ VK_DEPENDENCY_BY_REGION_BIT = showString "VK_DEPENDENCY_BY_REGION_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkDependencyFlagBits 0x00000004) = showString "VK_DEPENDENCY_DEVICE_GROUP_BIT"
+  showsPrec _ (VkDependencyFlagBits 0x00000002) = showString "VK_DEPENDENCY_VIEW_LOCAL_BIT"
+  showsPrec p (VkDependencyFlagBits x) = showParen (p >= 11) (showString "VkDependencyFlagBits " . showsPrec 11 x)
+
+instance Read VkDependencyFlagBits where
+  readPrec = parens ( choose [ ("VK_DEPENDENCY_BY_REGION_BIT", pure VK_DEPENDENCY_BY_REGION_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_DEPENDENCY_DEVICE_GROUP_BIT", pure (VkDependencyFlagBits 0x00000004))
+                             , ("VK_DEPENDENCY_VIEW_LOCAL_BIT",   pure (VkDependencyFlagBits 0x00000002))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDependencyFlagBits")
+                        v <- step readPrec
+                        pure (VkDependencyFlagBits v)
+                        )
+                    )
+
+-- | @VK_DEPENDENCY_BY_REGION_BIT@ specifies that dependencies will be
+-- <{html_spec_relative}#synchronization-framebuffer-regions framebuffer-local>.
+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',
+-- 'vkCreateFramebuffer', 'vkDestroyFramebuffer'
+type VkFramebuffer = Ptr VkFramebuffer_T
+-- | vkCreateFramebuffer - Create a new framebuffer object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the framebuffer.
+--
+-- -   @pCreateInfo@ points to a 'VkFramebufferCreateInfo' structure which
+--     describes additional information about framebuffer creation.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkFramebufferCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pFramebuffer@ /must/ be a valid pointer to a @VkFramebuffer@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkFramebufferCreateInfo'
+foreign import ccall "vkCreateFramebuffer" vkCreateFramebuffer :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkFramebufferCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pFramebuffer" ::: Ptr VkFramebuffer) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @framebuffer@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @framebuffer@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @framebuffer@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @framebuffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @framebuffer@
+--     /must/ be a valid @VkFramebuffer@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @framebuffer@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @framebuffer@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkFramebuffer'
+foreign import ccall "vkDestroyFramebuffer" vkDestroyFramebuffer :: ("device" ::: VkDevice) -> ("framebuffer" ::: VkFramebuffer) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkCreateRenderPass - Create a new render pass object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the render pass.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkRenderPassCreateInfo' structure that describes the parameters of
+--     the render pass.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkRenderPassCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pRenderPass@ /must/ be a valid pointer to a @VkRenderPass@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass', 'VkRenderPassCreateInfo'
+foreign import ccall "vkCreateRenderPass" vkCreateRenderPass :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkRenderPassCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pRenderPass" ::: Ptr VkRenderPass) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @renderPass@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @renderPass@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @renderPass@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @renderPass@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @renderPass@
+--     /must/ be a valid @VkRenderPass@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @renderPass@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @renderPass@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass'
+foreign import ccall "vkDestroyRenderPass" vkDestroyRenderPass :: ("device" ::: VkDevice) -> ("renderPass" ::: VkRenderPass) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkGetRenderAreaGranularity - Returns the granularity for optimal render
+-- area
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the render pass.
+--
+-- -   @renderPass@ is a handle to a render pass.
+--
+-- -   @pGranularity@ points to a
+--     'Graphics.Vulkan.Core10.Pipeline.VkExtent2D' structure in which the
+--     granularity is returned.
+--
+-- = Description
+-- #_description#
+--
+-- The conditions leading to an optimal @renderArea@ are:
+--
+-- -   the @offset.x@ member in @renderArea@ is a multiple of the @width@
+--     member of the returned 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D'
+--     (the horizontal granularity).
+--
+-- -   the @offset.y@ member in @renderArea@ is a multiple of the @height@
+--     of the returned 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D' (the
+--     vertical granularity).
+--
+-- -   either the @offset.width@ member in @renderArea@ is a multiple of
+--     the horizontal granularity or @offset.x@+@offset.width@ is equal to
+--     the @width@ of the @framebuffer@ in the
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo'.
+--
+-- -   either the @offset.height@ member in @renderArea@ is a multiple of
+--     the vertical granularity or @offset.y@+@offset.height@ is equal to
+--     the @height@ of the @framebuffer@ in the
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo'.
+--
+-- 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>.
+-- Similarly, pipeline barriers are valid even if their effect extends
+-- outside the render area.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @renderPass@ /must/ be a valid @VkRenderPass@ handle
+--
+-- -   @pGranularity@ /must/ be a valid pointer to a @VkExtent2D@ structure
+--
+-- -   @renderPass@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkRenderPass'
+foreign import ccall "vkGetRenderAreaGranularity" vkGetRenderAreaGranularity :: ("device" ::: VkDevice) -> ("renderPass" ::: VkRenderPass) -> ("pGranularity" ::: Ptr VkExtent2D) -> IO ()
+-- | 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
+-- format has depth and\/or stencil components, @loadOp@ and @storeOp@
+-- apply only to the depth data, while @stencilLoadOp@ and @stencilStoreOp@
+-- define how the stencil data is handled. @loadOp@ and @stencilLoadOp@
+-- define the /load operations/ that execute as part of the first subpass
+-- that uses the attachment. @storeOp@ and @stencilStoreOp@ define the
+-- /store operations/ that execute as part of the last subpass that uses
+-- the attachment.
+--
+-- The load operation for each sample in an attachment happens-before any
+-- recorded command which accesses the sample in the first subpass where
+-- the attachment is used. Load operations for attachments with a
+-- depth\/stencil format execute in the
+-- @VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT@ pipeline stage. Load
+-- operations for attachments with a color format execute in the
+-- @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@ pipeline stage.
+--
+-- The store operation for each sample in an attachment happens-after any
+-- recorded command which accesses the sample in the last subpass where the
+-- attachment is used. Store operations for attachments with a
+-- depth\/stencil format execute in the
+-- @VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT@ pipeline stage. Store
+-- operations for attachments with a color format execute in the
+-- @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@ pipeline stage.
+--
+-- If an attachment is not used by any subpass, then @loadOp@, @storeOp@,
+-- @stencilStoreOp@, and @stencilLoadOp@ 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.
+-- Attachments with other floating- or fixed-point color formats, or with
+-- depth components /may/ be represented in a format with a precision
+-- higher than the attachment format, but /must/ be represented with the
+-- same range. When such a component is loaded via the @loadOp@, it will be
+-- converted into an implementation-dependent format used by the render
+-- 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>.
+--
+-- If @flags@ includes @VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT@, then the
+-- attachment is treated as if it shares physical memory with another
+-- attachment in the same render pass. This information limits the ability
+-- of the implementation to reorder certain operations (like layout
+-- transitions and the @loadOp@) such that it is not improperly reordered
+-- against other uses of the same physical memory via a different
+-- attachment. This is described in more detail below.
+--
+-- == Valid Usage
+--
+-- -   @finalLayout@ /must/ not be @VK_IMAGE_LAYOUT_UNDEFINED@ or
+--     @VK_IMAGE_LAYOUT_PREINITIALIZED@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkAttachmentDescriptionFlagBits' values
+--
+-- -   @format@ /must/ be a valid 'Graphics.Vulkan.Core10.Core.VkFormat'
+--     value
+--
+-- -   @samples@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+--     value
+--
+-- -   @loadOp@ /must/ be a valid 'VkAttachmentLoadOp' value
+--
+-- -   @storeOp@ /must/ be a valid 'VkAttachmentStoreOp' value
+--
+-- -   @stencilLoadOp@ /must/ be a valid 'VkAttachmentLoadOp' value
+--
+-- -   @stencilStoreOp@ /must/ be a valid 'VkAttachmentStoreOp' value
+--
+-- -   @initialLayout@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Image.VkImageLayout' value
+--
+-- -   @finalLayout@ /must/ be a valid
+--     '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"
+  vkFlags :: VkAttachmentDescriptionFlags
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkSamples"
+  vkSamples :: VkSampleCountFlagBits
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkLoadOp"
+  vkLoadOp :: VkAttachmentLoadOp
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkStoreOp"
+  vkStoreOp :: VkAttachmentStoreOp
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkStencilLoadOp"
+  vkStencilLoadOp :: VkAttachmentLoadOp
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkStencilStoreOp"
+  vkStencilStoreOp :: VkAttachmentStoreOp
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkInitialLayout"
+  vkInitialLayout :: VkImageLayout
+  , -- No documentation found for Nested "VkAttachmentDescription" "vkFinalLayout"
+  vkFinalLayout :: VkImageLayout
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAttachmentDescription where
+  sizeOf ~_ = 36
+  alignment ~_ = 4
+  peek ptr = VkAttachmentDescription <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkAttachmentDescription))
+                *> poke (ptr `plusPtr` 4) (vkFormat (poked :: VkAttachmentDescription))
+                *> poke (ptr `plusPtr` 8) (vkSamples (poked :: VkAttachmentDescription))
+                *> poke (ptr `plusPtr` 12) (vkLoadOp (poked :: VkAttachmentDescription))
+                *> poke (ptr `plusPtr` 16) (vkStoreOp (poked :: VkAttachmentDescription))
+                *> poke (ptr `plusPtr` 20) (vkStencilLoadOp (poked :: VkAttachmentDescription))
+                *> poke (ptr `plusPtr` 24) (vkStencilStoreOp (poked :: VkAttachmentDescription))
+                *> poke (ptr `plusPtr` 28) (vkInitialLayout (poked :: VkAttachmentDescription))
+                *> 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
+--     @VK_IMAGE_LAYOUT_PREINITIALIZED@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @layout@ /must/ be a valid
+--     '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"
+  vkAttachment :: Word32
+  , -- No documentation found for Nested "VkAttachmentReference" "vkLayout"
+  vkLayout :: VkImageLayout
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAttachmentReference where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkAttachmentReference <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAttachment (poked :: VkAttachmentReference))
+                *> poke (ptr `plusPtr` 4) (vkLayout (poked :: VkAttachmentReference))
+-- | 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
+-- true:
+--
+-- -   The attachment is used as a color, depth\/stencil, or resolve
+--     attachment in any subpass in the render pass.
+--
+-- -   There is a subpass __S1__ that uses or preserves the attachment, and
+--     a subpass dependency from __S1__ to __S__.
+--
+-- -   The attachment is not used or preserved in subpass __S__.
+--
+-- Once the contents of an attachment become undefined in subpass __S__,
+-- they remain undefined for subpasses in subpass dependency chains
+-- starting with subpass __S__ until they are written again. However, they
+-- remain valid for subpasses in other subpass dependency chains starting
+-- with subpass __S1__ if those subpasses use or preserve the attachment.
+--
+-- == Valid Usage
+--
+-- -   @pipelineBindPoint@ /must/ be @VK_PIPELINE_BIND_POINT_GRAPHICS@
+--
+-- -   @colorAttachmentCount@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxColorAttachments@
+--
+-- -   If the first use of an attachment in this render pass is as an input
+--     attachment, and the attachment is not also used as a color or
+--     depth\/stencil attachment in the same subpass, then @loadOp@ /must/
+--     not be @VK_ATTACHMENT_LOAD_OP_CLEAR@
+--
+-- -   If @pResolveAttachments@ is not @NULL@, for each resolve attachment
+--     that does not have the value @VK_ATTACHMENT_UNUSED@, the
+--     corresponding color attachment /must/ not have the value
+--     @VK_ATTACHMENT_UNUSED@
+--
+-- -   If @pResolveAttachments@ is not @NULL@, the sample count of each
+--     element of @pColorAttachments@ /must/ be anything other than
+--     @VK_SAMPLE_COUNT_1_BIT@
+--
+-- -   Each element of @pResolveAttachments@ /must/ have a sample count of
+--     @VK_SAMPLE_COUNT_1_BIT@
+--
+-- -   Each element of @pResolveAttachments@ /must/ have the same
+--     'Graphics.Vulkan.Core10.Core.VkFormat' as its corresponding color
+--     attachment
+--
+-- -   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
+--
+-- -   If any input attachments are @VK_ATTACHMENT_UNUSED@, then any
+--     pipelines bound during the subpass /must/ not access those input
+--     attachments from the fragment shader
+--
+-- -   The @attachment@ member of each element of @pPreserveAttachments@
+--     /must/ not be @VK_ATTACHMENT_UNUSED@
+--
+-- -   Each element of @pPreserveAttachments@ /must/ not also be an element
+--     of any other member of the subpass description
+--
+-- -   If any attachment is used as both an input attachment and a color or
+--     depth\/stencil attachment, then each use /must/ use the same
+--     @layout@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkSubpassDescriptionFlagBits' values
+--
+-- -   @pipelineBindPoint@ /must/ be a valid 'VkPipelineBindPoint' value
+--
+-- -   If @inputAttachmentCount@ is not @0@, @pInputAttachments@ /must/ be
+--     a valid pointer to an array of @inputAttachmentCount@ valid
+--     @VkAttachmentReference@ structures
+--
+-- -   If @colorAttachmentCount@ is not @0@, @pColorAttachments@ /must/ be
+--     a valid pointer to an array of @colorAttachmentCount@ valid
+--     @VkAttachmentReference@ structures
+--
+-- -   If @colorAttachmentCount@ is not @0@, and @pResolveAttachments@ is
+--     not @NULL@, @pResolveAttachments@ /must/ be a valid pointer to an
+--     array of @colorAttachmentCount@ valid @VkAttachmentReference@
+--     structures
+--
+-- -   If @pDepthStencilAttachment@ is not @NULL@,
+--     @pDepthStencilAttachment@ /must/ be a valid pointer to a valid
+--     @VkAttachmentReference@ structure
+--
+-- -   If @preserveAttachmentCount@ is not @0@, @pPreserveAttachments@
+--     /must/ be a valid pointer to an array of @preserveAttachmentCount@
+--     @uint32_t@ values
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAttachmentReference', 'VkPipelineBindPoint',
+-- 'VkRenderPassCreateInfo', 'VkSubpassDescriptionFlags'
+data VkSubpassDescription = VkSubpassDescription
+  { -- No documentation found for Nested "VkSubpassDescription" "vkFlags"
+  vkFlags :: VkSubpassDescriptionFlags
+  , -- No documentation found for Nested "VkSubpassDescription" "vkPipelineBindPoint"
+  vkPipelineBindPoint :: VkPipelineBindPoint
+  , -- No documentation found for Nested "VkSubpassDescription" "vkInputAttachmentCount"
+  vkInputAttachmentCount :: Word32
+  , -- No documentation found for Nested "VkSubpassDescription" "vkPInputAttachments"
+  vkPInputAttachments :: Ptr VkAttachmentReference
+  , -- No documentation found for Nested "VkSubpassDescription" "vkColorAttachmentCount"
+  vkColorAttachmentCount :: Word32
+  , -- No documentation found for Nested "VkSubpassDescription" "vkPColorAttachments"
+  vkPColorAttachments :: Ptr VkAttachmentReference
+  , -- No documentation found for Nested "VkSubpassDescription" "vkPResolveAttachments"
+  vkPResolveAttachments :: Ptr VkAttachmentReference
+  , -- No documentation found for Nested "VkSubpassDescription" "vkPDepthStencilAttachment"
+  vkPDepthStencilAttachment :: Ptr VkAttachmentReference
+  , -- No documentation found for Nested "VkSubpassDescription" "vkPreserveAttachmentCount"
+  vkPreserveAttachmentCount :: Word32
+  , -- No documentation found for Nested "VkSubpassDescription" "vkPPreserveAttachments"
+  vkPPreserveAttachments :: Ptr Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSubpassDescription where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkSubpassDescription <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 4)
+                                  <*> 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)
+                                  <*> peek (ptr `plusPtr` 64)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 4) (vkPipelineBindPoint (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 8) (vkInputAttachmentCount (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 16) (vkPInputAttachments (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 24) (vkColorAttachmentCount (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 32) (vkPColorAttachments (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 40) (vkPResolveAttachments (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 48) (vkPDepthStencilAttachment (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 56) (vkPreserveAttachmentCount (poked :: VkSubpassDescription))
+                *> poke (ptr `plusPtr` 64) (vkPPreserveAttachments (poked :: VkSubpassDescription))
+-- | 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>,
+-- 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
+-- dependency between the subpasses identified by @srcSubpass@ and
+-- @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>
+-- than the
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBeginRenderPass' used
+-- to begin the render pass instance. Otherwise, the first set of commands
+-- includes all commands submitted as part of the subpass instance
+-- 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>
+-- 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>
+-- than the
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdEndRenderPass' used
+-- to end the render pass instance. Otherwise, the second set of commands
+-- includes all commands submitted as part of the subpass instance
+-- 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>
+-- 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@. It is also 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 in the pipeline stages determined by the
+-- <{html_spec_relative}#synchronization-pipeline-stages-masks destination stage mask>
+-- specified by @dstStageMask@. It is also limited to access types in the
+-- <{html_spec_relative}#synchronization-access-masks destination access mask>
+-- 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>
+-- within the render pass.
+--
+-- __Note__
+--
+-- For non-attachment resources, the memory dependency expressed by subpass
+-- dependency is nearly identical to that of a
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkMemoryBarrier' (with
+-- matching @srcAccessMask@\/@dstAccessMask@ parameters) submitted as a
+-- part of a
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPipelineBarrier'
+-- (with matching @srcStageMask@\/@dstStageMask@ parameters). The only
+-- difference being that its scopes are limited to the identified subpasses
+-- rather than potentially affecting everything before and after.
+--
+-- For attachments however, subpass dependencies work more like an
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier'
+-- defined similarly to the
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkMemoryBarrier' above,
+-- the queue family indices set to @VK_QUEUE_FAMILY_IGNORED@, and layouts
+-- as follows:
+--
+-- -   The equivalent to @oldLayout@ is the attachment’s layout according
+--     to the subpass description for @srcSubpass@.
+--
+-- -   The equivalent to @newLayout@ is the attachment’s layout according
+--     to the subpass description for @dstSubpass@.
+--
+-- == Valid Usage
+--
+-- -   If @srcSubpass@ is not @VK_SUBPASS_EXTERNAL@, @srcStageMask@ /must/
+--     not include @VK_PIPELINE_STAGE_HOST_BIT@
+--
+-- -   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>
+--     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@
+--
+-- -   @srcSubpass@ /must/ be less than or equal to @dstSubpass@, unless
+--     one of them is @VK_SUBPASS_EXTERNAL@, to avoid cyclic dependencies
+--     and ensure a valid execution order
+--
+-- -   @srcSubpass@ and @dstSubpass@ /must/ not both be equal to
+--     @VK_SUBPASS_EXTERNAL@
+--
+-- -   If @srcSubpass@ is equal to @dstSubpass@, @srcStageMask@ and
+--     @dstStageMask@ /must/ only contain one of
+--     @VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT@,
+--     @VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT@,
+--     @VK_PIPELINE_STAGE_VERTEX_INPUT_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@,
+--     @VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT@,
+--     @VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT@,
+--     @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@,
+--     @VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT@, or
+--     @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>
+--     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>.
+--
+-- -   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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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@
+--
+-- -   @srcAccessMask@ /must/ be a valid combination of 'VkAccessFlagBits'
+--     values
+--
+-- -   @dstAccessMask@ /must/ be a valid combination of 'VkAccessFlagBits'
+--     values
+--
+-- -   @dependencyFlags@ /must/ be a valid combination of
+--     'VkDependencyFlagBits' values
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAccessFlags', 'VkDependencyFlags',
+-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlags',
+-- 'VkRenderPassCreateInfo'
+data VkSubpassDependency = VkSubpassDependency
+  { -- No documentation found for Nested "VkSubpassDependency" "vkSrcSubpass"
+  vkSrcSubpass :: Word32
+  , -- No documentation found for Nested "VkSubpassDependency" "vkDstSubpass"
+  vkDstSubpass :: Word32
+  , -- No documentation found for Nested "VkSubpassDependency" "vkSrcStageMask"
+  vkSrcStageMask :: VkPipelineStageFlags
+  , -- No documentation found for Nested "VkSubpassDependency" "vkDstStageMask"
+  vkDstStageMask :: VkPipelineStageFlags
+  , -- No documentation found for Nested "VkSubpassDependency" "vkSrcAccessMask"
+  vkSrcAccessMask :: VkAccessFlags
+  , -- No documentation found for Nested "VkSubpassDependency" "vkDstAccessMask"
+  vkDstAccessMask :: VkAccessFlags
+  , -- No documentation found for Nested "VkSubpassDependency" "vkDependencyFlags"
+  vkDependencyFlags :: VkDependencyFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSubpassDependency where
+  sizeOf ~_ = 28
+  alignment ~_ = 4
+  peek ptr = VkSubpassDependency <$> 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) (vkSrcSubpass (poked :: VkSubpassDependency))
+                *> poke (ptr `plusPtr` 4) (vkDstSubpass (poked :: VkSubpassDependency))
+                *> poke (ptr `plusPtr` 8) (vkSrcStageMask (poked :: VkSubpassDependency))
+                *> poke (ptr `plusPtr` 12) (vkDstStageMask (poked :: VkSubpassDependency))
+                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkSubpassDependency))
+                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkSubpassDependency))
+                *> poke (ptr `plusPtr` 24) (vkDependencyFlags (poked :: VkSubpassDependency))
+-- | VkRenderPassCreateInfo - Structure specifying parameters of a newly
+-- created render pass
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If any two subpasses operate on attachments with overlapping ranges
+--     of the same @VkDeviceMemory@ object, and at least one subpass writes
+--     to that area of @VkDeviceMemory@, a subpass dependency /must/ be
+--     included (either directly or via some intermediate subpasses)
+--     between them
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@,
+--     @pColorAttachments@, @pResolveAttachments@ or
+--     @pDepthStencilAttachment@, or the attachment indexed by any element
+--     of @pPreserveAttachments@ in any element of @pSubpasses@ is bound to
+--     a range of a @VkDeviceMemory@ object that overlaps with any other
+--     attachment in any subpass (including the same subpass), the
+--     @VkAttachmentDescription@ structures describing them /must/ include
+--     @VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT@ in @flags@
+--
+-- -   If the @attachment@ member of any element of @pInputAttachments@,
+--     @pColorAttachments@, @pResolveAttachments@ or
+--     @pDepthStencilAttachment@, or any element of @pPreserveAttachments@
+--     in any element of @pSubpasses@ is not @VK_ATTACHMENT_UNUSED@, it
+--     /must/ be less than @attachmentCount@
+--
+-- -   The value of each element of the @pPreserveAttachments@ member in
+--     each element of @pSubpasses@ /must/ not be @VK_ATTACHMENT_UNUSED@
+--
+-- -   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_SHADER_READ_ONLY_OPTIMAL@ or
+--     @VK_IMAGE_LAYOUT_DEPTH_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>
+--     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>
+--     identified by the @pipelineBindPoint@ member of the source subpass.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkRenderPassInputAttachmentAspectCreateInfo'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview.VkRenderPassMultiviewCreateInfo'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid
+--     @VkAttachmentDescription@ structures
+--
+-- -   @pSubpasses@ /must/ be a valid pointer to an array of @subpassCount@
+--     valid @VkSubpassDescription@ structures
+--
+-- -   If @dependencyCount@ is not @0@, @pDependencies@ /must/ be a valid
+--     pointer to an array of @dependencyCount@ valid @VkSubpassDependency@
+--     structures
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkFlags"
+  vkFlags :: VkRenderPassCreateFlags
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkAttachmentCount"
+  vkAttachmentCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPAttachments"
+  vkPAttachments :: Ptr VkAttachmentDescription
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkSubpassCount"
+  vkSubpassCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPSubpasses"
+  vkPSubpasses :: Ptr VkSubpassDescription
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkDependencyCount"
+  vkDependencyCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassCreateInfo" "vkPDependencies"
+  vkPDependencies :: Ptr VkSubpassDependency
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRenderPassCreateInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkRenderPassCreateInfo <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkAttachmentCount (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPAttachments (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkSubpassCount (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPSubpasses (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkDependencyCount (poked :: VkRenderPassCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkPDependencies (poked :: VkRenderPassCreateInfo))
+-- | VkFramebufferCreateInfo - Structure specifying parameters of a newly
+-- 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.
+--
+-- __Note__
+--
+-- This restriction means 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.
+--
+-- It is legal for a subpass to use no color or depth\/stencil attachments,
+-- and rather use shader side effects such as image stores and atomics to
+-- produce an output. In this case, the subpass continues to use the
+-- @width@, @height@, and @layers@ of the framebuffer to define the
+-- dimensions of the rendering area, and the @rasterizationSamples@ from
+-- each pipeline’s
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo'
+-- to define the number of samples used in rasterization; however, if
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceFeatures'::@variableMultisampleRate@
+-- is @VK_FALSE@, then all pipelines to be bound with a given
+-- zero-attachment subpass /must/ have the same value for
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo'::@rasterizationSamples@.
+--
+-- == Valid Usage
+--
+-- -   @attachmentCount@ /must/ be equal to the attachment count specified
+--     in @renderPass@
+--
+-- -   Each element of @pAttachments@ that is used as a color attachment or
+--     resolve attachment by @renderPass@ /must/ have been created with a
+--     @usage@ value including @VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT@
+--
+-- -   Each element of @pAttachments@ that is used as a depth\/stencil
+--     attachment by @renderPass@ /must/ have been created with a @usage@
+--     value including @VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT@
+--
+-- -   Each element of @pAttachments@ that is used as an input attachment
+--     by @renderPass@ /must/ have been created with a @usage@ value
+--     including @VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT@
+--
+-- -   Each element of @pAttachments@ /must/ have been created with an
+--     'Graphics.Vulkan.Core10.Core.VkFormat' value that matches the
+--     'Graphics.Vulkan.Core10.Core.VkFormat' specified by the
+--     corresponding @VkAttachmentDescription@ in @renderPass@
+--
+-- -   Each element of @pAttachments@ /must/ have been created with a
+--     @samples@ value that matches the @samples@ value specified by the
+--     corresponding @VkAttachmentDescription@ in @renderPass@
+--
+-- -   Each element of @pAttachments@ /must/ have dimensions at least as
+--     large as the corresponding framebuffer dimension
+--
+-- -   Each element of @pAttachments@ /must/ only specify a single mip
+--     level
+--
+-- -   Each element of @pAttachments@ /must/ have been created with the
+--     identity swizzle
+--
+-- -   @width@ /must/ be greater than @0@.
+--
+-- -   @width@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxFramebufferWidth@
+--
+-- -   @height@ /must/ be greater than @0@.
+--
+-- -   @height@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxFramebufferHeight@
+--
+-- -   @layers@ /must/ be greater than @0@.
+--
+-- -   @layers@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxFramebufferLayers@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @renderPass@ /must/ be a valid @VkRenderPass@ handle
+--
+-- -   If @attachmentCount@ is not @0@, @pAttachments@ /must/ be a valid
+--     pointer to an array of @attachmentCount@ valid @VkImageView@ handles
+--
+-- -   Both of @renderPass@, and the elements of @pAttachments@ that are
+--     valid handles /must/ have been created, allocated, or retrieved from
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkFlags"
+  vkFlags :: VkFramebufferCreateFlags
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkRenderPass"
+  vkRenderPass :: VkRenderPass
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkAttachmentCount"
+  vkAttachmentCount :: Word32
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkPAttachments"
+  vkPAttachments :: Ptr VkImageView
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkWidth"
+  vkWidth :: Word32
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkHeight"
+  vkHeight :: Word32
+  , -- No documentation found for Nested "VkFramebufferCreateInfo" "vkLayers"
+  vkLayers :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkFramebufferCreateInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkFramebufferCreateInfo <$> 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` 52)
+                                     <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkRenderPass (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkAttachmentCount (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPAttachments (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkWidth (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 52) (vkHeight (poked :: VkFramebufferCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkLayers (poked :: VkFramebufferCreateInfo))
+-- | 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',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageMemoryBarrier',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkMemoryBarrier',
+-- 'VkSubpassDependency'
+type VkAccessFlags = VkAccessFlagBits
+-- | 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
+-- | VkAttachmentDescriptionFlags - Bitmask of
+-- 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'
+type VkDependencyFlags = VkDependencyFlagBits
diff --git a/src/Graphics/Vulkan/Core10/Pipeline.hs b/src/Graphics/Vulkan/Core10/Pipeline.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Pipeline.hs
@@ -0,0 +1,4194 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Pipeline
+  ( VkBlendFactor(..)
+  , pattern VK_BLEND_FACTOR_ZERO
+  , pattern VK_BLEND_FACTOR_ONE
+  , pattern VK_BLEND_FACTOR_SRC_COLOR
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR
+  , pattern VK_BLEND_FACTOR_DST_COLOR
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR
+  , pattern VK_BLEND_FACTOR_SRC_ALPHA
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA
+  , pattern VK_BLEND_FACTOR_DST_ALPHA
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA
+  , pattern VK_BLEND_FACTOR_CONSTANT_COLOR
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR
+  , pattern VK_BLEND_FACTOR_CONSTANT_ALPHA
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA
+  , pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE
+  , pattern VK_BLEND_FACTOR_SRC1_COLOR
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR
+  , pattern VK_BLEND_FACTOR_SRC1_ALPHA
+  , pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA
+  , VkBlendOp(..)
+  , pattern VK_BLEND_OP_ADD
+  , pattern VK_BLEND_OP_SUBTRACT
+  , pattern VK_BLEND_OP_REVERSE_SUBTRACT
+  , pattern VK_BLEND_OP_MIN
+  , pattern VK_BLEND_OP_MAX
+  , VkCompareOp(..)
+  , pattern VK_COMPARE_OP_NEVER
+  , pattern VK_COMPARE_OP_LESS
+  , pattern VK_COMPARE_OP_EQUAL
+  , pattern VK_COMPARE_OP_LESS_OR_EQUAL
+  , pattern VK_COMPARE_OP_GREATER
+  , pattern VK_COMPARE_OP_NOT_EQUAL
+  , pattern VK_COMPARE_OP_GREATER_OR_EQUAL
+  , pattern VK_COMPARE_OP_ALWAYS
+  , VkDynamicState(..)
+  , pattern VK_DYNAMIC_STATE_VIEWPORT
+  , pattern VK_DYNAMIC_STATE_SCISSOR
+  , pattern VK_DYNAMIC_STATE_LINE_WIDTH
+  , pattern VK_DYNAMIC_STATE_DEPTH_BIAS
+  , pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS
+  , pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS
+  , pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK
+  , pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK
+  , pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE
+  , VkPolygonMode(..)
+  , pattern VK_POLYGON_MODE_FILL
+  , pattern VK_POLYGON_MODE_LINE
+  , pattern VK_POLYGON_MODE_POINT
+  , VkFrontFace(..)
+  , pattern VK_FRONT_FACE_COUNTER_CLOCKWISE
+  , pattern VK_FRONT_FACE_CLOCKWISE
+  , VkLogicOp(..)
+  , pattern VK_LOGIC_OP_CLEAR
+  , pattern VK_LOGIC_OP_AND
+  , pattern VK_LOGIC_OP_AND_REVERSE
+  , pattern VK_LOGIC_OP_COPY
+  , pattern VK_LOGIC_OP_AND_INVERTED
+  , pattern VK_LOGIC_OP_NO_OP
+  , pattern VK_LOGIC_OP_XOR
+  , pattern VK_LOGIC_OP_OR
+  , pattern VK_LOGIC_OP_NOR
+  , pattern VK_LOGIC_OP_EQUIVALENT
+  , pattern VK_LOGIC_OP_INVERT
+  , pattern VK_LOGIC_OP_OR_REVERSE
+  , pattern VK_LOGIC_OP_COPY_INVERTED
+  , pattern VK_LOGIC_OP_OR_INVERTED
+  , pattern VK_LOGIC_OP_NAND
+  , pattern VK_LOGIC_OP_SET
+  , VkPrimitiveTopology(..)
+  , pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST
+  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST
+  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP
+  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST
+  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP
+  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN
+  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY
+  , pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY
+  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY
+  , pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY
+  , pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST
+  , VkStencilOp(..)
+  , pattern VK_STENCIL_OP_KEEP
+  , pattern VK_STENCIL_OP_ZERO
+  , pattern VK_STENCIL_OP_REPLACE
+  , pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP
+  , pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP
+  , pattern VK_STENCIL_OP_INVERT
+  , pattern VK_STENCIL_OP_INCREMENT_AND_WRAP
+  , pattern VK_STENCIL_OP_DECREMENT_AND_WRAP
+  , VkVertexInputRate(..)
+  , pattern VK_VERTEX_INPUT_RATE_VERTEX
+  , pattern VK_VERTEX_INPUT_RATE_INSTANCE
+  , VkPipelineDepthStencilStateCreateFlags(..)
+  , VkPipelineDynamicStateCreateFlags(..)
+  , VkPipelineColorBlendStateCreateFlags(..)
+  , VkPipelineMultisampleStateCreateFlags(..)
+  , VkPipelineRasterizationStateCreateFlags(..)
+  , VkPipelineViewportStateCreateFlags(..)
+  , VkPipelineTessellationStateCreateFlags(..)
+  , VkPipelineInputAssemblyStateCreateFlags(..)
+  , VkPipelineVertexInputStateCreateFlags(..)
+  , VkPipelineShaderStageCreateFlags(..)
+  , VkShaderStageFlagBits(..)
+  , pattern VK_SHADER_STAGE_VERTEX_BIT
+  , pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT
+  , pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT
+  , pattern VK_SHADER_STAGE_GEOMETRY_BIT
+  , pattern VK_SHADER_STAGE_FRAGMENT_BIT
+  , pattern VK_SHADER_STAGE_COMPUTE_BIT
+  , pattern VK_SHADER_STAGE_ALL_GRAPHICS
+  , pattern VK_SHADER_STAGE_ALL
+  , VkPipelineCreateFlagBits(..)
+  , pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT
+  , pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT
+  , pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT
+  , VkColorComponentFlagBits(..)
+  , pattern VK_COLOR_COMPONENT_R_BIT
+  , pattern VK_COLOR_COMPONENT_G_BIT
+  , pattern VK_COLOR_COMPONENT_B_BIT
+  , pattern VK_COLOR_COMPONENT_A_BIT
+  , VkCullModeFlagBits(..)
+  , pattern VK_CULL_MODE_FRONT_BIT
+  , pattern VK_CULL_MODE_BACK_BIT
+  , pattern VK_CULL_MODE_NONE
+  , pattern VK_CULL_MODE_FRONT_AND_BACK
+  , VkPipeline
+  , VkPipelineLayout
+  , VkRenderPass
+  , vkCreateGraphicsPipelines
+  , vkCreateComputePipelines
+  , vkDestroyPipeline
+  , VkOffset2D(..)
+  , VkExtent2D(..)
+  , VkViewport(..)
+  , VkRect2D(..)
+  , VkSpecializationMapEntry(..)
+  , VkSpecializationInfo(..)
+  , VkPipelineShaderStageCreateInfo(..)
+  , VkComputePipelineCreateInfo(..)
+  , VkVertexInputBindingDescription(..)
+  , VkVertexInputAttributeDescription(..)
+  , VkPipelineVertexInputStateCreateInfo(..)
+  , VkPipelineInputAssemblyStateCreateInfo(..)
+  , VkPipelineTessellationStateCreateInfo(..)
+  , VkPipelineViewportStateCreateInfo(..)
+  , VkPipelineRasterizationStateCreateInfo(..)
+  , VkPipelineMultisampleStateCreateInfo(..)
+  , VkPipelineColorBlendAttachmentState(..)
+  , VkPipelineColorBlendStateCreateInfo(..)
+  , VkPipelineDynamicStateCreateInfo(..)
+  , VkStencilOpState(..)
+  , VkPipelineDepthStencilStateCreateInfo(..)
+  , VkGraphicsPipelineCreateInfo(..)
+  , VkPipelineCreateFlags
+  , VkColorComponentFlags
+  , VkCullModeFlags
+  , VkSampleMask
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  , CChar(..)
+  , CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkFormat(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkSampleCountFlagBits(..)
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.PipelineCache
+  ( VkPipelineCache
+  )
+import Graphics.Vulkan.Core10.Shader
+  ( VkShaderModule
+  )
+
+
+-- ** VkBlendFactor
+
+-- | 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#
+--
+-- 'VkPipelineMultisampleStateCreateInfo'
+type VkSampleMask = Word32
diff --git a/src/Graphics/Vulkan/Core10/PipelineCache.hs b/src/Graphics/Vulkan/Core10/PipelineCache.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/PipelineCache.hs
@@ -0,0 +1,487 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.PipelineCache
+  ( VkPipelineCacheCreateFlags(..)
+  , VkPipelineCache
+  , vkCreatePipelineCache
+  , vkDestroyPipelineCache
+  , vkGetPipelineCacheData
+  , vkMergePipelineCaches
+  , VkPipelineCacheCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+
+
+-- ** VkPipelineCacheCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineCacheCreateFlags where
+  
+  showsPrec p (VkPipelineCacheCreateFlags x) = showParen (p >= 11) (showString "VkPipelineCacheCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineCacheCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineCacheCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineCacheCreateFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'vkCreatePipelineCache', 'vkDestroyPipelineCache',
+-- 'vkGetPipelineCacheData', 'vkMergePipelineCaches'
+type VkPipelineCache = Ptr VkPipelineCache_T
+-- | vkCreatePipelineCache - Creates a new pipeline cache
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the pipeline cache
+--     object.
+--
+-- -   @pCreateInfo@ is a pointer to a @VkPipelineCacheCreateInfo@
+--     structure that contains the initial parameters for the pipeline
+--     cache object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--
+-- -   @pPipelineCache@ is a pointer to a @VkPipelineCache@ handle in which
+--     the resulting pipeline cache object is returned.
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- Applications /can/ track and manage the total host memory size of a
+-- pipeline cache object using the @pAllocator@. Applications /can/ limit
+-- the amount of data retrieved from a pipeline cache object in
+-- @vkGetPipelineCacheData@. Implementations /should/ not internally limit
+-- the total number of entries added to a pipeline cache object or the
+-- total host memory consumed.
+--
+-- Once created, a pipeline cache /can/ be passed to the
+-- @vkCreateGraphicsPipelines@ and @vkCreateComputePipelines@ commands. If
+-- the pipeline cache passed into these commands is not
+-- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', the implementation
+-- will query it for possible reuse opportunities and update it with new
+-- content. The use of the pipeline cache object in these commands is
+-- internally synchronized, and the same pipeline cache object /can/ be
+-- used in multiple threads simultaneously.
+--
+-- __Note__
+--
+-- Implementations /should/ make every effort to limit any critical
+-- sections to the actual accesses to the cache, which is expected to be
+-- significantly shorter than the duration of the
+-- @vkCreateGraphicsPipelines@ and @vkCreateComputePipelines@ commands.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkPipelineCacheCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pPipelineCache@ /must/ be a valid pointer to a @VkPipelineCache@
+--     handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkPipelineCache', 'VkPipelineCacheCreateInfo'
+foreign import ccall "vkCreatePipelineCache" vkCreatePipelineCache :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkPipelineCacheCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelineCache" ::: Ptr VkPipelineCache) -> IO VkResult
+-- | vkDestroyPipelineCache - Destroy a pipeline cache object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that destroys the pipeline cache
+--     object.
+--
+-- -   @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#
+--
+-- == Valid Usage
+--
+-- -   If @VkAllocationCallbacks@ were provided when @pipelineCache@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @pipelineCache@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == 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
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @pipelineCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pipelineCache@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkPipelineCache'
+foreign import ccall "vkDestroyPipelineCache" vkDestroyPipelineCache :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkGetPipelineCacheData - Get the data store from a pipeline cache
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the pipeline cache.
+--
+-- -   @pipelineCache@ is the pipeline cache to retrieve data from.
+--
+-- -   @pDataSize@ is a pointer to a value related to the amount of data in
+--     the pipeline cache, as described below.
+--
+-- -   @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@.
+-- Otherwise, @pDataSize@ /must/ point to a variable set by the user to the
+-- size of the buffer, in bytes, pointed to by @pData@, and on return the
+-- variable is overwritten with the amount of data actually written to
+-- @pData@.
+--
+-- If @pDataSize@ is less than the maximum size that /can/ be retrieved by
+-- the pipeline cache, at most @pDataSize@ bytes will be written to
+-- @pData@, and @vkGetPipelineCacheData@ will return @VK_INCOMPLETE@. Any
+-- data written to @pData@ is valid and /can/ be provided as the
+-- @pInitialData@ member of the @VkPipelineCacheCreateInfo@ structure
+-- passed to @vkCreatePipelineCache@.
+--
+-- Two calls to @vkGetPipelineCacheData@ with the same parameters /must/
+-- retrieve the same data unless a command that modifies the contents of
+-- the cache is called between them.
+--
+-- Applications /can/ store the data retrieved from the pipeline cache, and
+-- use these data, possibly in a future run of the application, to populate
+-- new pipeline cache objects. The results of pipeline compiles, however,
+-- /may/ depend on the vendor ID, device ID, driver version, and other
+-- details of the device. To enable applications to detect when previously
+-- retrieved data is incompatible with the device, the initial 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 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@
+--
+-- 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.
+--
+-- The next four bytes encode the pipeline cache version, as described for
+-- 'Graphics.Vulkan.Core10.Constants.VkPipelineCacheHeaderVersion'. A
+-- consumer of the pipeline cache /should/ use the cache version to
+-- interpret the remainder of the cache header.
+--
+-- If @pDataSize@ is less than what is necessary to store this header,
+-- nothing will be written to @pData@ and zero will be written to
+-- @pDataSize@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pipelineCache@ /must/ be a valid @VkPipelineCache@ handle
+--
+-- -   @pDataSize@ /must/ be a valid pointer to a @size_t@ value
+--
+-- -   If the value referenced by @pDataSize@ is not @0@, and @pData@ is
+--     not @NULL@, @pData@ /must/ be a valid pointer to an array of
+--     @pDataSize@ bytes
+--
+-- -   @pipelineCache@ /must/ have been created, allocated, or retrieved
+--     from @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkPipelineCache'
+foreign import ccall "vkGetPipelineCacheData" vkGetPipelineCacheData :: ("device" ::: VkDevice) -> ("pipelineCache" ::: VkPipelineCache) -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO VkResult
+-- | vkMergePipelineCaches - Combine the data stores of pipeline caches
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the pipeline cache objects.
+--
+-- -   @dstCache@ is the handle of the pipeline cache to merge results
+--     into.
+--
+-- -   @srcCacheCount@ is the length of the @pSrcCaches@ array.
+--
+-- -   @pSrcCaches@ is an array of pipeline cache handles, which will be
+--     merged into @dstCache@. The previous contents of @dstCache@ are
+--     included after the merge.
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- The details of the merge operation are implementation dependent, but
+-- implementations /should/ merge the contents of the specified pipelines
+-- and prune duplicate entries.
+--
+-- == Valid Usage
+--
+-- -   @dstCache@ /must/ not appear in the list of source caches
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @dstCache@ /must/ be a valid @VkPipelineCache@ handle
+--
+-- -   @pSrcCaches@ /must/ be a valid pointer to an array of
+--     @srcCacheCount@ valid @VkPipelineCache@ handles
+--
+-- -   @srcCacheCount@ /must/ be greater than @0@
+--
+-- -   @dstCache@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- -   Each element of @pSrcCaches@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @dstCache@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkPipelineCache'
+foreign import ccall "vkMergePipelineCaches" vkMergePipelineCaches :: ("device" ::: VkDevice) -> ("dstCache" ::: VkPipelineCache) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr VkPipelineCache) -> IO VkResult
+-- | 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
+--     @pInitialData@, as returned by @vkGetPipelineCacheData@ when
+--     @pInitialData@ was originally retrieved
+--
+-- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been
+--     retrieved from a previous call to @vkGetPipelineCacheData@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkFlags"
+  vkFlags :: VkPipelineCacheCreateFlags
+  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkInitialDataSize"
+  vkInitialDataSize :: CSize
+  , -- No documentation found for Nested "VkPipelineCacheCreateInfo" "vkPInitialData"
+  vkPInitialData :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineCacheCreateInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkPipelineCacheCreateInfo <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 8)
+                                       <*> peek (ptr `plusPtr` 16)
+                                       <*> peek (ptr `plusPtr` 24)
+                                       <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineCacheCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineCacheCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineCacheCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkInitialDataSize (poked :: VkPipelineCacheCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPInitialData (poked :: VkPipelineCacheCreateInfo))
diff --git a/src/Graphics/Vulkan/Core10/PipelineLayout.hs b/src/Graphics/Vulkan/Core10/PipelineLayout.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/PipelineLayout.hs
@@ -0,0 +1,478 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.PipelineLayout
+  ( VkPipelineLayoutCreateFlags(..)
+  , VkDescriptorSetLayout
+  , vkCreatePipelineLayout
+  , vkDestroyPipelineLayout
+  , VkPushConstantRange(..)
+  , VkPipelineLayoutCreateInfo(..)
+  , VkShaderStageFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkShaderStageFlagBits(..)
+  , VkPipelineLayout
+  )
+
+
+-- ** VkPipelineLayoutCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineLayoutCreateFlags where
+  
+  showsPrec p (VkPipelineLayoutCreateFlags x) = showParen (p >= 11) (showString "VkPipelineLayoutCreateFlags " . showsPrec 11 x)
+
+instance Read VkPipelineLayoutCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineLayoutCreateFlags")
+                        v <- step readPrec
+                        pure (VkPipelineLayoutCreateFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'VkPipelineLayoutCreateInfo',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkCreateDescriptorSetLayout',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.vkDestroyDescriptorSetLayout'
+type VkDescriptorSetLayout = Ptr VkDescriptorSetLayout_T
+-- | vkCreatePipelineLayout - Creates a new pipeline layout object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the pipeline layout.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkPipelineLayoutCreateInfo' structure specifying the state of the
+--     pipeline layout object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkPipelineLayoutCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pPipelineLayout@ /must/ be a valid pointer to a @VkPipelineLayout@
+--     handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout',
+-- 'VkPipelineLayoutCreateInfo'
+foreign import ccall "vkCreatePipelineLayout" vkCreatePipelineLayout :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkPipelineLayoutCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pPipelineLayout" ::: Ptr VkPipelineLayout) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   If @VkAllocationCallbacks@ were provided when @pipelineLayout@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @pipelineLayout@
+--     was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @pipelineLayout@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @pipelineLayout@
+--     /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @pipelineLayout@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pipelineLayout@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'
+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
+--     @VkPhysicalDeviceLimits@::@maxPushConstantsSize@
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @size@ /must/ be greater than @0@
+--
+-- -   @size@ /must/ be a multiple of @4@
+--
+-- -   @size@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxPushConstantsSize@ minus @offset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @stageFlags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' values
+--
+-- -   @stageFlags@ /must/ not be @0@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineLayoutCreateInfo', 'VkShaderStageFlags'
+data VkPushConstantRange = VkPushConstantRange
+  { -- No documentation found for Nested "VkPushConstantRange" "vkStageFlags"
+  vkStageFlags :: VkShaderStageFlags
+  , -- No documentation found for Nested "VkPushConstantRange" "vkOffset"
+  vkOffset :: Word32
+  , -- No documentation found for Nested "VkPushConstantRange" "vkSize"
+  vkSize :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPushConstantRange where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkPushConstantRange <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 4)
+                                 <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkStageFlags (poked :: VkPushConstantRange))
+                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkPushConstantRange))
+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkPushConstantRange))
+-- | VkPipelineLayoutCreateInfo - Structure specifying the parameters of a
+-- newly created pipeline layout object
+--
+-- = Members
+-- #_members#
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @flags@ is reserved for future use.
+--
+-- -   @setLayoutCount@ is the number of descriptor sets included in the
+--     pipeline layout.
+--
+-- -   @pSetLayouts@ is a pointer to an array of @VkDescriptorSetLayout@
+--     objects.
+--
+-- -   @pushConstantRangeCount@ is the number of push constant ranges
+--     included in the pipeline layout.
+--
+-- -   @pPushConstantRanges@ is a pointer to an array of
+--     @VkPushConstantRange@ structures defining a set of push constant
+--     ranges for use in a single pipeline layout. In addition to
+--     descriptor set layouts, a pipeline layout also describes how many
+--     push constants /can/ be accessed by each stage of the pipeline.
+--
+--     __Note__
+--
+--     Push constants represent a high speed path to modify constant data
+--     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 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
+--     @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
+--     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorStorageBuffers@
+--
+-- -   The total number of descriptors of the type
+--     @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
+--     @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
+--     @VkPhysicalDeviceLimits@::@maxPerStageDescriptorStorageImages@
+--
+-- -   The total number of descriptors of the type
+--     @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 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@
+--
+-- -   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@
+--
+-- -   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@
+--
+-- -   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@
+--
+-- -   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@
+--
+-- -   The total number of descriptors of the type
+--     @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 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@
+--
+-- -   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@
+--
+-- -   Any two elements of @pPushConstantRanges@ /must/ not include the
+--     same stage in @stageFlags@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @setLayoutCount@ is not @0@, @pSetLayouts@ /must/ be a valid
+--     pointer to an array of @setLayoutCount@ valid
+--     @VkDescriptorSetLayout@ handles
+--
+-- -   If @pushConstantRangeCount@ is not @0@, @pPushConstantRanges@ /must/
+--     be a valid pointer to an array of @pushConstantRangeCount@ valid
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkFlags"
+  vkFlags :: VkPipelineLayoutCreateFlags
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkSetLayoutCount"
+  vkSetLayoutCount :: Word32
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPSetLayouts"
+  vkPSetLayouts :: Ptr VkDescriptorSetLayout
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPushConstantRangeCount"
+  vkPushConstantRangeCount :: Word32
+  , -- No documentation found for Nested "VkPipelineLayoutCreateInfo" "vkPPushConstantRanges"
+  vkPPushConstantRanges :: Ptr VkPushConstantRange
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineLayoutCreateInfo where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkPipelineLayoutCreateInfo <$> 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 :: VkPipelineLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkSetLayoutCount (poked :: VkPipelineLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPSetLayouts (poked :: VkPipelineLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPushConstantRangeCount (poked :: VkPipelineLayoutCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPPushConstantRanges (poked :: VkPipelineLayoutCreateInfo))
+-- | 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',
+-- 'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup.VkPhysicalDeviceSubgroupProperties',
+-- 'VkPushConstantRange',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_shader_info.VkShaderStatisticsInfoAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPushConstants'
+type VkShaderStageFlags = VkShaderStageFlagBits
diff --git a/src/Graphics/Vulkan/Core10/Query.hs b/src/Graphics/Vulkan/Core10/Query.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Query.hs
@@ -0,0 +1,797 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Query
+  ( VkQueryType(..)
+  , pattern VK_QUERY_TYPE_OCCLUSION
+  , pattern VK_QUERY_TYPE_PIPELINE_STATISTICS
+  , pattern VK_QUERY_TYPE_TIMESTAMP
+  , VkQueryPoolCreateFlags(..)
+  , VkQueryResultFlagBits(..)
+  , pattern VK_QUERY_RESULT_64_BIT
+  , pattern VK_QUERY_RESULT_WAIT_BIT
+  , pattern VK_QUERY_RESULT_WITH_AVAILABILITY_BIT
+  , pattern VK_QUERY_RESULT_PARTIAL_BIT
+  , VkQueryPipelineStatisticFlagBits(..)
+  , pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT
+  , pattern VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT
+  , VkQueryPool
+  , vkCreateQueryPool
+  , vkDestroyQueryPool
+  , vkGetQueryPoolResults
+  , VkQueryPoolCreateInfo(..)
+  , VkQueryResultFlags
+  , VkQueryPipelineStatisticFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+
+
+-- ** VkQueryType
+
+-- | VkQueryType - Specify the type of queries managed by a query pool
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkQueryPoolCreateInfo'
+newtype VkQueryType = VkQueryType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkQueryType where
+  showsPrec _ VK_QUERY_TYPE_OCCLUSION = showString "VK_QUERY_TYPE_OCCLUSION"
+  showsPrec _ VK_QUERY_TYPE_PIPELINE_STATISTICS = showString "VK_QUERY_TYPE_PIPELINE_STATISTICS"
+  showsPrec _ VK_QUERY_TYPE_TIMESTAMP = showString "VK_QUERY_TYPE_TIMESTAMP"
+  showsPrec p (VkQueryType x) = showParen (p >= 11) (showString "VkQueryType " . showsPrec 11 x)
+
+instance Read VkQueryType where
+  readPrec = parens ( choose [ ("VK_QUERY_TYPE_OCCLUSION",           pure VK_QUERY_TYPE_OCCLUSION)
+                             , ("VK_QUERY_TYPE_PIPELINE_STATISTICS", pure VK_QUERY_TYPE_PIPELINE_STATISTICS)
+                             , ("VK_QUERY_TYPE_TIMESTAMP",           pure VK_QUERY_TYPE_TIMESTAMP)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkQueryType")
+                        v <- step readPrec
+                        pure (VkQueryType v)
+                        )
+                    )
+
+-- | @VK_QUERY_TYPE_OCCLUSION@ specifies an
+-- <{html_spec_relative}#queries-occlusion occlusion query>.
+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>.
+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>.
+pattern VK_QUERY_TYPE_TIMESTAMP :: VkQueryType
+pattern VK_QUERY_TYPE_TIMESTAMP = VkQueryType 2
+-- ** VkQueryPoolCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkQueryPoolCreateFlags where
+  
+  showsPrec p (VkQueryPoolCreateFlags x) = showParen (p >= 11) (showString "VkQueryPoolCreateFlags " . showsPrec 11 x)
+
+instance Read VkQueryPoolCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkQueryPoolCreateFlags")
+                        v <- step readPrec
+                        pure (VkQueryPoolCreateFlags v)
+                        )
+                    )
+
+
+-- ** VkQueryResultFlagBits
+
+-- | VkQueryResultFlagBits - Bitmask specifying how and when query results
+-- are returned
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkQueryResultFlags'
+newtype VkQueryResultFlagBits = VkQueryResultFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkQueryResultFlagBits where
+  showsPrec _ VK_QUERY_RESULT_64_BIT = showString "VK_QUERY_RESULT_64_BIT"
+  showsPrec _ VK_QUERY_RESULT_WAIT_BIT = showString "VK_QUERY_RESULT_WAIT_BIT"
+  showsPrec _ VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = showString "VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"
+  showsPrec _ VK_QUERY_RESULT_PARTIAL_BIT = showString "VK_QUERY_RESULT_PARTIAL_BIT"
+  showsPrec p (VkQueryResultFlagBits x) = showParen (p >= 11) (showString "VkQueryResultFlagBits " . showsPrec 11 x)
+
+instance Read VkQueryResultFlagBits where
+  readPrec = parens ( choose [ ("VK_QUERY_RESULT_64_BIT",                pure VK_QUERY_RESULT_64_BIT)
+                             , ("VK_QUERY_RESULT_WAIT_BIT",              pure VK_QUERY_RESULT_WAIT_BIT)
+                             , ("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT", pure VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
+                             , ("VK_QUERY_RESULT_PARTIAL_BIT",           pure VK_QUERY_RESULT_PARTIAL_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkQueryResultFlagBits")
+                        v <- step readPrec
+                        pure (VkQueryResultFlagBits v)
+                        )
+                    )
+
+-- | @VK_QUERY_RESULT_64_BIT@ specifies the results will be written as an
+-- array of 64-bit unsigned integer values. If this bit is not set, the
+-- results will be written as an array of 32-bit unsigned integer values.
+pattern VK_QUERY_RESULT_64_BIT :: VkQueryResultFlagBits
+pattern VK_QUERY_RESULT_64_BIT = VkQueryResultFlagBits 0x00000001
+
+-- | @VK_QUERY_RESULT_WAIT_BIT@ specifies that Vulkan will wait for each
+-- query’s status to become available before retrieving its results.
+pattern VK_QUERY_RESULT_WAIT_BIT :: VkQueryResultFlagBits
+pattern VK_QUERY_RESULT_WAIT_BIT = VkQueryResultFlagBits 0x00000002
+
+-- | @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@ specifies that the availability
+-- status accompanies the results.
+pattern VK_QUERY_RESULT_WITH_AVAILABILITY_BIT :: VkQueryResultFlagBits
+pattern VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = VkQueryResultFlagBits 0x00000004
+
+-- | @VK_QUERY_RESULT_PARTIAL_BIT@ specifies that returning partial results
+-- is acceptable.
+pattern VK_QUERY_RESULT_PARTIAL_BIT :: VkQueryResultFlagBits
+pattern VK_QUERY_RESULT_PARTIAL_BIT = VkQueryResultFlagBits 0x00000008
+-- ** VkQueryPipelineStatisticFlagBits
+
+-- | VkQueryPipelineStatisticFlagBits - Bitmask specifying queried pipeline
+-- 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>
+--     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.
+--
+-- -   @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>.
+--
+-- -   @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>,
+--     the geometry shader invocations count is incremented for each
+--     separate instanced invocation.
+--
+-- -   @VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT@
+--     specifies that queries managed by the pool will count the number of
+--     primitives generated by geometry shader invocations. The counter’s
+--     value is incremented each time the geometry shader emits a
+--     primitive. Restarting primitive topology using the SPIR-V
+--     instructions @OpEndPrimitive@ or @OpEndStreamPrimitive@ has no
+--     effect on the geometry shader output primitives count.
+--
+-- -   @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>
+--     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>
+--     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
+--     particular input primitive is implementation-dependent but /must/
+--     satisfy the following conditions:
+--
+--     -   If at least one vertex of the input primitive lies inside the
+--         clipping volume, the counter is incremented by one or more.
+--
+--     -   Otherwise, the counter is incremented by zero or more.
+--
+-- -   @VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT@
+--     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>.
+--
+-- -   @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>.
+--
+-- -   @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>.
+--
+-- -   @VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT@
+--     specifies that queries managed by the pool will count the number of
+--     compute shader invocations. The counter’s value is incremented every
+--     time the compute shader is invoked. Implementations /may/ skip the
+--     execution of certain compute shader invocations or execute
+--     additional compute shader invocations for implementation-dependent
+--     reasons as long as the results of rendering otherwise remain
+--     unchanged.
+--
+-- 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>.
+--
+-- __Note__
+--
+-- For example, tile-based rendering devices /may/ need to replay the scene
+-- multiple times, affecting some of the counts.
+--
+-- If a pipeline has @rasterizerDiscardEnable@ enabled, implementations
+-- /may/ discard primitives after the final vertex processing stage. As a
+-- result, if @rasterizerDiscardEnable@ is enabled, the clipping input and
+-- output primitives counters /may/ not be incremented.
+--
+-- When a pipeline statistics query finishes, the result for that query is
+-- marked as available. The application /can/ copy the result to a buffer
+-- (via @vkCmdCopyQueryPoolResults@), or request it be put into host memory
+-- (via @vkGetQueryPoolResults@).
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkQueryPipelineStatisticFlags'
+newtype VkQueryPipelineStatisticFlagBits = VkQueryPipelineStatisticFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkQueryPipelineStatisticFlagBits where
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"
+  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"
+  showsPrec p (VkQueryPipelineStatisticFlagBits x) = showParen (p >= 11) (showString "VkQueryPipelineStatisticFlagBits " . showsPrec 11 x)
+
+instance Read VkQueryPipelineStatisticFlagBits where
+  readPrec = parens ( choose [ ("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT",                    pure VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT",                  pure VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT",                  pure VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT",                pure VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT",                 pure VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT",                       pure VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT",                        pure VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT",                pure VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT",        pure VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", pure VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
+                             , ("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT",                 pure VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkQueryPipelineStatisticFlagBits")
+                        v <- step readPrec
+                        pure (VkQueryPipelineStatisticFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = VkQueryPipelineStatisticFlagBits 0x00000001
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x00000002
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x00000004
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x00000008
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x00000010
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x00000020
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x00000040
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x00000080
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = VkQueryPipelineStatisticFlagBits 0x00000100
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x00000200
+
+-- No documentation found for Nested "VkQueryPipelineStatisticFlagBits" "VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"
+pattern VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT :: VkQueryPipelineStatisticFlagBits
+pattern VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x00000400
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdEndQuery',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResetQueryPool',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdWriteTimestamp',
+-- 'vkCreateQueryPool', 'vkDestroyQueryPool', 'vkGetQueryPoolResults'
+type VkQueryPool = Ptr VkQueryPool_T
+-- | vkCreateQueryPool - Create a new query pool object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the query pool.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkQueryPoolCreateInfo@ structure containing the number and type of
+--     queries to be managed by the pool.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkQueryPoolCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pQueryPool@ /must/ be a valid pointer to a @VkQueryPool@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkQueryPoolCreateInfo'
+foreign import ccall "vkCreateQueryPool" vkCreateQueryPool :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkQueryPoolCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pQueryPool" ::: Ptr VkQueryPool) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @queryPool@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @queryPool@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @queryPool@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @queryPool@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @queryPool@
+--     /must/ be a valid @VkQueryPool@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @queryPool@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queryPool@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkQueryPool'
+foreign import ccall "vkDestroyQueryPool" vkDestroyQueryPool :: ("device" ::: VkDevice) -> ("queryPool" ::: VkQueryPool) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkGetQueryPoolResults - Copy results of queries in a query pool to a
+-- host memory region
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the query pool.
+--
+-- -   @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. For pipeline statistics queries,
+--     each query index in the pool contains one integer value for each bit
+--     that is enabled in 'VkQueryPoolCreateInfo'::@pipelineStatistics@
+--     when the pool is created.
+--
+-- -   @dataSize@ is the size in bytes of the buffer pointed to by @pData@.
+--
+-- -   @pData@ is a pointer to a user-allocated buffer where the results
+--     will be written
+--
+-- -   @stride@ is the stride in bytes between results for individual
+--     queries within @pData@.
+--
+-- -   @flags@ is a bitmask of 'VkQueryResultFlagBits' specifying how and
+--     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>.
+--
+-- 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
+-- @VK_QUERY_RESULT_64_BIT@ is set and the result overflows a 64-bit value,
+-- the value /may/ either wrap or saturate.
+--
+-- If @VK_QUERY_RESULT_WAIT_BIT@ is set, Vulkan will wait for each query to
+-- be in the available state before retrieving the numerical results for
+-- that query. In this case, @vkGetQueryPoolResults@ is guaranteed to
+-- succeed and return @VK_SUCCESS@ if the queries become available in a
+-- finite time (i.e. if they have been issued and not reset). If queries
+-- will never finish (e.g. due to being reset but not issued), then
+-- @vkGetQueryPoolResults@ /may/ not return in finite time.
+--
+-- If @VK_QUERY_RESULT_WAIT_BIT@ and @VK_QUERY_RESULT_PARTIAL_BIT@ are both
+-- not set then no result values are written to @pData@ for queries that
+-- are in the unavailable state at the time of the call, and
+-- @vkGetQueryPoolResults@ returns @VK_NOT_READY@. However, availability
+-- state is still written to @pData@ for those queries if
+-- @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@ is set.
+--
+-- __Note__
+--
+-- Applications /must/ take care to ensure that use of the
+-- @VK_QUERY_RESULT_WAIT_BIT@ bit has the desired effect.
+--
+-- For example, if a query has been used previously and a command buffer
+-- records the commands @vkCmdResetQueryPool@, @vkCmdBeginQuery@, and
+-- @vkCmdEndQuery@ for that query, then the query will remain in the
+-- available state until the @vkCmdResetQueryPool@ command executes on a
+-- queue. Applications /can/ use fences or events to ensure that a query
+-- has already been reset before checking for its results or availability
+-- status. Otherwise, a stale value could be returned from a previous use
+-- of the query.
+--
+-- The above also applies when @VK_QUERY_RESULT_WAIT_BIT@ is used in
+-- combination with @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@. In this case,
+-- the returned availability status /may/ reflect the result of a previous
+-- use of the query unless the @vkCmdResetQueryPool@ command has been
+-- executed since the last use of the query.
+--
+-- __Note__
+--
+-- Applications /can/ double-buffer query pool usage, with a pool per
+-- frame, and reset queries at the end of the frame in which they are read.
+--
+-- 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 to @pData@ for
+-- that query.
+--
+-- @VK_QUERY_RESULT_PARTIAL_BIT@ /must/ not be used if the pool’s
+-- @queryType@ is @VK_QUERY_TYPE_TIMESTAMP@.
+--
+-- If @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@ is set, the final integer
+-- value written for each query is non-zero if the query’s status was
+-- available or zero if the status was unavailable. When
+-- @VK_QUERY_RESULT_WITH_AVAILABILITY_BIT@ is used, implementations /must/
+-- guarantee that if they return a non-zero availability value then the
+-- numerical results /must/ be valid, assuming the results are not reset by
+-- a subsequent command.
+--
+-- __Note__
+--
+-- Satisfying this guarantee /may/ require careful ordering by the
+-- application, e.g. to read the availability status before reading the
+-- results.
+--
+-- == Valid Usage
+--
+-- -   @firstQuery@ /must/ be less than the number of queries in
+--     @queryPool@
+--
+-- -   If @VK_QUERY_RESULT_64_BIT@ is not set in @flags@ then @pData@ and
+--     @stride@ /must/ be multiples of @4@
+--
+-- -   If @VK_QUERY_RESULT_64_BIT@ is set in @flags@ then @pData@ and
+--     @stride@ /must/ be multiples of @8@
+--
+-- -   The sum of @firstQuery@ and @queryCount@ /must/ be less than or
+--     equal to the number of queries in @queryPool@
+--
+-- -   @dataSize@ /must/ be large enough to contain the result of each
+--     query, as described
+--     <{html_spec_relative}#queries-operation-memorylayout here>
+--
+-- -   If the @queryType@ used to create @queryPool@ was
+--     @VK_QUERY_TYPE_TIMESTAMP@, @flags@ /must/ not contain
+--     @VK_QUERY_RESULT_PARTIAL_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @queryPool@ /must/ be a valid @VkQueryPool@ handle
+--
+-- -   @pData@ /must/ be a valid pointer to an array of @dataSize@ bytes
+--
+-- -   @flags@ /must/ be a valid combination of 'VkQueryResultFlagBits'
+--     values
+--
+-- -   @dataSize@ /must/ be greater than @0@
+--
+-- -   @queryPool@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_NOT_READY@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', @VkDeviceSize@,
+-- 'VkQueryPool', 'VkQueryResultFlags'
+foreign import ccall "vkGetQueryPoolResults" vkGetQueryPoolResults :: ("device" ::: VkDevice) -> ("queryPool" ::: VkQueryPool) -> ("firstQuery" ::: Word32) -> ("queryCount" ::: Word32) -> ("dataSize" ::: CSize) -> ("pData" ::: Ptr ()) -> ("stride" ::: VkDeviceSize) -> ("flags" ::: VkQueryResultFlags) -> IO VkResult
+-- | VkQueryPoolCreateInfo - Structure specifying parameters of a newly
+-- 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>
+--     feature is not enabled, @queryType@ /must/ not be
+--     @VK_QUERY_TYPE_PIPELINE_STATISTICS@
+--
+-- -   If @queryType@ is @VK_QUERY_TYPE_PIPELINE_STATISTICS@,
+--     @pipelineStatistics@ /must/ be a valid combination of
+--     'VkQueryPipelineStatisticFlagBits' values
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkFlags"
+  vkFlags :: VkQueryPoolCreateFlags
+  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkQueryType"
+  vkQueryType :: VkQueryType
+  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkQueryCount"
+  vkQueryCount :: Word32
+  , -- No documentation found for Nested "VkQueryPoolCreateInfo" "vkPipelineStatistics"
+  vkPipelineStatistics :: VkQueryPipelineStatisticFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkQueryPoolCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkQueryPoolCreateInfo <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+                                   <*> peek (ptr `plusPtr` 20)
+                                   <*> peek (ptr `plusPtr` 24)
+                                   <*> peek (ptr `plusPtr` 28)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkQueryPoolCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkQueryPoolCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkQueryPoolCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkQueryType (poked :: VkQueryPoolCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkQueryCount (poked :: VkQueryPoolCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkPipelineStatistics (poked :: VkQueryPoolCreateInfo))
+-- | 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',
+-- 'vkGetQueryPoolResults'
+type VkQueryResultFlags = VkQueryResultFlagBits
+-- | VkQueryPipelineStatisticFlags - Bitmask of
+-- 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'
+type VkQueryPipelineStatisticFlags = VkQueryPipelineStatisticFlagBits
diff --git a/src/Graphics/Vulkan/Core10/Queue.hs b/src/Graphics/Vulkan/Core10/Queue.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Queue.hs
@@ -0,0 +1,939 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Queue
+  ( VkPipelineStageFlagBits(..)
+  , pattern VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT
+  , pattern VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT
+  , pattern VK_PIPELINE_STAGE_VERTEX_INPUT_BIT
+  , pattern VK_PIPELINE_STAGE_VERTEX_SHADER_BIT
+  , pattern VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT
+  , pattern VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT
+  , pattern VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT
+  , pattern VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT
+  , pattern VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT
+  , pattern VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT
+  , pattern VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT
+  , pattern VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT
+  , pattern VK_PIPELINE_STAGE_TRANSFER_BIT
+  , pattern VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT
+  , pattern VK_PIPELINE_STAGE_HOST_BIT
+  , pattern VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT
+  , pattern VK_PIPELINE_STAGE_ALL_COMMANDS_BIT
+  , VkQueue
+  , VkCommandBuffer
+  , VkFence
+  , VkSemaphore
+  , vkGetDeviceQueue
+  , vkQueueSubmit
+  , vkQueueWaitIdle
+  , vkDeviceWaitIdle
+  , VkSubmitInfo(..)
+  , VkPipelineStageFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+
+
+-- ** VkPipelineStageFlagBits
+
+-- | 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_DRAW_INDIRECT_BIT@ specifies the stage of the
+--     pipeline where Draw\/DispatchIndirect data structures are consumed.
+--
+-- -   @VK_PIPELINE_STAGE_VERTEX_INPUT_BIT@ specifies the stage of the
+--     pipeline where vertex and index buffers are consumed.
+--
+-- -   @VK_PIPELINE_STAGE_VERTEX_SHADER_BIT@ specifies the vertex shader
+--     stage.
+--
+-- -   @VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT@ specifies the
+--     tessellation control shader stage.
+--
+-- -   @VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT@ specifies the
+--     tessellation evaluation shader stage.
+--
+-- -   @VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT@ specifies the geometry
+--     shader stage.
+--
+-- -   @VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT@ specifies the fragment
+--     shader stage.
+--
+-- -   @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>
+--     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>
+--     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>
+--     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
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearAttachments'),
+--     and
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults'.
+--
+-- -   @VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT@ specifies the execution of a
+--     compute shader.
+--
+-- -   @VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT@ specifies the final stage in
+--     the pipeline where operations generated by all commands complete
+--     execution.
+--
+-- -   @VK_PIPELINE_STAGE_HOST_BIT@ specifies a pseudo-stage indicating
+--     execution on the host of reads\/writes of device memory. This stage
+--     is not invoked by any commands recorded in a command buffer.
+--
+-- -   @VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT@ specifies the execution of all
+--     graphics pipeline stages, and is equivalent to the logical OR of:
+--
+--     -   @VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT@
+--
+--     -   @VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT@
+--
+--     -   @VK_PIPELINE_STAGE_VERTEX_INPUT_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@
+--
+--     -   @VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT@
+--
+--     -   @VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT@
+--
+--     -   @VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT@
+--
+--     -   @VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT@
+--
+-- -   @VK_PIPELINE_STAGE_ALL_COMMANDS_BIT@ is equivalent to the logical OR
+--     of every other pipeline stage flag that is supported on the queue it
+--     is used with.
+--
+-- __Note__
+--
+-- An execution dependency with only @VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT@
+-- in the destination stage mask will only prevent that stage from
+-- executing in subsequently submitted commands. As this stage does not
+-- perform any actual execution, this is not observable - in effect, it
+-- does not delay processing of subsequent commands. Similarly an execution
+-- dependency with only @VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT@ in the source
+-- stage mask will effectively not wait for any prior commands to complete.
+--
+-- When defining a memory dependency, using only
+-- @VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT@ or
+-- @VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT@ would never make any accesses
+-- available and\/or visible because these stages do not access memory.
+--
+-- @VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT@ and
+-- @VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT@ are useful for accomplishing layout
+-- transitions and queue ownership operations when the required execution
+-- dependency is satisfied by other means - for example, semaphore
+-- operations between queues.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineStageFlags',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.vkCmdWriteBufferMarkerAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdWriteTimestamp'
+newtype VkPipelineStageFlagBits = VkPipelineStageFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineStageFlagBits where
+  showsPrec _ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = showString "VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = showString "VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = showString "VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = showString "VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = showString "VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = showString "VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = showString "VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = showString "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = showString "VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = showString "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = showString "VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = showString "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_TRANSFER_BIT = showString "VK_PIPELINE_STAGE_TRANSFER_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = showString "VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_HOST_BIT = showString "VK_PIPELINE_STAGE_HOST_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = showString "VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"
+  showsPrec _ VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = showString "VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkPipelineStageFlagBits 0x00020000) = showString "VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"
+  showsPrec p (VkPipelineStageFlagBits x) = showParen (p >= 11) (showString "VkPipelineStageFlagBits " . showsPrec 11 x)
+
+instance Read VkPipelineStageFlagBits where
+  readPrec = parens ( choose [ ("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT",                    pure VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
+                             , ("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT",                  pure VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
+                             , ("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT",                   pure VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
+                             , ("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT",                  pure VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
+                             , ("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT",    pure VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
+                             , ("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", pure VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
+                             , ("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT",                pure VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
+                             , ("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT",                pure VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
+                             , ("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT",           pure VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
+                             , ("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT",            pure VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
+                             , ("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT",        pure VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
+                             , ("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT",                 pure VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
+                             , ("VK_PIPELINE_STAGE_TRANSFER_BIT",                       pure VK_PIPELINE_STAGE_TRANSFER_BIT)
+                             , ("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT",                 pure VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
+                             , ("VK_PIPELINE_STAGE_HOST_BIT",                           pure VK_PIPELINE_STAGE_HOST_BIT)
+                             , ("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT",                   pure VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
+                             , ("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT",                   pure VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX", pure (VkPipelineStageFlagBits 0x00020000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineStageFlagBits")
+                        v <- step readPrec
+                        pure (VkPipelineStageFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"
+pattern VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = VkPipelineStageFlagBits 0x00000001
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"
+pattern VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = VkPipelineStageFlagBits 0x00000002
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"
+pattern VK_PIPELINE_STAGE_VERTEX_INPUT_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = VkPipelineStageFlagBits 0x00000004
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"
+pattern VK_PIPELINE_STAGE_VERTEX_SHADER_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = VkPipelineStageFlagBits 0x00000008
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"
+pattern VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = VkPipelineStageFlagBits 0x00000010
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"
+pattern VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = VkPipelineStageFlagBits 0x00000020
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"
+pattern VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = VkPipelineStageFlagBits 0x00000040
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"
+pattern VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = VkPipelineStageFlagBits 0x00000080
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"
+pattern VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x00000100
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"
+pattern VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x00000200
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"
+pattern VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = VkPipelineStageFlagBits 0x00000400
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"
+pattern VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = VkPipelineStageFlagBits 0x00000800
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_TRANSFER_BIT"
+pattern VK_PIPELINE_STAGE_TRANSFER_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_TRANSFER_BIT = VkPipelineStageFlagBits 0x00001000
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"
+pattern VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = VkPipelineStageFlagBits 0x00002000
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_HOST_BIT"
+pattern VK_PIPELINE_STAGE_HOST_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_HOST_BIT = VkPipelineStageFlagBits 0x00004000
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"
+pattern VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = VkPipelineStageFlagBits 0x00008000
+
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"
+pattern VK_PIPELINE_STAGE_ALL_COMMANDS_BIT :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = VkPipelineStageFlagBits 0x00010000
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkQueueBeginDebugUtilsLabelEXT',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkQueueBindSparse',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkQueueEndDebugUtilsLabelEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkQueueInsertDebugUtilsLabelEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkQueuePresentKHR',
+-- 'vkQueueSubmit', 'vkQueueWaitIdle'
+type VkQueue = Ptr VkQueue_T
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkAllocateCommandBuffers',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkBeginCommandBuffer',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCmdBeginDebugUtilsLabelEXT',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBeginQuery',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBeginRenderPass',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindDescriptorSets',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindIndexBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindPipeline',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBindVertexBuffers',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBlitImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearAttachments',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearDepthStencilImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyBufferToImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyImageToBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdCopyQueryPoolResults',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkCmdDebugMarkerBeginEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkCmdDebugMarkerEndEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_marker.vkCmdDebugMarkerInsertEXT',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDispatch',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.vkCmdDispatchBase',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.vkCmdDispatchBaseKHR',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDispatchIndirect',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDraw',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexed',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexedIndirect',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndexedIndirectCountAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndirect',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count.vkCmdDrawIndirectCountAMD',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCmdEndDebugUtilsLabelEXT',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdEndQuery',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdEndRenderPass',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdExecuteCommands',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdFillBuffer',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_debug_utils.vkCmdInsertDebugUtilsLabelEXT',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdNextSubpass',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPipelineBarrier',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCmdProcessCommandsNVX',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPushConstants',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_push_descriptor.vkCmdPushDescriptorSetWithTemplateKHR',
+-- 'Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands.vkCmdReserveSpaceForCommandsNVX',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResetEvent',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResetQueryPool',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResolveImage',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetBlendConstants',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBias',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetDepthBounds',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.vkCmdSetDeviceMask',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_device_group.vkCmdSetDeviceMaskKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles.vkCmdSetDiscardRectangleEXT',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetEvent',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetLineWidth',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_sample_locations.vkCmdSetSampleLocationsEXT',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetScissor',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilCompareMask',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilReference',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetStencilWriteMask',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetViewport',
+-- 'Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling.vkCmdSetViewportWScalingNV',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdUpdateBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdWaitEvents',
+-- 'Graphics.Vulkan.Extensions.VK_AMD_buffer_marker.vkCmdWriteBufferMarkerAMD',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdWriteTimestamp',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkEndCommandBuffer',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkFreeCommandBuffers',
+-- 'Graphics.Vulkan.Core10.CommandBuffer.vkResetCommandBuffer'
+type VkCommandBuffer = Ptr VkCommandBuffer_T
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- '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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImageKHR',
+-- 'Graphics.Vulkan.Core10.Fence.vkCreateFence',
+-- 'Graphics.Vulkan.Core10.Fence.vkDestroyFence',
+-- 'Graphics.Vulkan.Core10.Fence.vkGetFenceStatus',
+-- 'Graphics.Vulkan.Core10.SparseResourceMemoryManagement.vkQueueBindSparse',
+-- 'vkQueueSubmit',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDeviceEventEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT',
+-- 'Graphics.Vulkan.Core10.Fence.vkResetFences',
+-- 'Graphics.Vulkan.Core10.Fence.vkWaitForFences'
+type VkFence = Ptr VkFence_T
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.VkImportSemaphoreFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkImportSemaphoreWin32HandleInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkPresentInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd.VkSemaphoreGetFdInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkSemaphoreGetWin32HandleInfoKHR',
+-- 'VkSubmitInfo',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkAcquireNextImageKHR',
+-- 'Graphics.Vulkan.Core10.QueueSemaphore.vkCreateSemaphore',
+-- 'Graphics.Vulkan.Core10.QueueSemaphore.vkDestroySemaphore'
+type VkSemaphore = Ptr VkSemaphore_T
+-- | vkGetDeviceQueue - Get a queue handle from a device
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the queue.
+--
+-- -   @queueFamilyIndex@ is the index of the queue family to which the
+--     queue belongs.
+--
+-- -   @queueIndex@ is the index within this queue family of the queue to
+--     retrieve.
+--
+-- -   @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
+--     specified when @device@ was created, via the
+--     @VkDeviceQueueCreateInfo@ structure
+--
+-- -   @queueIndex@ /must/ be less than the number of queues created for
+--     the specified queue family index when @device@ was created, via the
+--     @queueCount@ member of the @VkDeviceQueueCreateInfo@ structure
+--
+-- -   'Graphics.Vulkan.Core10.Device.VkDeviceQueueCreateInfo'::@flags@
+--     /must/ have been set to zero when @device@ was created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @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 ()
+-- | vkQueueSubmit - Submits a sequence of semaphores or command buffers to a
+-- queue
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @queue@ is the queue that the command buffers will be submitted to.
+--
+-- -   @submitCount@ is the number of elements in the @pSubmits@ array.
+--
+-- -   @pSubmits@ is a pointer to an array of 'VkSubmitInfo' structures,
+--     each specifying a command buffer submission batch.
+--
+-- -   @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>.
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- Submission can be a high overhead operation, and applications /should/
+-- attempt to batch work together into as few calls to @vkQueueSubmit@ as
+-- possible.
+--
+-- @vkQueueSubmit@ is a
+-- <{html_spec_relative}#devsandqueues-submission queue submission command>,
+-- 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.
+--
+-- Fence and semaphore operations submitted with 'vkQueueSubmit' have
+-- 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>.
+--
+-- 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>.
+--
+-- 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>
+-- that respect it. Other than these implicit ordering guarantees and any
+-- <{html_spec_relative}#synchronization explicit synchronization primitives>,
+-- 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 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>.
+--
+-- If @vkQueueSubmit@ fails, it /may/ return @VK_ERROR_OUT_OF_HOST_MEMORY@
+-- or @VK_ERROR_OUT_OF_DEVICE_MEMORY@. If it does, the implementation
+-- /must/ ensure that the state and contents of any resources or
+-- synchronization primitives referenced by the submitted command buffers
+-- 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>.
+--
+-- == Valid Usage
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ be unsignaled
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ not be associated with any other queue command that
+--     has not yet completed execution on that queue
+--
+-- -   Any calls to
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetEvent',
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResetEvent' or
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdWaitEvents' that
+--     have been recorded into any of the command buffer elements of the
+--     @pCommandBuffers@ member of any element of @pSubmits@, /must/ not
+--     reference any 'Graphics.Vulkan.Core10.Event.VkEvent' that is
+--     referenced by any of those commands in a command buffer that has
+--     been submitted to another queue and is still in the /pending state/.
+--
+-- -   Any stage flag included in any element of the @pWaitDstStageMask@
+--     member of any element of @pSubmits@ /must/ be a pipeline stage
+--     supported by one of the capabilities of @queue@, as specified in the
+--     <{html_spec_relative}#synchronization-pipeline-stages-supported table of supported pipeline stages>.
+--
+-- -   Each element of the @pSignalSemaphores@ member of any element of
+--     @pSubmits@ /must/ be unsignaled when the semaphore signal operation
+--     it defines is executed on the device
+--
+-- -   When a semaphore unsignal operation defined by any element of the
+--     @pWaitSemaphores@ member of any element of @pSubmits@ executes on
+--     @queue@, no other queue /must/ be waiting on the same semaphore.
+--
+-- -   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>
+--     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>.
+--
+-- -   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>.
+--
+-- -   Any
+--     <{html_spec_relative}#commandbuffers-secondary secondary command buffers recorded>
+--     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>.
+--
+-- -   If any
+--     <{html_spec_relative}#commandbuffers-secondary secondary command buffers recorded>
+--     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>.
+--
+-- -   Each element of the @pCommandBuffers@ member of each element of
+--     @pSubmits@ /must/ have been allocated from a @VkCommandPool@ that
+--     was created for the same queue family @queue@ belongs to.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid @VkQueue@ handle
+--
+-- -   If @submitCount@ is not @0@, @pSubmits@ /must/ be a valid pointer to
+--     an array of @submitCount@ valid @VkSubmitInfo@ structures
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   Both of @fence@, and @queue@ that are valid handles /must/ have been
+--     created, allocated, or retrieved from the same @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queue@ /must/ be externally synchronized
+--
+-- -   Host access to @pSubmits@[].pWaitSemaphores[] /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pSubmits@[].pSignalSemaphores[] /must/ be externally
+--     synchronized
+--
+-- -   Host access to @fence@ /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>       |
+-- > +=================+=================+=================+=================+
+-- > | -               | -               | Any             | -               |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @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.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid @VkQueue@ handle
+--
+-- == 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             | -               |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @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@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to all @VkQueue@ objects created from @device@ /must/ be
+--     externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @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>
+-- that respect it. Other than these implicit ordering guarantees and any
+-- <{html_spec_relative}#synchronization explicit synchronization primitives>,
+-- these command buffers /may/ overlap or otherwise execute out of order.
+--
+-- == Valid Usage
+--
+-- -   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>
+--     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>
+--     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@
+--
+-- -   Each element of @pWaitDstStageMask@ /must/ not include
+--     @VK_PIPELINE_STAGE_HOST_BIT@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SUBMIT_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkD3D12FenceSubmitInfoKHR',
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupSubmitInfo',
+--     'Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory.VkProtectedSubmitInfo',
+--     'Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex.VkWin32KeyedMutexAcquireReleaseInfoKHR',
+--     or
+--     'Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex.VkWin32KeyedMutexAcquireReleaseInfoNV'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid
+--     @VkSemaphore@ handles
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitDstStageMask@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid combinations
+--     of 'VkPipelineStageFlagBits' values
+--
+-- -   Each element of @pWaitDstStageMask@ /must/ not be @0@
+--
+-- -   If @commandBufferCount@ is not @0@, @pCommandBuffers@ /must/ be a
+--     valid pointer to an array of @commandBufferCount@ valid
+--     @VkCommandBuffer@ handles
+--
+-- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be
+--     a valid pointer to an array of @signalSemaphoreCount@ valid
+--     @VkSemaphore@ handles
+--
+-- -   Each of the elements of @pCommandBuffers@, the elements of
+--     @pSignalSemaphores@, and the elements of @pWaitSemaphores@ that are
+--     valid handles /must/ have been created, allocated, or retrieved from
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSubmitInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSubmitInfo" "vkWaitSemaphoreCount"
+  vkWaitSemaphoreCount :: Word32
+  , -- No documentation found for Nested "VkSubmitInfo" "vkPWaitSemaphores"
+  vkPWaitSemaphores :: Ptr VkSemaphore
+  , -- No documentation found for Nested "VkSubmitInfo" "vkPWaitDstStageMask"
+  vkPWaitDstStageMask :: Ptr VkPipelineStageFlags
+  , -- No documentation found for Nested "VkSubmitInfo" "vkCommandBufferCount"
+  vkCommandBufferCount :: Word32
+  , -- No documentation found for Nested "VkSubmitInfo" "vkPCommandBuffers"
+  vkPCommandBuffers :: Ptr VkCommandBuffer
+  , -- No documentation found for Nested "VkSubmitInfo" "vkSignalSemaphoreCount"
+  vkSignalSemaphoreCount :: Word32
+  , -- No documentation found for Nested "VkSubmitInfo" "vkPSignalSemaphores"
+  vkPSignalSemaphores :: Ptr VkSemaphore
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSubmitInfo where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkSubmitInfo <$> 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)
+                          <*> peek (ptr `plusPtr` 64)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 32) (vkPWaitDstStageMask (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 40) (vkCommandBufferCount (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 48) (vkPCommandBuffers (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 56) (vkSignalSemaphoreCount (poked :: VkSubmitInfo))
+                *> poke (ptr `plusPtr` 64) (vkPSignalSemaphores (poked :: VkSubmitInfo))
+-- | 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',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdPipelineBarrier',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdResetEvent',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdSetEvent',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdWaitEvents'
+type VkPipelineStageFlags = VkPipelineStageFlagBits
diff --git a/src/Graphics/Vulkan/Core10/QueueSemaphore.hs b/src/Graphics/Vulkan/Core10/QueueSemaphore.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/QueueSemaphore.hs
@@ -0,0 +1,241 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.QueueSemaphore
+  ( VkSemaphoreCreateFlags(..)
+  , vkCreateSemaphore
+  , vkDestroySemaphore
+  , VkSemaphoreCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkSemaphore
+  )
+
+
+-- ** VkSemaphoreCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSemaphoreCreateFlags where
+  
+  showsPrec p (VkSemaphoreCreateFlags x) = showParen (p >= 11) (showString "VkSemaphoreCreateFlags " . showsPrec 11 x)
+
+instance Read VkSemaphoreCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSemaphoreCreateFlags")
+                        v <- step readPrec
+                        pure (VkSemaphoreCreateFlags v)
+                        )
+                    )
+
+
+-- | vkCreateSemaphore - Create a new queue semaphore object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the semaphore.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkSemaphoreCreateInfo@ structure which contains information about
+--     how the semaphore is to be created.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkSemaphoreCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSemaphore@ /must/ be a valid pointer to a @VkSemaphore@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Core10.Queue.VkSemaphore', 'VkSemaphoreCreateInfo'
+foreign import ccall "vkCreateSemaphore" vkCreateSemaphore :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkSemaphoreCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSemaphore" ::: Ptr VkSemaphore) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted batches that refer to @semaphore@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @semaphore@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @semaphore@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @semaphore@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @semaphore@
+--     /must/ be a valid @VkSemaphore@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @semaphore@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @semaphore@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Queue.VkSemaphore'
+foreign import ccall "vkDestroySemaphore" vkDestroySemaphore :: ("device" ::: VkDevice) -> ("semaphore" ::: VkSemaphore) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | VkSemaphoreCreateInfo - Structure specifying parameters of a newly
+-- created semaphore
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkExportSemaphoreCreateInfo'
+--     or
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32.VkExportSemaphoreWin32HandleInfoKHR'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSemaphoreCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSemaphoreCreateInfo" "vkFlags"
+  vkFlags :: VkSemaphoreCreateFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSemaphoreCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSemaphoreCreateInfo <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSemaphoreCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSemaphoreCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSemaphoreCreateInfo))
diff --git a/src/Graphics/Vulkan/Core10/Sampler.hs b/src/Graphics/Vulkan/Core10/Sampler.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Sampler.hs
@@ -0,0 +1,768 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Sampler
+  ( VkBorderColor(..)
+  , pattern VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK
+  , pattern VK_BORDER_COLOR_INT_TRANSPARENT_BLACK
+  , pattern VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK
+  , pattern VK_BORDER_COLOR_INT_OPAQUE_BLACK
+  , pattern VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE
+  , pattern VK_BORDER_COLOR_INT_OPAQUE_WHITE
+  , VkSamplerAddressMode(..)
+  , pattern VK_SAMPLER_ADDRESS_MODE_REPEAT
+  , pattern VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT
+  , pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE
+  , pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER
+  , VkFilter(..)
+  , pattern VK_FILTER_NEAREST
+  , pattern VK_FILTER_LINEAR
+  , VkSamplerMipmapMode(..)
+  , pattern VK_SAMPLER_MIPMAP_MODE_NEAREST
+  , pattern VK_SAMPLER_MIPMAP_MODE_LINEAR
+  , VkSamplerCreateFlags(..)
+  , VkSampler
+  , vkCreateSampler
+  , vkDestroySampler
+  , VkSamplerCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkCompareOp(..)
+  )
+
+
+-- ** VkBorderColor
+
+-- | VkBorderColor - Specify border color used for texture lookups
+--
+-- = Description
+-- #_description#
+--
+-- -   @VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK@ specifies a transparent,
+--     floating-point format, black color.
+--
+-- -   @VK_BORDER_COLOR_INT_TRANSPARENT_BLACK@ specifies a transparent,
+--     integer format, black color.
+--
+-- -   @VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK@ specifies an opaque,
+--     floating-point format, black color.
+--
+-- -   @VK_BORDER_COLOR_INT_OPAQUE_BLACK@ specifies an opaque, integer
+--     format, black color.
+--
+-- -   @VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE@ specifies an opaque,
+--     floating-point format, white color.
+--
+-- -   @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>.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSamplerCreateInfo'
+newtype VkBorderColor = VkBorderColor Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkBorderColor where
+  showsPrec _ VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = showString "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK"
+  showsPrec _ VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = showString "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK"
+  showsPrec _ VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = showString "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK"
+  showsPrec _ VK_BORDER_COLOR_INT_OPAQUE_BLACK = showString "VK_BORDER_COLOR_INT_OPAQUE_BLACK"
+  showsPrec _ VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = showString "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE"
+  showsPrec _ VK_BORDER_COLOR_INT_OPAQUE_WHITE = showString "VK_BORDER_COLOR_INT_OPAQUE_WHITE"
+  showsPrec p (VkBorderColor x) = showParen (p >= 11) (showString "VkBorderColor " . showsPrec 11 x)
+
+instance Read VkBorderColor where
+  readPrec = parens ( choose [ ("VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK", pure VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK)
+                             , ("VK_BORDER_COLOR_INT_TRANSPARENT_BLACK",   pure VK_BORDER_COLOR_INT_TRANSPARENT_BLACK)
+                             , ("VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK",      pure VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK)
+                             , ("VK_BORDER_COLOR_INT_OPAQUE_BLACK",        pure VK_BORDER_COLOR_INT_OPAQUE_BLACK)
+                             , ("VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE",      pure VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE)
+                             , ("VK_BORDER_COLOR_INT_OPAQUE_WHITE",        pure VK_BORDER_COLOR_INT_OPAQUE_WHITE)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBorderColor")
+                        v <- step readPrec
+                        pure (VkBorderColor v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkBorderColor" "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK"
+pattern VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK :: VkBorderColor
+pattern VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = VkBorderColor 0
+
+-- No documentation found for Nested "VkBorderColor" "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK"
+pattern VK_BORDER_COLOR_INT_TRANSPARENT_BLACK :: VkBorderColor
+pattern VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = VkBorderColor 1
+
+-- No documentation found for Nested "VkBorderColor" "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK"
+pattern VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK :: VkBorderColor
+pattern VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = VkBorderColor 2
+
+-- No documentation found for Nested "VkBorderColor" "VK_BORDER_COLOR_INT_OPAQUE_BLACK"
+pattern VK_BORDER_COLOR_INT_OPAQUE_BLACK :: VkBorderColor
+pattern VK_BORDER_COLOR_INT_OPAQUE_BLACK = VkBorderColor 3
+
+-- No documentation found for Nested "VkBorderColor" "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE"
+pattern VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE :: VkBorderColor
+pattern VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = VkBorderColor 4
+
+-- No documentation found for Nested "VkBorderColor" "VK_BORDER_COLOR_INT_OPAQUE_WHITE"
+pattern VK_BORDER_COLOR_INT_OPAQUE_WHITE :: VkBorderColor
+pattern VK_BORDER_COLOR_INT_OPAQUE_WHITE = VkBorderColor 5
+-- ** VkSamplerAddressMode
+
+-- | VkSamplerAddressMode - Specify behavior of sampling with texture
+-- coordinates outside an image
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSamplerCreateInfo'
+newtype VkSamplerAddressMode = VkSamplerAddressMode Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSamplerAddressMode where
+  showsPrec _ VK_SAMPLER_ADDRESS_MODE_REPEAT = showString "VK_SAMPLER_ADDRESS_MODE_REPEAT"
+  showsPrec _ VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = showString "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT"
+  showsPrec _ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = showString "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE"
+  showsPrec _ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = showString "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkSamplerAddressMode 4) = showString "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE"
+  showsPrec p (VkSamplerAddressMode x) = showParen (p >= 11) (showString "VkSamplerAddressMode " . showsPrec 11 x)
+
+instance Read VkSamplerAddressMode where
+  readPrec = parens ( choose [ ("VK_SAMPLER_ADDRESS_MODE_REPEAT",          pure VK_SAMPLER_ADDRESS_MODE_REPEAT)
+                             , ("VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT", pure VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT)
+                             , ("VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE",   pure VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
+                             , ("VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER", pure VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE", pure (VkSamplerAddressMode 4))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSamplerAddressMode")
+                        v <- step readPrec
+                        pure (VkSamplerAddressMode v)
+                        )
+                    )
+
+-- | @VK_SAMPLER_ADDRESS_MODE_REPEAT@ specifies that the repeat wrap mode
+-- will be used.
+pattern VK_SAMPLER_ADDRESS_MODE_REPEAT :: VkSamplerAddressMode
+pattern VK_SAMPLER_ADDRESS_MODE_REPEAT = VkSamplerAddressMode 0
+
+-- | @VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT@ specifies that the mirrored
+-- repeat wrap mode will be used.
+pattern VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT :: VkSamplerAddressMode
+pattern VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = VkSamplerAddressMode 1
+
+-- | @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE@ specifies that the clamp to edge
+-- wrap mode will be used.
+pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE :: VkSamplerAddressMode
+pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = VkSamplerAddressMode 2
+
+-- | @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER@ specifies that the clamp to
+-- border wrap mode will be used.
+pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER :: VkSamplerAddressMode
+pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = VkSamplerAddressMode 3
+-- ** VkFilter
+
+-- | 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>.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSamplerCreateInfo',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdBlitImage'
+newtype VkFilter = VkFilter Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkFilter where
+  showsPrec _ VK_FILTER_NEAREST = showString "VK_FILTER_NEAREST"
+  showsPrec _ VK_FILTER_LINEAR = showString "VK_FILTER_LINEAR"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkFilter 1000015000) = showString "VK_FILTER_CUBIC_IMG"
+  showsPrec p (VkFilter x) = showParen (p >= 11) (showString "VkFilter " . showsPrec 11 x)
+
+instance Read VkFilter where
+  readPrec = parens ( choose [ ("VK_FILTER_NEAREST", pure VK_FILTER_NEAREST)
+                             , ("VK_FILTER_LINEAR",  pure VK_FILTER_LINEAR)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_FILTER_CUBIC_IMG", pure (VkFilter 1000015000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkFilter")
+                        v <- step readPrec
+                        pure (VkFilter v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkFilter" "VK_FILTER_NEAREST"
+pattern VK_FILTER_NEAREST :: VkFilter
+pattern VK_FILTER_NEAREST = VkFilter 0
+
+-- No documentation found for Nested "VkFilter" "VK_FILTER_LINEAR"
+pattern VK_FILTER_LINEAR :: VkFilter
+pattern VK_FILTER_LINEAR = VkFilter 1
+-- ** VkSamplerMipmapMode
+
+-- | 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>.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSamplerCreateInfo'
+newtype VkSamplerMipmapMode = VkSamplerMipmapMode Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSamplerMipmapMode where
+  showsPrec _ VK_SAMPLER_MIPMAP_MODE_NEAREST = showString "VK_SAMPLER_MIPMAP_MODE_NEAREST"
+  showsPrec _ VK_SAMPLER_MIPMAP_MODE_LINEAR = showString "VK_SAMPLER_MIPMAP_MODE_LINEAR"
+  showsPrec p (VkSamplerMipmapMode x) = showParen (p >= 11) (showString "VkSamplerMipmapMode " . showsPrec 11 x)
+
+instance Read VkSamplerMipmapMode where
+  readPrec = parens ( choose [ ("VK_SAMPLER_MIPMAP_MODE_NEAREST", pure VK_SAMPLER_MIPMAP_MODE_NEAREST)
+                             , ("VK_SAMPLER_MIPMAP_MODE_LINEAR",  pure VK_SAMPLER_MIPMAP_MODE_LINEAR)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSamplerMipmapMode")
+                        v <- step readPrec
+                        pure (VkSamplerMipmapMode v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkSamplerMipmapMode" "VK_SAMPLER_MIPMAP_MODE_NEAREST"
+pattern VK_SAMPLER_MIPMAP_MODE_NEAREST :: VkSamplerMipmapMode
+pattern VK_SAMPLER_MIPMAP_MODE_NEAREST = VkSamplerMipmapMode 0
+
+-- No documentation found for Nested "VkSamplerMipmapMode" "VK_SAMPLER_MIPMAP_MODE_LINEAR"
+pattern VK_SAMPLER_MIPMAP_MODE_LINEAR :: VkSamplerMipmapMode
+pattern VK_SAMPLER_MIPMAP_MODE_LINEAR = VkSamplerMipmapMode 1
+-- ** VkSamplerCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSamplerCreateFlags where
+  
+  showsPrec p (VkSamplerCreateFlags x) = showParen (p >= 11) (showString "VkSamplerCreateFlags " . showsPrec 11 x)
+
+instance Read VkSamplerCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSamplerCreateFlags")
+                        v <- step readPrec
+                        pure (VkSamplerCreateFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'vkCreateSampler', 'vkDestroySampler'
+type VkSampler = Ptr VkSampler_T
+-- | vkCreateSampler - Create a new sampler object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the sampler.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkSamplerCreateInfo' structure specifying the state of the sampler
+--     object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkSamplerCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSampler@ /must/ be a valid pointer to a @VkSampler@ 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_TOO_MANY_OBJECTS@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkSampler',
+-- 'VkSamplerCreateInfo'
+foreign import ccall "vkCreateSampler" vkCreateSampler :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkSamplerCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSampler" ::: Ptr VkSampler) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @sampler@ /must/ have completed
+--     execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @sampler@ was created,
+--     a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @sampler@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @sampler@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @sampler@ /must/
+--     be a valid @VkSampler@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @sampler@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @sampler@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkSampler'
+foreign import ccall "vkDestroySampler" vkDestroySampler :: ("device" ::: VkDevice) -> ("sampler" ::: VkSampler) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | VkSamplerCreateInfo - Structure specifying parameters of a newly created
+-- sampler
+--
+-- = Members
+-- #_members#
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @flags@ is reserved for future use.
+--
+-- -   @magFilter@ is a 'VkFilter' value specifying the magnification
+--     filter to apply to lookups.
+--
+-- -   @minFilter@ is a 'VkFilter' value specifying the minification filter
+--     to apply to lookups.
+--
+-- -   @mipmapMode@ is a 'VkSamplerMipmapMode' value specifying the mipmap
+--     filter to apply to lookups.
+--
+-- -   @addressModeU@ is a 'VkSamplerAddressMode' value specifying the
+--     addressing mode for outside [0..1] range for U coordinate.
+--
+-- -   @addressModeV@ is a 'VkSamplerAddressMode' value specifying the
+--     addressing mode for outside [0..1] range for V coordinate.
+--
+-- -   @addressModeW@ is a 'VkSamplerAddressMode' value specifying the
+--     addressing mode for outside [0..1] range for W coordinate.
+--
+-- -   @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>
+--     section.
+--
+-- -   @anisotropyEnable@ is @VK_TRUE@ to enable anisotropic filtering, as
+--     described in the
+--     <{html_spec_relative}#textures-texel-anisotropic-filtering Texel Anisotropic Filtering>
+--     section, or @VK_FALSE@ otherwise.
+--
+-- -   @maxAnisotropy@ is the anisotropy value clamp used by the sampler
+--     when @anisotropyEnable@ is @VK_TRUE@. If @anisotropyEnable@ is
+--     @VK_FALSE@, @maxAnisotropy@ is ignored.
+--
+-- -   @compareEnable@ is @VK_TRUE@ to enable comparison against a
+--     reference value during lookups, or @VK_FALSE@ otherwise.
+--
+--     -   Note: Some implementations will default to shader state if this
+--         member does not match.
+--
+-- -   @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>
+--     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>
+--     section. @maxLod@ /must/ be greater than or equal to @minLod@.
+--
+-- -   @borderColor@ is a 'VkBorderColor' value specifying the predefined
+--     border color to use.
+--
+-- -   @unnormalizedCoordinates@ controls whether to use unnormalized or
+--     normalized texel coordinates to address texels of the image. When
+--     set to @VK_TRUE@, the range of the image coordinates used to lookup
+--     the texel is in the range of zero to the image dimensions for x, y
+--     and z. When set to @VK_FALSE@ the range of image coordinates is zero
+--     to one. When @unnormalizedCoordinates@ is @VK_TRUE@, samplers have
+--     the following requirements:
+--
+--     -   @minFilter@ and @magFilter@ /must/ be equal.
+--
+--     -   @mipmapMode@ /must/ be @VK_SAMPLER_MIPMAP_MODE_NEAREST@.
+--
+--     -   @minLod@ and @maxLod@ /must/ be zero.
+--
+--     -   @addressModeU@ and @addressModeV@ /must/ each be either
+--         @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE@ or
+--         @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER@.
+--
+--     -   @anisotropyEnable@ /must/ be @VK_FALSE@.
+--
+--     -   @compareEnable@ /must/ be @VK_FALSE@.
+--
+-- -   When @unnormalizedCoordinates@ is @VK_TRUE@, images the sampler is
+--     used with in the shader have the following requirements:
+--
+--     -   The @viewType@ /must/ be either @VK_IMAGE_VIEW_TYPE_1D@ or
+--         @VK_IMAGE_VIEW_TYPE_2D@.
+--
+--     -   The image view /must/ have a single layer and a single mip
+--         level.
+--
+-- -   When @unnormalizedCoordinates@ is @VK_TRUE@, image built-in
+--     functions in the shader that use the sampler have the following
+--     requirements:
+--
+--     -   The functions /must/ not use projection.
+--
+--     -   The functions /must/ not use offsets.
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- @magFilter@ values of @VK_FILTER_NEAREST@ and @VK_FILTER_LINEAR@
+-- directly correspond to @GL_NEAREST@ and @GL_LINEAR@ magnification
+-- filters. @minFilter@ and @mipmapMode@ combine to correspond to the
+-- similarly named OpenGL minification filter of
+-- @GL_minFilter_MIPMAP_mipmapMode@ (e.g. @minFilter@ of @VK_FILTER_LINEAR@
+-- and @mipmapMode@ of @VK_SAMPLER_MIPMAP_MODE_NEAREST@ correspond to
+-- @GL_LINEAR_MIPMAP_NEAREST@).
+--
+-- There are no Vulkan filter modes that directly correspond to OpenGL
+-- minification filters of @GL_LINEAR@ or @GL_NEAREST@, but they /can/ be
+-- emulated using @VK_SAMPLER_MIPMAP_MODE_NEAREST@, @minLod@ = 0, and
+-- @maxLod@ = 0.25, and using @minFilter@ = @VK_FILTER_LINEAR@ or
+-- @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.
+--
+-- 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>
+-- member of the
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'
+-- structure. If @maxSamplerAllocationCount@ is exceeded, @vkCreateSampler@
+-- will return @VK_ERROR_TOO_MANY_OBJECTS@.
+--
+-- Since 'VkSampler' is a non-dispatchable handle type, implementations
+-- /may/ return the same handle for sampler state vectors that are
+-- identical. In such cases, all such objects would only count once against
+-- the @maxSamplerAllocationCount@ limit.
+--
+-- == Valid Usage
+--
+-- -   The absolute value of @mipLodBias@ /must/ be less than or equal to
+--     @VkPhysicalDeviceLimits@::@maxSamplerLodBias@
+--
+-- -   If the
+--     <{html_spec_relative}#features-features-samplerAnisotropy anisotropic sampling>
+--     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 @unnormalizedCoordinates@ is @VK_TRUE@, @minFilter@ and
+--     @magFilter@ /must/ be equal
+--
+-- -   If @unnormalizedCoordinates@ is @VK_TRUE@, @mipmapMode@ /must/ be
+--     @VK_SAMPLER_MIPMAP_MODE_NEAREST@
+--
+-- -   If @unnormalizedCoordinates@ is @VK_TRUE@, @minLod@ and @maxLod@
+--     /must/ be zero
+--
+-- -   If @unnormalizedCoordinates@ is @VK_TRUE@, @addressModeU@ and
+--     @addressModeV@ /must/ each be either
+--     @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE@ or
+--     @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER@
+--
+-- -   If @unnormalizedCoordinates@ is @VK_TRUE@, @anisotropyEnable@ /must/
+--     be @VK_FALSE@
+--
+-- -   If @unnormalizedCoordinates@ is @VK_TRUE@, @compareEnable@ /must/ be
+--     @VK_FALSE@
+--
+-- -   If any of @addressModeU@, @addressModeV@ or @addressModeW@ are
+--     @VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER@, @borderColor@ /must/ be a
+--     valid 'VkBorderColor' value
+--
+-- -   If the @{html_spec_relative}#VK_KHR_sampler_mirror_clamp_to_edge@
+--     extension is not enabled, @addressModeU@, @addressModeV@ and
+--     @addressModeW@ /must/ not be
+--     @VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE@
+--
+-- -   If @compareEnable@ is @VK_TRUE@, @compareOp@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Pipeline.VkCompareOp' value
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax.VkSamplerReductionModeCreateInfoEXT'
+--     or
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionInfo'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @magFilter@ /must/ be a valid 'VkFilter' value
+--
+-- -   @minFilter@ /must/ be a valid 'VkFilter' value
+--
+-- -   @mipmapMode@ /must/ be a valid 'VkSamplerMipmapMode' value
+--
+-- -   @addressModeU@ /must/ be a valid 'VkSamplerAddressMode' value
+--
+-- -   @addressModeV@ /must/ be a valid 'VkSamplerAddressMode' value
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkFlags"
+  vkFlags :: VkSamplerCreateFlags
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMagFilter"
+  vkMagFilter :: VkFilter
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMinFilter"
+  vkMinFilter :: VkFilter
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMipmapMode"
+  vkMipmapMode :: VkSamplerMipmapMode
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAddressModeU"
+  vkAddressModeU :: VkSamplerAddressMode
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAddressModeV"
+  vkAddressModeV :: VkSamplerAddressMode
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAddressModeW"
+  vkAddressModeW :: VkSamplerAddressMode
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMipLodBias"
+  vkMipLodBias :: CFloat
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkAnisotropyEnable"
+  vkAnisotropyEnable :: VkBool32
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMaxAnisotropy"
+  vkMaxAnisotropy :: CFloat
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkCompareEnable"
+  vkCompareEnable :: VkBool32
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkCompareOp"
+  vkCompareOp :: VkCompareOp
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMinLod"
+  vkMinLod :: CFloat
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkMaxLod"
+  vkMaxLod :: CFloat
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkBorderColor"
+  vkBorderColor :: VkBorderColor
+  , -- No documentation found for Nested "VkSamplerCreateInfo" "vkUnnormalizedCoordinates"
+  vkUnnormalizedCoordinates :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSamplerCreateInfo where
+  sizeOf ~_ = 80
+  alignment ~_ = 8
+  peek ptr = VkSamplerCreateInfo <$> 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)
+                                 <*> peek (ptr `plusPtr` 60)
+                                 <*> peek (ptr `plusPtr` 64)
+                                 <*> peek (ptr `plusPtr` 68)
+                                 <*> peek (ptr `plusPtr` 72)
+                                 <*> peek (ptr `plusPtr` 76)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkMagFilter (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkMinFilter (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkMipmapMode (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkAddressModeU (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 36) (vkAddressModeV (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkAddressModeW (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 44) (vkMipLodBias (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkAnisotropyEnable (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 52) (vkMaxAnisotropy (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkCompareEnable (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 60) (vkCompareOp (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 64) (vkMinLod (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 68) (vkMaxLod (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 72) (vkBorderColor (poked :: VkSamplerCreateInfo))
+                *> poke (ptr `plusPtr` 76) (vkUnnormalizedCoordinates (poked :: VkSamplerCreateInfo))
diff --git a/src/Graphics/Vulkan/Core10/Shader.hs b/src/Graphics/Vulkan/Core10/Shader.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Shader.hs
@@ -0,0 +1,298 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.Shader
+  ( VkShaderModuleCreateFlags(..)
+  , VkShaderModule
+  , vkCreateShaderModule
+  , vkDestroyShaderModule
+  , VkShaderModuleCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+
+
+-- ** VkShaderModuleCreateFlags
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkShaderModuleCreateFlags where
+  
+  showsPrec p (VkShaderModuleCreateFlags x) = showParen (p >= 11) (showString "VkShaderModuleCreateFlags " . showsPrec 11 x)
+
+instance Read VkShaderModuleCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkShaderModuleCreateFlags")
+                        v <- step readPrec
+                        pure (VkShaderModuleCreateFlags v)
+                        )
+                    )
+
+
+-- | Dummy data to tag the 'Ptr' with
+data VkShaderModule_T
+-- | VkShaderModule - Opaque handle to a shader module object
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineShaderStageCreateInfo',
+-- 'vkCreateShaderModule', 'vkDestroyShaderModule'
+type VkShaderModule = Ptr VkShaderModule_T
+-- | vkCreateShaderModule - Creates a new shader module object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the shader module.
+--
+-- -   @pCreateInfo@ parameter is a pointer to an instance of the
+--     @VkShaderModuleCreateInfo@ structure.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkShaderModuleCreateInfo@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pShaderModule@ /must/ be a valid pointer to a @VkShaderModule@
+--     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_INVALID_SHADER_NV@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkShaderModule', 'VkShaderModuleCreateInfo'
+foreign import ccall "vkCreateShaderModule" vkCreateShaderModule :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkShaderModuleCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pShaderModule" ::: Ptr VkShaderModule) -> IO VkResult
+-- | 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.
+--
+-- = Description
+-- #_description#
+--
+-- A shader module /can/ be destroyed while pipelines created using its
+-- shaders are still in use.
+--
+-- == Valid Usage
+--
+-- -   If @VkAllocationCallbacks@ were provided when @shaderModule@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @shaderModule@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @shaderModule@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @shaderModule@
+--     /must/ be a valid @VkShaderModule@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @shaderModule@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @shaderModule@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkShaderModule'
+foreign import ccall "vkDestroyShaderModule" vkDestroyShaderModule :: ("device" ::: VkDevice) -> ("shaderModule" ::: VkShaderModule) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | 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
+--
+-- -   @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/ 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>
+--     appendix
+--
+-- -   @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>
+--     appendix
+--
+-- -   If @pCode@ declares any of the capabilities listed as /optional/ in
+--     the
+--     <{html_spec_relative}#spirvenv-capabilities-table SPIR-V Environment>
+--     appendix, the corresponding feature(s) /must/ be enabled.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Extensions.VK_EXT_validation_cache.VkShaderModuleValidationCacheCreateInfoEXT'
+--
+-- -   @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
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkShaderModuleCreateFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'vkCreateShaderModule'
+data VkShaderModuleCreateInfo = VkShaderModuleCreateInfo
+  { -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkFlags"
+  vkFlags :: VkShaderModuleCreateFlags
+  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkCodeSize"
+  vkCodeSize :: CSize
+  , -- No documentation found for Nested "VkShaderModuleCreateInfo" "vkPCode"
+  vkPCode :: Ptr Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkShaderModuleCreateInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkShaderModuleCreateInfo <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 24)
+                                      <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkShaderModuleCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkShaderModuleCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkShaderModuleCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkCodeSize (poked :: VkShaderModuleCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkPCode (poked :: VkShaderModuleCreateInfo))
diff --git a/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs b/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/SparseResourceMemoryManagement.hs
@@ -0,0 +1,1201 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkImageAspectFlagBits(..)
+  , pattern VK_IMAGE_ASPECT_COLOR_BIT
+  , pattern VK_IMAGE_ASPECT_DEPTH_BIT
+  , pattern VK_IMAGE_ASPECT_STENCIL_BIT
+  , pattern VK_IMAGE_ASPECT_METADATA_BIT
+  , VkSparseMemoryBindFlagBits(..)
+  , pattern VK_SPARSE_MEMORY_BIND_METADATA_BIT
+  , VkSparseImageFormatFlagBits(..)
+  , pattern VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT
+  , pattern VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT
+  , pattern VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT
+  , vkGetImageSparseMemoryRequirements
+  , vkGetPhysicalDeviceSparseImageFormatProperties
+  , vkQueueBindSparse
+  , VkOffset3D(..)
+  , VkSparseImageFormatProperties(..)
+  , VkSparseImageMemoryRequirements(..)
+  , VkImageSubresource(..)
+  , VkSparseMemoryBind(..)
+  , VkSparseImageMemoryBind(..)
+  , VkSparseBufferMemoryBindInfo(..)
+  , VkSparseImageOpaqueMemoryBindInfo(..)
+  , VkSparseImageMemoryBindInfo(..)
+  , VkBindSparseInfo(..)
+  , VkImageAspectFlags
+  , VkSparseMemoryBindFlags
+  , VkSparseImageFormatFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFormat(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkExtent3D(..)
+  , VkImageUsageFlagBits(..)
+  , VkImageTiling(..)
+  , VkImageUsageFlags
+  , VkSampleCountFlagBits(..)
+  , VkImageType(..)
+  , VkPhysicalDevice
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  , VkImage
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkSemaphore
+  , VkFence
+  , VkQueue
+  )
+
+
+-- ** VkImageAspectFlagBits
+
+-- | VkImageAspectFlagBits - Bitmask specifying which aspects of an image are
+-- included in a view
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkBindImagePlaneMemoryInfo',
+-- 'VkImageAspectFlags',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkImagePlaneMemoryRequirementsInfo'
+newtype VkImageAspectFlagBits = VkImageAspectFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkImageAspectFlagBits where
+  showsPrec _ VK_IMAGE_ASPECT_COLOR_BIT = showString "VK_IMAGE_ASPECT_COLOR_BIT"
+  showsPrec _ VK_IMAGE_ASPECT_DEPTH_BIT = showString "VK_IMAGE_ASPECT_DEPTH_BIT"
+  showsPrec _ VK_IMAGE_ASPECT_STENCIL_BIT = showString "VK_IMAGE_ASPECT_STENCIL_BIT"
+  showsPrec _ VK_IMAGE_ASPECT_METADATA_BIT = showString "VK_IMAGE_ASPECT_METADATA_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkImageAspectFlagBits 0x00000010) = showString "VK_IMAGE_ASPECT_PLANE_0_BIT"
+  showsPrec _ (VkImageAspectFlagBits 0x00000020) = showString "VK_IMAGE_ASPECT_PLANE_1_BIT"
+  showsPrec _ (VkImageAspectFlagBits 0x00000040) = showString "VK_IMAGE_ASPECT_PLANE_2_BIT"
+  showsPrec p (VkImageAspectFlagBits x) = showParen (p >= 11) (showString "VkImageAspectFlagBits " . showsPrec 11 x)
+
+instance Read VkImageAspectFlagBits where
+  readPrec = parens ( choose [ ("VK_IMAGE_ASPECT_COLOR_BIT",    pure VK_IMAGE_ASPECT_COLOR_BIT)
+                             , ("VK_IMAGE_ASPECT_DEPTH_BIT",    pure VK_IMAGE_ASPECT_DEPTH_BIT)
+                             , ("VK_IMAGE_ASPECT_STENCIL_BIT",  pure VK_IMAGE_ASPECT_STENCIL_BIT)
+                             , ("VK_IMAGE_ASPECT_METADATA_BIT", pure VK_IMAGE_ASPECT_METADATA_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_IMAGE_ASPECT_PLANE_0_BIT", pure (VkImageAspectFlagBits 0x00000010))
+                             , ("VK_IMAGE_ASPECT_PLANE_1_BIT", pure (VkImageAspectFlagBits 0x00000020))
+                             , ("VK_IMAGE_ASPECT_PLANE_2_BIT", pure (VkImageAspectFlagBits 0x00000040))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkImageAspectFlagBits")
+                        v <- step readPrec
+                        pure (VkImageAspectFlagBits v)
+                        )
+                    )
+
+-- | @VK_IMAGE_ASPECT_COLOR_BIT@ specifies the color aspect.
+pattern VK_IMAGE_ASPECT_COLOR_BIT :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_COLOR_BIT = VkImageAspectFlagBits 0x00000001
+
+-- | @VK_IMAGE_ASPECT_DEPTH_BIT@ specifies the depth aspect.
+pattern VK_IMAGE_ASPECT_DEPTH_BIT :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_DEPTH_BIT = VkImageAspectFlagBits 0x00000002
+
+-- | @VK_IMAGE_ASPECT_STENCIL_BIT@ specifies the stencil aspect.
+pattern VK_IMAGE_ASPECT_STENCIL_BIT :: VkImageAspectFlagBits
+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.
+pattern VK_IMAGE_ASPECT_METADATA_BIT :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_METADATA_BIT = VkImageAspectFlagBits 0x00000008
+-- ** VkSparseMemoryBindFlagBits
+
+-- | VkSparseMemoryBindFlagBits - Bitmask specifying usage of a sparse memory
+-- binding operation
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSparseMemoryBindFlags'
+newtype VkSparseMemoryBindFlagBits = VkSparseMemoryBindFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSparseMemoryBindFlagBits where
+  showsPrec _ VK_SPARSE_MEMORY_BIND_METADATA_BIT = showString "VK_SPARSE_MEMORY_BIND_METADATA_BIT"
+  showsPrec p (VkSparseMemoryBindFlagBits x) = showParen (p >= 11) (showString "VkSparseMemoryBindFlagBits " . showsPrec 11 x)
+
+instance Read VkSparseMemoryBindFlagBits where
+  readPrec = parens ( choose [ ("VK_SPARSE_MEMORY_BIND_METADATA_BIT", pure VK_SPARSE_MEMORY_BIND_METADATA_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSparseMemoryBindFlagBits")
+                        v <- step readPrec
+                        pure (VkSparseMemoryBindFlagBits v)
+                        )
+                    )
+
+-- | @VK_SPARSE_MEMORY_BIND_METADATA_BIT@ specifies that the memory being
+-- bound is only for the metadata aspect.
+pattern VK_SPARSE_MEMORY_BIND_METADATA_BIT :: VkSparseMemoryBindFlagBits
+pattern VK_SPARSE_MEMORY_BIND_METADATA_BIT = VkSparseMemoryBindFlagBits 0x00000001
+-- ** VkSparseImageFormatFlagBits
+
+-- | VkSparseImageFormatFlagBits - Bitmask specifying additional information
+-- about a sparse image resource
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSparseImageFormatFlags'
+newtype VkSparseImageFormatFlagBits = VkSparseImageFormatFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSparseImageFormatFlagBits where
+  showsPrec _ VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = showString "VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"
+  showsPrec _ VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = showString "VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"
+  showsPrec _ VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = showString "VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"
+  showsPrec p (VkSparseImageFormatFlagBits x) = showParen (p >= 11) (showString "VkSparseImageFormatFlagBits " . showsPrec 11 x)
+
+instance Read VkSparseImageFormatFlagBits where
+  readPrec = parens ( choose [ ("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT",         pure VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
+                             , ("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT",       pure VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
+                             , ("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT", pure VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSparseImageFormatFlagBits")
+                        v <- step readPrec
+                        pure (VkSparseImageFormatFlagBits v)
+                        )
+                    )
+
+-- | @VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT@ specifies that the image
+-- uses a single mip tail region for all array layers.
+pattern VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT :: VkSparseImageFormatFlagBits
+pattern VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = VkSparseImageFormatFlagBits 0x00000001
+
+-- | @VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT@ specifies that the first
+-- mip level whose dimensions are not integer multiples of the
+-- corresponding dimensions of the sparse image block begins the mip tail
+-- region.
+pattern VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT :: VkSparseImageFormatFlagBits
+pattern VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = VkSparseImageFormatFlagBits 0x00000002
+
+-- | @VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT@ specifies that the
+-- image uses non-standard sparse image block dimensions, and the
+-- @imageGranularity@ values do not match the standard sparse image block
+-- dimensions for the given format.
+pattern VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT :: VkSparseImageFormatFlagBits
+pattern VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = VkSparseImageFormatFlagBits 0x00000004
+-- | vkGetImageSparseMemoryRequirements - Query the memory requirements for a
+-- sparse image
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the image.
+--
+-- -   @image@ is the @VkImage@ object to get the memory requirements for.
+--
+-- -   @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 @VkSparseImageMemoryRequirements@ structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pSparseMemoryRequirements@ is @NULL@, then the number of sparse
+-- memory requirements available is returned in
+-- @pSparseMemoryRequirementCount@. Otherwise,
+-- @pSparseMemoryRequirementCount@ /must/ point to a variable set by the
+-- user to the number of elements in the @pSparseMemoryRequirements@ array,
+-- and on return the variable is overwritten with the number of structures
+-- actually written to @pSparseMemoryRequirements@. If
+-- @pSparseMemoryRequirementCount@ is less than the number of sparse memory
+-- requirements available, at most @pSparseMemoryRequirementCount@
+-- structures will be written.
+--
+-- If the image was not created with @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@
+-- then @pSparseMemoryRequirementCount@ will be set to zero and
+-- @pSparseMemoryRequirements@ will not be written to.
+--
+-- __Note__
+--
+-- It is legal for an implementation to report a larger value in
+-- @VkMemoryRequirements@::@size@ than would be obtained by adding together
+-- memory sizes for all @VkSparseImageMemoryRequirements@ returned by
+-- @vkGetImageSparseMemoryRequirements@. This /may/ occur when the
+-- implementation requires unused padding in the address range describing
+-- the resource.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @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@ @VkSparseImageMemoryRequirements@
+--     structures
+--
+-- -   @image@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkImage',
+-- 'VkSparseImageMemoryRequirements'
+foreign import ccall "vkGetImageSparseMemoryRequirements" vkGetImageSparseMemoryRequirements :: ("device" ::: VkDevice) -> ("image" ::: VkImage) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr VkSparseImageMemoryRequirements) -> IO ()
+-- | vkGetPhysicalDeviceSparseImageFormatProperties - Retrieve properties of
+-- an image format applied to sparse images
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     sparse image capabilities.
+--
+-- -   @format@ is the image format.
+--
+-- -   @type@ is the dimensionality of image.
+--
+-- -   @samples@ is the number of samples per texel as defined in
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'.
+--
+-- -   @usage@ is a bitmask describing the intended usage of the image.
+--
+-- -   @tiling@ is the tiling arrangement of the data elements in memory.
+--
+-- -   @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
+--     'VkSparseImageFormatProperties' structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pProperties@ is @NULL@, then the number of sparse format properties
+-- available is returned in @pPropertyCount@. Otherwise, @pPropertyCount@
+-- /must/ point to a variable set by the user to the number of elements in
+-- the @pProperties@ array, and on return the variable is overwritten with
+-- the number of structures actually written to @pProperties@. If
+-- @pPropertyCount@ is less than the number of sparse format properties
+-- available, at most @pPropertyCount@ structures will be written.
+--
+-- If @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@ is not supported for the given
+-- arguments, @pPropertyCount@ will be set to zero upon return, and no data
+-- will be written to @pProperties@.
+--
+-- Multiple aspects are returned for depth\/stencil images that are
+-- implemented as separate planes by the implementation. The depth and
+-- stencil data planes each have unique @VkSparseImageFormatProperties@
+-- data.
+--
+-- Depth\/stencil images with depth and stencil data interleaved into a
+-- single plane will return a single @VkSparseImageFormatProperties@
+-- structure with the @aspectMask@ set to @VK_IMAGE_ASPECT_DEPTH_BIT@ |
+-- @VK_IMAGE_ASPECT_STENCIL_BIT@.
+--
+-- == 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)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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
+--
+-- -   @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@ @VkSparseImageFormatProperties@
+--     structures
+--
+-- = See Also
+-- #_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.VkPhysicalDevice',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits',
+-- 'VkSparseImageFormatProperties'
+foreign import ccall "vkGetPhysicalDeviceSparseImageFormatProperties" vkGetPhysicalDeviceSparseImageFormatProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("type" ::: VkImageType) -> ("samples" ::: VkSampleCountFlagBits) -> ("usage" ::: VkImageUsageFlags) -> ("tiling" ::: VkImageTiling) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkSparseImageFormatProperties) -> IO ()
+-- | vkQueueBindSparse - Bind device memory to a sparse resource object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @queue@ is the queue that the sparse binding operations will be
+--     submitted to.
+--
+-- -   @bindInfoCount@ is the number of elements in the @pBindInfo@ array.
+--
+-- -   @pBindInfo@ is an array of 'VkBindSparseInfo' structures, each
+--     specifying a sparse binding submission batch.
+--
+-- -   @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>.
+--
+-- = Description
+-- #_description#
+--
+-- @vkQueueBindSparse@ is a
+-- <{html_spec_relative}#devsandqueues-submission queue submission command>,
+-- 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.
+--
+-- Within a batch, a given range of a resource /must/ not be bound more
+-- than once. Across batches, if a range is to be bound to one allocation
+-- and offset and then to another allocation and offset, then the
+-- application /must/ guarantee (usually using semaphores) that the binding
+-- operations are executed in the correct order, as well as to order
+-- binding operations against the execution of command buffer submissions.
+--
+-- As no operation to 'vkQueueBindSparse' causes any pipeline stage to
+-- access memory, synchronization primitives used in this command
+-- effectively only define execution dependencies.
+--
+-- Additional information about fence and semaphore operation is described
+-- in <{html_spec_relative}#synchronization the synchronization chapter>.
+--
+-- == Valid Usage
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ be unsignaled
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ not be associated with any other queue command that
+--     has not yet completed execution on that queue
+--
+-- -   Each element of the @pSignalSemaphores@ member of each element of
+--     @pBindInfo@ /must/ be unsignaled when the semaphore signal operation
+--     it defines is executed on the device
+--
+-- -   When a semaphore unsignal operation defined by any element of the
+--     @pWaitSemaphores@ member of any element of @pBindInfo@ executes on
+--     @queue@, no other queue /must/ be waiting on the same semaphore.
+--
+-- -   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>
+--     previously submitted for execution.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid @VkQueue@ handle
+--
+-- -   If @bindInfoCount@ is not @0@, @pBindInfo@ /must/ be a valid pointer
+--     to an array of @bindInfoCount@ valid @VkBindSparseInfo@ structures
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   The @queue@ /must/ support sparse binding operations
+--
+-- -   Both of @fence@, and @queue@ that are valid handles /must/ have been
+--     created, allocated, or retrieved from the same @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queue@ /must/ be externally synchronized
+--
+-- -   Host access to @pBindInfo@[].pWaitSemaphores[] /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pBindInfo@[].pSignalSemaphores[] /must/ be
+--     externally synchronized
+--
+-- -   Host access to @pBindInfo@[].pBufferBinds[].buffer /must/ be
+--     externally synchronized
+--
+-- -   Host access to @pBindInfo@[].pImageOpaqueBinds[].image /must/ be
+--     externally synchronized
+--
+-- -   Host access to @pBindInfo@[].pImageBinds[].image /must/ be
+--     externally synchronized
+--
+-- -   Host access to @fence@ /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>       |
+-- > +=================+=================+=================+=================+
+-- > | -               | -               | SPARSE_BINDING  | -               |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @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',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageCopy',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageResolve',
+-- 'VkSparseImageMemoryBind'
+data VkOffset3D = VkOffset3D
+  { -- No documentation found for Nested "VkOffset3D" "vkX"
+  vkX :: Int32
+  , -- No documentation found for Nested "VkOffset3D" "vkY"
+  vkY :: Int32
+  , -- No documentation found for Nested "VkOffset3D" "vkZ"
+  vkZ :: Int32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkOffset3D where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkOffset3D <$> peek (ptr `plusPtr` 0)
+                        <*> peek (ptr `plusPtr` 4)
+                        <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkOffset3D))
+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkOffset3D))
+                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkOffset3D))
+-- | VkSparseImageFormatProperties - Structure specifying sparse image format
+-- properties
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkExtent3D',
+-- 'VkImageAspectFlags', 'VkSparseImageFormatFlags',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkSparseImageFormatProperties2',
+-- 'VkSparseImageMemoryRequirements',
+-- 'vkGetPhysicalDeviceSparseImageFormatProperties'
+data VkSparseImageFormatProperties = VkSparseImageFormatProperties
+  { -- No documentation found for Nested "VkSparseImageFormatProperties" "vkAspectMask"
+  vkAspectMask :: VkImageAspectFlags
+  , -- No documentation found for Nested "VkSparseImageFormatProperties" "vkImageGranularity"
+  vkImageGranularity :: VkExtent3D
+  , -- No documentation found for Nested "VkSparseImageFormatProperties" "vkFlags"
+  vkFlags :: VkSparseImageFormatFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseImageFormatProperties where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek ptr = VkSparseImageFormatProperties <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 4)
+                                           <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkSparseImageFormatProperties))
+                *> poke (ptr `plusPtr` 4) (vkImageGranularity (poked :: VkSparseImageFormatProperties))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSparseImageFormatProperties))
+-- | VkSparseImageMemoryRequirements - Structure specifying sparse image
+-- memory requirements
+--
+-- = Members
+-- #_members#
+--
+-- -   @formatProperties.aspectMask@ is the set of aspects of the image
+--     that this sparse memory requirement applies to. This will usually
+--     have a single aspect specified. However, depth\/stencil images /may/
+--     have depth and stencil data interleaved in the same sparse block, in
+--     which case both @VK_IMAGE_ASPECT_DEPTH_BIT@ and
+--     @VK_IMAGE_ASPECT_STENCIL_BIT@ would be present.
+--
+-- -   @formatProperties.imageGranularity@ describes the dimensions of a
+--     single bindable sparse image block in texel units. For aspect
+--     @VK_IMAGE_ASPECT_METADATA_BIT@, all dimensions will be zero. All
+--     metadata is located in the mip tail region.
+--
+-- -   @formatProperties.flags@ is a bitmask of
+--     'VkSparseImageFormatFlagBits':
+--
+--     -   If @VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT@ is set the image
+--         uses a single mip tail region for all array layers.
+--
+--     -   If @VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT@ is set the
+--         dimensions of mip levels /must/ be integer multiples of the
+--         corresponding dimensions of the sparse image block for levels
+--         not located in the mip tail.
+--
+--     -   If @VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT@ is set
+--         the image uses non-standard sparse image block dimensions. The
+--         @formatProperties.imageGranularity@ values do not match the
+--         standard sparse image block dimension corresponding to the
+--         image’s format.
+--
+-- -   @imageMipTailFirstLod@ is the first mip level at which image
+--     subresources are included in the mip tail region.
+--
+-- -   @imageMipTailSize@ is the memory size (in bytes) of the mip tail
+--     region. If @formatProperties.flags@ contains
+--     @VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT@, this is the size of the
+--     whole mip tail, otherwise this is the size of the mip tail of a
+--     single array layer. This value is guaranteed to be a multiple of the
+--     sparse block size in bytes.
+--
+-- -   @imageMipTailOffset@ is the opaque memory offset used with
+--     'VkSparseImageOpaqueMemoryBindInfo' to bind the mip tail region(s).
+--
+-- -   @imageMipTailStride@ is the offset stride between each array-layer’s
+--     mip tail, if @formatProperties.flags@ does not contain
+--     @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"
+  vkFormatProperties :: VkSparseImageFormatProperties
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailFirstLod"
+  vkImageMipTailFirstLod :: Word32
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailSize"
+  vkImageMipTailSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailOffset"
+  vkImageMipTailOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements" "vkImageMipTailStride"
+  vkImageMipTailStride :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseImageMemoryRequirements where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkSparseImageMemoryRequirements <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 20)
+                                             <*> peek (ptr `plusPtr` 24)
+                                             <*> peek (ptr `plusPtr` 32)
+                                             <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFormatProperties (poked :: VkSparseImageMemoryRequirements))
+                *> poke (ptr `plusPtr` 20) (vkImageMipTailFirstLod (poked :: VkSparseImageMemoryRequirements))
+                *> poke (ptr `plusPtr` 24) (vkImageMipTailSize (poked :: VkSparseImageMemoryRequirements))
+                *> poke (ptr `plusPtr` 32) (vkImageMipTailOffset (poked :: VkSparseImageMemoryRequirements))
+                *> 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
+--     'VkImageAspectFlagBits' values
+--
+-- -   @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"
+  vkAspectMask :: VkImageAspectFlags
+  , -- No documentation found for Nested "VkImageSubresource" "vkMipLevel"
+  vkMipLevel :: Word32
+  , -- No documentation found for Nested "VkImageSubresource" "vkArrayLayer"
+  vkArrayLayer :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageSubresource where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkImageSubresource <$> peek (ptr `plusPtr` 0)
+                                <*> peek (ptr `plusPtr` 4)
+                                <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresource))
+                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresource))
+                *> poke (ptr `plusPtr` 8) (vkArrayLayer (poked :: VkImageSubresource))
+-- | 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
+-- @VK_SPARSE_MEMORY_BIND_METADATA_BIT@, the binding range /must/ be within
+-- the mip tail region of the metadata aspect. This metadata region is
+-- defined by:
+--
+-- []
+--     metadataRegion = [base, base + @imageMipTailSize@)
+--
+-- []
+--     base = @imageMipTailOffset@ + @imageMipTailStride@ × n
+--
+-- and @imageMipTailOffset@, @imageMipTailSize@, and @imageMipTailStride@
+-- values are from the 'VkSparseImageMemoryRequirements' corresponding to
+-- the metadata aspect of the image, and n is a valid array layer index for
+-- the image,
+--
+-- @imageMipTailStride@ is considered to be zero for aspects where
+-- @VkSparseImageMemoryRequirements@::@formatProperties.flags@ contains
+-- @VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT@.
+--
+-- If @flags@ does not contain @VK_SPARSE_MEMORY_BIND_METADATA_BIT@, the
+-- binding range /must/ be within the range
+-- [0,'Graphics.Vulkan.Core10.MemoryManagement.VkMemoryRequirements'::@size@).
+--
+-- == Valid Usage
+--
+-- -   If @memory@ is not
+--     '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>
+--
+-- -   If @memory@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @memory@ /must/
+--     not have been created with a memory type that reports
+--     @VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT@ bit set
+--
+-- -   @size@ /must/ be greater than @0@
+--
+-- -   @resourceOffset@ /must/ be less than the size of the resource
+--
+-- -   @size@ /must/ be less than or equal to the size of the resource
+--     minus @resourceOffset@
+--
+-- -   @memoryOffset@ /must/ be less than the size of @memory@
+--
+-- -   @size@ /must/ be less than or equal to the size of @memory@ minus
+--     @memoryOffset@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   If @memory@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @memory@ /must/
+--     be a valid @VkDeviceMemory@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     '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"
+  vkResourceOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkSparseMemoryBind" "vkSize"
+  vkSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkSparseMemoryBind" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  , -- No documentation found for Nested "VkSparseMemoryBind" "vkMemoryOffset"
+  vkMemoryOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkSparseMemoryBind" "vkFlags"
+  vkFlags :: VkSparseMemoryBindFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseMemoryBind where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkSparseMemoryBind <$> peek (ptr `plusPtr` 0)
+                                <*> peek (ptr `plusPtr` 8)
+                                <*> peek (ptr `plusPtr` 16)
+                                <*> peek (ptr `plusPtr` 24)
+                                <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkResourceOffset (poked :: VkSparseMemoryBind))
+                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSparseMemoryBind))
+                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkSparseMemoryBind))
+                *> poke (ptr `plusPtr` 24) (vkMemoryOffset (poked :: VkSparseMemoryBind))
+                *> 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>
+--     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>
+--
+-- -   @subresource@ /must/ be a valid image subresource for @image@ (see
+--     <{html_spec_relative}#resources-image-views {html_spec_relative}#resources-image-views>)
+--
+-- -   @offset.x@ /must/ be a multiple of the sparse image block width
+--     (@VkSparseImageFormatProperties@::@imageGranularity.width@) of the
+--     image
+--
+-- -   @extent.width@ /must/ either be a multiple of the sparse image block
+--     width of the image, or else (@extent.width@ + @offset.x@) /must/
+--     equal the width of the image subresource
+--
+-- -   @offset.y@ /must/ be a multiple of the sparse image block height
+--     (@VkSparseImageFormatProperties@::@imageGranularity.height@) of the
+--     image
+--
+-- -   @extent.height@ /must/ either be a multiple of the sparse image
+--     block height of the image, or else (@extent.height@ + @offset.y@)
+--     /must/ equal the height of the image subresource
+--
+-- -   @offset.z@ /must/ be a multiple of the sparse image block depth
+--     (@VkSparseImageFormatProperties@::@imageGranularity.depth@) of the
+--     image
+--
+-- -   @extent.depth@ /must/ either be a multiple of the sparse image block
+--     depth of the image, or else (@extent.depth@ + @offset.z@) /must/
+--     equal the depth of the image subresource
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @subresource@ /must/ be a valid @VkImageSubresource@ structure
+--
+-- -   If @memory@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @memory@ /must/
+--     be a valid @VkDeviceMemory@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     '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"
+  vkSubresource :: VkImageSubresource
+  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkOffset"
+  vkOffset :: VkOffset3D
+  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkExtent"
+  vkExtent :: VkExtent3D
+  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkMemoryOffset"
+  vkMemoryOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkSparseImageMemoryBind" "vkFlags"
+  vkFlags :: VkSparseMemoryBindFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseImageMemoryBind where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkSparseImageMemoryBind <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 12)
+                                     <*> peek (ptr `plusPtr` 24)
+                                     <*> peek (ptr `plusPtr` 40)
+                                     <*> peek (ptr `plusPtr` 48)
+                                     <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSubresource (poked :: VkSparseImageMemoryBind))
+                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkSparseImageMemoryBind))
+                *> poke (ptr `plusPtr` 24) (vkExtent (poked :: VkSparseImageMemoryBind))
+                *> poke (ptr `plusPtr` 40) (vkMemory (poked :: VkSparseImageMemoryBind))
+                *> poke (ptr `plusPtr` 48) (vkMemoryOffset (poked :: VkSparseImageMemoryBind))
+                *> poke (ptr `plusPtr` 56) (vkFlags (poked :: VkSparseImageMemoryBind))
+-- | VkSparseBufferMemoryBindInfo - Structure specifying a sparse buffer
+-- memory bind operation
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
+--     @VkSparseMemoryBind@ structures
+--
+-- -   @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"
+  vkBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkSparseBufferMemoryBindInfo" "vkBindCount"
+  vkBindCount :: Word32
+  , -- No documentation found for Nested "VkSparseBufferMemoryBindInfo" "vkPBinds"
+  vkPBinds :: Ptr VkSparseMemoryBind
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseBufferMemoryBindInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSparseBufferMemoryBindInfo <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkSparseBufferMemoryBindInfo))
+                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseBufferMemoryBindInfo))
+                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseBufferMemoryBindInfo))
+-- | VkSparseImageOpaqueMemoryBindInfo - Structure specifying sparse image
+-- opaque memory bind info
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If the @flags@ member of any element of @pBinds@ contains
+--     @VK_SPARSE_MEMORY_BIND_METADATA_BIT@, the binding range defined
+--     /must/ be within the mip tail region of the metadata aspect of
+--     @image@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
+--     @VkSparseMemoryBind@ structures
+--
+-- -   @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"
+  vkImage :: VkImage
+  , -- No documentation found for Nested "VkSparseImageOpaqueMemoryBindInfo" "vkBindCount"
+  vkBindCount :: Word32
+  , -- No documentation found for Nested "VkSparseImageOpaqueMemoryBindInfo" "vkPBinds"
+  vkPBinds :: Ptr VkSparseMemoryBind
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseImageOpaqueMemoryBindInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSparseImageOpaqueMemoryBindInfo <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageOpaqueMemoryBindInfo))
+                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageOpaqueMemoryBindInfo))
+                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageOpaqueMemoryBindInfo))
+-- | VkSparseImageMemoryBindInfo - Structure specifying sparse image memory
+-- bind info
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   The @subresource.mipLevel@ member of each element of @pBinds@ /must/
+--     be less than the @mipLevels@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- -   The @subresource.arrayLayer@ member of each element of @pBinds@
+--     /must/ be less than the @arrayLayers@ specified in
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo' when @image@ was
+--     created
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @image@ /must/ be a valid @VkImage@ handle
+--
+-- -   @pBinds@ /must/ be a valid pointer to an array of @bindCount@ valid
+--     @VkSparseImageMemoryBind@ structures
+--
+-- -   @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"
+  vkImage :: VkImage
+  , -- No documentation found for Nested "VkSparseImageMemoryBindInfo" "vkBindCount"
+  vkBindCount :: Word32
+  , -- No documentation found for Nested "VkSparseImageMemoryBindInfo" "vkPBinds"
+  vkPBinds :: Ptr VkSparseImageMemoryBind
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseImageMemoryBindInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSparseImageMemoryBindInfo <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageMemoryBindInfo))
+                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageMemoryBindInfo))
+                *> 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@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group.VkDeviceGroupBindSparseInfo'
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid
+--     @VkSemaphore@ handles
+--
+-- -   If @bufferBindCount@ is not @0@, @pBufferBinds@ /must/ be a valid
+--     pointer to an array of @bufferBindCount@ valid
+--     @VkSparseBufferMemoryBindInfo@ structures
+--
+-- -   If @imageOpaqueBindCount@ is not @0@, @pImageOpaqueBinds@ /must/ be
+--     a valid pointer to an array of @imageOpaqueBindCount@ valid
+--     @VkSparseImageOpaqueMemoryBindInfo@ structures
+--
+-- -   If @imageBindCount@ is not @0@, @pImageBinds@ /must/ be a valid
+--     pointer to an array of @imageBindCount@ valid
+--     @VkSparseImageMemoryBindInfo@ structures
+--
+-- -   If @signalSemaphoreCount@ is not @0@, @pSignalSemaphores@ /must/ be
+--     a valid pointer to an array of @signalSemaphoreCount@ valid
+--     @VkSemaphore@ handles
+--
+-- -   Both of the elements of @pSignalSemaphores@, and the elements of
+--     @pWaitSemaphores@ that are valid handles /must/ have been created,
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkWaitSemaphoreCount"
+  vkWaitSemaphoreCount :: Word32
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkPWaitSemaphores"
+  vkPWaitSemaphores :: Ptr VkSemaphore
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkBufferBindCount"
+  vkBufferBindCount :: Word32
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkPBufferBinds"
+  vkPBufferBinds :: Ptr VkSparseBufferMemoryBindInfo
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkImageOpaqueBindCount"
+  vkImageOpaqueBindCount :: Word32
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkPImageOpaqueBinds"
+  vkPImageOpaqueBinds :: Ptr VkSparseImageOpaqueMemoryBindInfo
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkImageBindCount"
+  vkImageBindCount :: Word32
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkPImageBinds"
+  vkPImageBinds :: Ptr VkSparseImageMemoryBindInfo
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkSignalSemaphoreCount"
+  vkSignalSemaphoreCount :: Word32
+  , -- No documentation found for Nested "VkBindSparseInfo" "vkPSignalSemaphores"
+  vkPSignalSemaphores :: Ptr VkSemaphore
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBindSparseInfo where
+  sizeOf ~_ = 96
+  alignment ~_ = 8
+  peek ptr = VkBindSparseInfo <$> 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)
+                              <*> peek (ptr `plusPtr` 64)
+                              <*> peek (ptr `plusPtr` 72)
+                              <*> peek (ptr `plusPtr` 80)
+                              <*> peek (ptr `plusPtr` 88)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 32) (vkBufferBindCount (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 40) (vkPBufferBinds (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 48) (vkImageOpaqueBindCount (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 56) (vkPImageOpaqueBinds (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 64) (vkImageBindCount (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 72) (vkPImageBinds (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 80) (vkSignalSemaphoreCount (poked :: VkBindSparseInfo))
+                *> poke (ptr `plusPtr` 88) (vkPSignalSemaphores (poked :: VkBindSparseInfo))
+-- | 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',
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.VkImageSubresourceLayers',
+-- 'Graphics.Vulkan.Core10.ImageView.VkImageSubresourceRange',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2.VkInputAttachmentAspectReference',
+-- 'VkSparseImageFormatProperties'
+type VkImageAspectFlags = VkImageAspectFlagBits
+-- | 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'
+type VkSparseMemoryBindFlags = VkSparseMemoryBindFlagBits
+-- | 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core10/Version.hs
@@ -0,0 +1,119 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language ViewPatterns #-}
+
+module Graphics.Vulkan.Core10.Version
+  ( pattern VK_HEADER_VERSION
+  , pattern VK_MAKE_VERSION
+  , pattern VK_API_VERSION_1_0
+  , pattern VK_API_VERSION_1_1
+  , _VK_VERSION_MAJOR
+  , _VK_VERSION_MINOR
+  , _VK_VERSION_PATCH
+  ) where
+
+import Data.Bits
+  ( (.&.)
+  , (.|.)
+  , shiftL
+  , shiftR
+  )
+import Data.Word
+  ( Word32
+  )
+
+
+
+
+
+-- | 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
+pattern VK_HEADER_VERSION = 73
+-- | VK_MAKE_VERSION - Construct an API version number
+--
+-- = Description
+-- #_description#
+--
+-- -   @major@ is the major version number.
+--
+-- -   @minor@ is the minor version number.
+--
+-- -   @patch@ is the patch version number.
+--
+-- This macro /can/ be used when constructing the
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkApplicationInfo'::@apiVersion@
+-- parameter passed to
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkCreateInstance'.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkApplicationInfo',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkCreateInstance'
+pattern VK_MAKE_VERSION :: Word32 -> Word32 -> Word32 -> Word32
+pattern VK_MAKE_VERSION major minor patch <-
+  (\v -> (_VK_VERSION_MAJOR v, _VK_VERSION_MINOR v, _VK_VERSION_PATCH v) -> (major, minor, patch))
+  where VK_MAKE_VERSION major minor patch = major `shiftL` 22 .|. minor `shiftL` 12 .|. patch
+
+-- | 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'
+pattern VK_API_VERSION_1_0 :: Word32
+pattern VK_API_VERSION_1_0 = VK_MAKE_VERSION 1 0 0
+
+-- | 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'
+pattern VK_API_VERSION_1_1 :: Word32
+pattern VK_API_VERSION_1_1 = VK_MAKE_VERSION 1 1 0
+
+-- | VK_VERSION_MAJOR - Extract API major version number
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- No cross-references are available
+_VK_VERSION_MAJOR :: Word32 -> Word32
+_VK_VERSION_MAJOR v = v `shiftR` 22
+
+-- | VK_VERSION_MINOR - Extract API minor version number
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- No cross-references are available
+_VK_VERSION_MINOR :: Word32 -> Word32
+_VK_VERSION_MINOR v = v `shiftR` 12 .&. 0x3ff
+
+-- No documentation found for TopLevel "VK_VERSION_PATCh"
+_VK_VERSION_PATCH :: Word32 -> Word32
+_VK_VERSION_PATCH v = v .&. 0xfff
diff --git a/src/Graphics/Vulkan/Core11.hs b/src/Graphics/Vulkan/Core11.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11.hs
@@ -0,0 +1,61 @@
+{-# language Strict #-}
+{-# language CPP #-}
+
+
+module Graphics.Vulkan.Core11
+  (     module Graphics.Vulkan.Core11.DeviceInitialization
+  , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers
+  , module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3
+  , module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_shader_draw_parameters
+  ) where
+
+
+import Graphics.Vulkan.Core11.DeviceInitialization
+import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers
+import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_shader_draw_parameters
+
+
+
diff --git a/src/Graphics/Vulkan/Core11/DeviceInitialization.hs b/src/Graphics/Vulkan/Core11/DeviceInitialization.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/DeviceInitialization.hs
@@ -0,0 +1,54 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Core11.DeviceInitialization
+  ( vkEnumerateInstanceVersion
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+
+
+-- | vkEnumerateInstanceVersion - Query instance-level version before
+-- 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>
+--     section.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @pApiVersion@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_protected_memory.hs
@@ -0,0 +1,326 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory
+  ( pattern VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2
+  , pattern VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT
+  , pattern VK_QUEUE_PROTECTED_BIT
+  , pattern VK_MEMORY_PROPERTY_PROTECTED_BIT
+  , pattern VK_BUFFER_CREATE_PROTECTED_BIT
+  , pattern VK_IMAGE_CREATE_PROTECTED_BIT
+  , pattern VK_COMMAND_POOL_CREATE_PROTECTED_BIT
+  , vkGetDeviceQueue2
+  , VkProtectedSubmitInfo(..)
+  , VkPhysicalDeviceProtectedMemoryFeatures(..)
+  , VkPhysicalDeviceProtectedMemoryProperties(..)
+  , VkDeviceQueueInfo2(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Buffer
+  ( VkBufferCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.CommandPool
+  ( VkCommandPoolCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Device
+  ( VkDeviceQueueCreateFlags
+  , VkDeviceQueueCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  , VkImageCreateFlagBits(..)
+  , VkMemoryPropertyFlagBits(..)
+  , VkQueueFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkQueue
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO"
+pattern VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO = VkStructureType 1000145000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES = VkStructureType 1000145001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES = VkStructureType 1000145002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2"
+pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2 = VkStructureType 1000145003
+-- | @VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT@ specifies that the device queue
+-- is a protected-capable queue. If the protected memory feature is not
+-- enabled, the @VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT@ bit of @flags@
+-- /must/ not be set.
+pattern VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT :: VkDeviceQueueCreateFlagBits
+pattern VK_DEVICE_QUEUE_CREATE_PROTECTED_BIT = VkDeviceQueueCreateFlagBits 0x00000001
+-- No documentation found for Nested "VkQueueFlagBits" "VK_QUEUE_PROTECTED_BIT"
+pattern VK_QUEUE_PROTECTED_BIT :: VkQueueFlagBits
+pattern VK_QUEUE_PROTECTED_BIT = VkQueueFlagBits 0x00000010
+-- No documentation found for Nested "VkMemoryPropertyFlagBits" "VK_MEMORY_PROPERTY_PROTECTED_BIT"
+pattern VK_MEMORY_PROPERTY_PROTECTED_BIT :: VkMemoryPropertyFlagBits
+pattern VK_MEMORY_PROPERTY_PROTECTED_BIT = VkMemoryPropertyFlagBits 0x00000020
+-- No documentation found for Nested "VkBufferCreateFlagBits" "VK_BUFFER_CREATE_PROTECTED_BIT"
+pattern VK_BUFFER_CREATE_PROTECTED_BIT :: VkBufferCreateFlagBits
+pattern VK_BUFFER_CREATE_PROTECTED_BIT = VkBufferCreateFlagBits 0x00000008
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_PROTECTED_BIT"
+pattern VK_IMAGE_CREATE_PROTECTED_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_PROTECTED_BIT = VkImageCreateFlagBits 0x00000800
+-- No documentation found for Nested "VkCommandPoolCreateFlagBits" "VK_COMMAND_POOL_CREATE_PROTECTED_BIT"
+pattern VK_COMMAND_POOL_CREATE_PROTECTED_BIT :: VkCommandPoolCreateFlagBits
+pattern VK_COMMAND_POOL_CREATE_PROTECTED_BIT = VkCommandPoolCreateFlagBits 0x00000004
+-- | vkGetDeviceQueue2 - Get a queue handle from a device
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the queue.
+--
+-- -   @pQueueInfo@ points to an instance of the 'VkDeviceQueueInfo2'
+--     structure, describing the parameters used to create the device
+--     queue.
+--
+-- -   @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
+--
+-- -   @pQueueInfo@ /must/ be a valid pointer to a valid
+--     @VkDeviceQueueInfo2@ structure
+--
+-- -   @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'
+foreign import ccall "vkGetDeviceQueue2" vkGetDeviceQueue2 :: ("device" ::: VkDevice) -> ("pQueueInfo" ::: Ptr VkDeviceQueueInfo2) -> ("pQueue" ::: Ptr VkQueue) -> IO ()
+-- | VkProtectedSubmitInfo - Structure indicating whether the submission is
+-- protected
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If the protected memory feature is not enabled, @protectedSubmit@
+--     /must/ not be @VK_TRUE@.
+--
+-- -   If @protectedSubmit@ is @VK_TRUE@, then each element of the
+--     @pCommandBuffers@ array /must/ be a protected command buffer.
+--
+-- -   If @protectedSubmit@ is @VK_FALSE@, then each element of the
+--     @pCommandBuffers@ array /must/ be an unprotected command buffer.
+--
+-- -   If the @VkSubmitInfo@::@pNext@ chain does not include a
+--     @VkProtectedSubmitInfo@ structure, then each element of the command
+--     buffer of the @pCommandBuffers@ array /must/ be an unprotected
+--     command buffer.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkProtectedSubmitInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkProtectedSubmitInfo" "vkProtectedSubmit"
+  vkProtectedSubmit :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkProtectedSubmitInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkProtectedSubmitInfo <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkProtectedSubmitInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkProtectedSubmitInfo))
+                *> poke (ptr `plusPtr` 16) (vkProtectedSubmit (poked :: VkProtectedSubmitInfo))
+-- | VkPhysicalDeviceProtectedMemoryFeatures - Structure describing protected
+-- memory features that can be supported by an implementation
+--
+-- = Description
+-- #_description#
+--
+-- If the @VkPhysicalDeviceProtectedMemoryFeatures@ structure is included
+-- in the @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
+-- it is filled with a value indicating whether the feature is supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryFeatures" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryFeatures" "vkProtectedMemory"
+  vkProtectedMemory :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceProtectedMemoryFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceProtectedMemoryFeatures <$> peek (ptr `plusPtr` 0)
+                                                     <*> peek (ptr `plusPtr` 8)
+                                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceProtectedMemoryFeatures))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceProtectedMemoryFeatures))
+                *> poke (ptr `plusPtr` 16) (vkProtectedMemory (poked :: VkPhysicalDeviceProtectedMemoryFeatures))
+-- | VkPhysicalDeviceProtectedMemoryProperties - Structure describing
+-- protected memory properties that can be supported by an implementation
+--
+-- = Description
+-- #_description#
+--
+-- If the @VkPhysicalDeviceProtectedMemoryProperties@ structure is included
+-- in the @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2',
+-- it is filled with a value indicating the implementation-dependent
+-- behavior.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceProtectedMemoryProperties" "vkProtectedNoFault"
+  vkProtectedNoFault :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceProtectedMemoryProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceProtectedMemoryProperties <$> peek (ptr `plusPtr` 0)
+                                                       <*> peek (ptr `plusPtr` 8)
+                                                       <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceProtectedMemoryProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceProtectedMemoryProperties))
+                *> poke (ptr `plusPtr` 16) (vkProtectedNoFault (poked :: VkPhysicalDeviceProtectedMemoryProperties))
+-- | VkDeviceQueueInfo2 - Structure specifying the parameters used for device
+-- 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
+-- @VkDeviceQueueCreateInfo@ instance. If no matching @flags@ were
+-- specified at device creation time then @pQueue@ will return
+-- @VK_NULL_HANDLE@.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be one of the queue family indices
+--     specified when @device@ was created, via the
+--     @VkDeviceQueueCreateInfo@ structure
+--
+-- -   @queueIndex@ /must/ be less than the number of queues created for
+--     the specified queue family index and @VkDeviceQueueCreateFlags@
+--     member @flags@ equal to this @flags@ value when @device@ was
+--     created, via the @queueCount@ member of the
+--     @VkDeviceQueueCreateInfo@ structure
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Device.VkDeviceQueueCreateFlagBits' values
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkFlags"
+  vkFlags :: VkDeviceQueueCreateFlags
+  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkQueueFamilyIndex"
+  vkQueueFamilyIndex :: Word32
+  , -- No documentation found for Nested "VkDeviceQueueInfo2" "vkQueueIndex"
+  vkQueueIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceQueueInfo2 where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDeviceQueueInfo2 <$> 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 :: VkDeviceQueueInfo2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceQueueInfo2))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceQueueInfo2))
+                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkDeviceQueueInfo2))
+                *> poke (ptr `plusPtr` 24) (vkQueueIndex (poked :: VkDeviceQueueInfo2))
diff --git a/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_subgroup.hs b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_subgroup.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_From_VK_KHR_subgroup.hs
@@ -0,0 +1,254 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup
+  ( VkSubgroupFeatureFlagBits(..)
+  , pattern VK_SUBGROUP_FEATURE_BASIC_BIT
+  , pattern VK_SUBGROUP_FEATURE_VOTE_BIT
+  , pattern VK_SUBGROUP_FEATURE_ARITHMETIC_BIT
+  , pattern VK_SUBGROUP_FEATURE_BALLOT_BIT
+  , pattern VK_SUBGROUP_FEATURE_SHUFFLE_BIT
+  , pattern VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT
+  , pattern VK_SUBGROUP_FEATURE_CLUSTERED_BIT
+  , pattern VK_SUBGROUP_FEATURE_QUAD_BIT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES
+  , VkPhysicalDeviceSubgroupProperties(..)
+  , VkSubgroupFeatureFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.PipelineLayout
+  ( VkShaderStageFlags
+  )
+
+
+-- ** VkSubgroupFeatureFlagBits
+
+-- | VkSubgroupFeatureFlagBits - Enum describing what subgroup operations are
+-- supported
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSubgroupFeatureFlags'
+newtype VkSubgroupFeatureFlagBits = VkSubgroupFeatureFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSubgroupFeatureFlagBits where
+  showsPrec _ VK_SUBGROUP_FEATURE_BASIC_BIT = showString "VK_SUBGROUP_FEATURE_BASIC_BIT"
+  showsPrec _ VK_SUBGROUP_FEATURE_VOTE_BIT = showString "VK_SUBGROUP_FEATURE_VOTE_BIT"
+  showsPrec _ VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = showString "VK_SUBGROUP_FEATURE_ARITHMETIC_BIT"
+  showsPrec _ VK_SUBGROUP_FEATURE_BALLOT_BIT = showString "VK_SUBGROUP_FEATURE_BALLOT_BIT"
+  showsPrec _ VK_SUBGROUP_FEATURE_SHUFFLE_BIT = showString "VK_SUBGROUP_FEATURE_SHUFFLE_BIT"
+  showsPrec _ VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = showString "VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT"
+  showsPrec _ VK_SUBGROUP_FEATURE_CLUSTERED_BIT = showString "VK_SUBGROUP_FEATURE_CLUSTERED_BIT"
+  showsPrec _ VK_SUBGROUP_FEATURE_QUAD_BIT = showString "VK_SUBGROUP_FEATURE_QUAD_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkSubgroupFeatureFlagBits 0x00000100) = showString "VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"
+  showsPrec p (VkSubgroupFeatureFlagBits x) = showParen (p >= 11) (showString "VkSubgroupFeatureFlagBits " . showsPrec 11 x)
+
+instance Read VkSubgroupFeatureFlagBits where
+  readPrec = parens ( choose [ ("VK_SUBGROUP_FEATURE_BASIC_BIT",            pure VK_SUBGROUP_FEATURE_BASIC_BIT)
+                             , ("VK_SUBGROUP_FEATURE_VOTE_BIT",             pure VK_SUBGROUP_FEATURE_VOTE_BIT)
+                             , ("VK_SUBGROUP_FEATURE_ARITHMETIC_BIT",       pure VK_SUBGROUP_FEATURE_ARITHMETIC_BIT)
+                             , ("VK_SUBGROUP_FEATURE_BALLOT_BIT",           pure VK_SUBGROUP_FEATURE_BALLOT_BIT)
+                             , ("VK_SUBGROUP_FEATURE_SHUFFLE_BIT",          pure VK_SUBGROUP_FEATURE_SHUFFLE_BIT)
+                             , ("VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT", pure VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT)
+                             , ("VK_SUBGROUP_FEATURE_CLUSTERED_BIT",        pure VK_SUBGROUP_FEATURE_CLUSTERED_BIT)
+                             , ("VK_SUBGROUP_FEATURE_QUAD_BIT",             pure VK_SUBGROUP_FEATURE_QUAD_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV", pure (VkSubgroupFeatureFlagBits 0x00000100))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSubgroupFeatureFlagBits")
+                        v <- step readPrec
+                        pure (VkSubgroupFeatureFlagBits v)
+                        )
+                    )
+
+-- | @VK_SUBGROUP_FEATURE_BASIC_BIT@ specifies the device will accept SPIR-V
+-- shader modules that contain the @GroupNonUniform@ capability.
+pattern VK_SUBGROUP_FEATURE_BASIC_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_BASIC_BIT = VkSubgroupFeatureFlagBits 0x00000001
+
+-- | @VK_SUBGROUP_FEATURE_VOTE_BIT@ specifies the device will accept SPIR-V
+-- shader modules that contain the @GroupNonUniformVote@ capability.
+pattern VK_SUBGROUP_FEATURE_VOTE_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_VOTE_BIT = VkSubgroupFeatureFlagBits 0x00000002
+
+-- | @VK_SUBGROUP_FEATURE_ARITHMETIC_BIT@ specifies the device will accept
+-- SPIR-V shader modules that contain the @GroupNonUniformArithmetic@
+-- capability.
+pattern VK_SUBGROUP_FEATURE_ARITHMETIC_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_ARITHMETIC_BIT = VkSubgroupFeatureFlagBits 0x00000004
+
+-- | @VK_SUBGROUP_FEATURE_BALLOT_BIT@ specifies the device will accept SPIR-V
+-- shader modules that contain the @GroupNonUniformBallot@ capability.
+pattern VK_SUBGROUP_FEATURE_BALLOT_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_BALLOT_BIT = VkSubgroupFeatureFlagBits 0x00000008
+
+-- | @VK_SUBGROUP_FEATURE_SHUFFLE_BIT@ specifies the device will accept
+-- SPIR-V shader modules that contain the @GroupNonUniformShuffle@
+-- capability.
+pattern VK_SUBGROUP_FEATURE_SHUFFLE_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_SHUFFLE_BIT = VkSubgroupFeatureFlagBits 0x00000010
+
+-- | @VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT@ specifies the device will
+-- accept SPIR-V shader modules that contain the
+-- @GroupNonUniformShuffleRelative@ capability.
+pattern VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT = VkSubgroupFeatureFlagBits 0x00000020
+
+-- | @VK_SUBGROUP_FEATURE_CLUSTERED_BIT@ specifies the device will accept
+-- SPIR-V shader modules that contain the @GroupNonUniformClustered@
+-- capability.
+pattern VK_SUBGROUP_FEATURE_CLUSTERED_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_CLUSTERED_BIT = VkSubgroupFeatureFlagBits 0x00000040
+
+-- | @VK_SUBGROUP_FEATURE_QUAD_BIT@ specifies the device will accept SPIR-V
+-- shader modules that contain the @GroupNonUniformQuad@ capability.
+pattern VK_SUBGROUP_FEATURE_QUAD_BIT :: VkSubgroupFeatureFlagBits
+pattern VK_SUBGROUP_FEATURE_QUAD_BIT = VkSubgroupFeatureFlagBits 0x00000080
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES = VkStructureType 1000094000
+-- | VkPhysicalDeviceSubgroupProperties - Structure describing subgroup
+-- 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.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @subgroupSize@ is the number of invocations in each subgroup. This
+--     will match any
+--     <{html_spec_relative}#interfaces-builtin-variables-sgs SubgroupSize>
+--     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@.
+--
+-- -   @supportedStages@ is a bitfield of
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' describing
+--     the shader stages that subgroup operations are supported in.
+--     @supportedStages@ will have the @VK_SHADER_STAGE_COMPUTE_BIT@ bit
+--     set if any of any of the physical device’s queues support
+--     @VK_QUEUE_COMPUTE_BIT@.
+--
+-- -   @supportedOperations@ is a bitmask of 'VkSubgroupFeatureFlagBits'
+--     specifying the sets of subgroup operations supported on this device.
+--     @supportedOperations@ will have the @VK_SUBGROUP_FEATURE_BASIC_BIT@
+--     bit set if any of the physical device’s queues support
+--     @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>
+--     are available in all stages, or are restricted to fragment and
+--     compute stages.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES@
+--
+-- If the @VkPhysicalDeviceSubgroupProperties@ 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
+-- #_see_also#
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.PipelineLayout.VkShaderStageFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType', 'VkSubgroupFeatureFlags'
+data VkPhysicalDeviceSubgroupProperties = VkPhysicalDeviceSubgroupProperties
+  { -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSubgroupSize"
+  vkSubgroupSize :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSupportedStages"
+  vkSupportedStages :: VkShaderStageFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkSupportedOperations"
+  vkSupportedOperations :: VkSubgroupFeatureFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceSubgroupProperties" "vkQuadOperationsInAllStages"
+  vkQuadOperationsInAllStages :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceSubgroupProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceSubgroupProperties <$> peek (ptr `plusPtr` 0)
+                                                <*> peek (ptr `plusPtr` 8)
+                                                <*> peek (ptr `plusPtr` 16)
+                                                <*> peek (ptr `plusPtr` 20)
+                                                <*> peek (ptr `plusPtr` 24)
+                                                <*> peek (ptr `plusPtr` 28)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceSubgroupProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceSubgroupProperties))
+                *> poke (ptr `plusPtr` 16) (vkSubgroupSize (poked :: VkPhysicalDeviceSubgroupProperties))
+                *> poke (ptr `plusPtr` 20) (vkSupportedStages (poked :: VkPhysicalDeviceSubgroupProperties))
+                *> poke (ptr `plusPtr` 24) (vkSupportedOperations (poked :: VkPhysicalDeviceSubgroupProperties))
+                *> poke (ptr `plusPtr` 28) (vkQuadOperationsInAllStages (poked :: VkPhysicalDeviceSubgroupProperties))
+-- | 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_16bit_storage.hs
@@ -0,0 +1,62 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES
+  , VkPhysicalDevice16BitStorageFeatures(..)
+  ) where
+
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES = VkStructureType 1000083000
+-- | VkPhysicalDevice16BitStorageFeatures - Structure describing features
+-- supported by VK_KHR_16bit_storage
+data VkPhysicalDevice16BitStorageFeatures = VkPhysicalDevice16BitStorageFeatures
+  { -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkStorageBuffer16BitAccess"
+  vkStorageBuffer16BitAccess :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkUniformAndStorageBuffer16BitAccess"
+  vkUniformAndStorageBuffer16BitAccess :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkStoragePushConstant16"
+  vkStoragePushConstant16 :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDevice16BitStorageFeatures" "vkStorageInputOutput16"
+  vkStorageInputOutput16 :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDevice16BitStorageFeatures where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDevice16BitStorageFeatures <$> peek (ptr `plusPtr` 0)
+                                                  <*> peek (ptr `plusPtr` 8)
+                                                  <*> peek (ptr `plusPtr` 16)
+                                                  <*> peek (ptr `plusPtr` 20)
+                                                  <*> peek (ptr `plusPtr` 24)
+                                                  <*> peek (ptr `plusPtr` 28)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDevice16BitStorageFeatures))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDevice16BitStorageFeatures))
+                *> poke (ptr `plusPtr` 16) (vkStorageBuffer16BitAccess (poked :: VkPhysicalDevice16BitStorageFeatures))
+                *> poke (ptr `plusPtr` 20) (vkUniformAndStorageBuffer16BitAccess (poked :: VkPhysicalDevice16BitStorageFeatures))
+                *> poke (ptr `plusPtr` 24) (vkStoragePushConstant16 (poked :: VkPhysicalDevice16BitStorageFeatures))
+                *> poke (ptr `plusPtr` 28) (vkStorageInputOutput16 (poked :: VkPhysicalDevice16BitStorageFeatures))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_bind_memory2.hs
@@ -0,0 +1,122 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2
+  ( pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
+  , pattern VK_IMAGE_CREATE_ALIAS_BIT
+  , vkBindBufferMemory2
+  , vkBindImageMemory2
+  , VkBindBufferMemoryInfo(..)
+  , VkBindImageMemoryInfo(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkDevice
+  , VkImageCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkImage
+  , VkBuffer
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO"
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO = VkStructureType 1000157000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO"
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO = VkStructureType 1000157001
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_ALIAS_BIT"
+pattern VK_IMAGE_CREATE_ALIAS_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_ALIAS_BIT = VkImageCreateFlagBits 0x00000400
+-- | vkBindBufferMemory2 - Bind device memory to buffer objects
+foreign import ccall "vkBindBufferMemory2" vkBindBufferMemory2 :: ("device" ::: VkDevice) -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr VkBindBufferMemoryInfo) -> IO VkResult
+-- | vkBindImageMemory2 - Bind device memory to image objects
+foreign import ccall "vkBindImageMemory2" vkBindImageMemory2 :: ("device" ::: VkDevice) -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr VkBindImageMemoryInfo) -> IO VkResult
+-- | VkBindBufferMemoryInfo - Structure specifying how to bind a buffer to
+-- memory
+data VkBindBufferMemoryInfo = VkBindBufferMemoryInfo
+  { -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkBuffer"
+  vkBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  , -- No documentation found for Nested "VkBindBufferMemoryInfo" "vkMemoryOffset"
+  vkMemoryOffset :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBindBufferMemoryInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkBindBufferMemoryInfo <$> peek (ptr `plusPtr` 0)
+                                    <*> peek (ptr `plusPtr` 8)
+                                    <*> peek (ptr `plusPtr` 16)
+                                    <*> peek (ptr `plusPtr` 24)
+                                    <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindBufferMemoryInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindBufferMemoryInfo))
+                *> poke (ptr `plusPtr` 16) (vkBuffer (poked :: VkBindBufferMemoryInfo))
+                *> poke (ptr `plusPtr` 24) (vkMemory (poked :: VkBindBufferMemoryInfo))
+                *> poke (ptr `plusPtr` 32) (vkMemoryOffset (poked :: VkBindBufferMemoryInfo))
+-- | VkBindImageMemoryInfo - Structure specifying how to bind an image to
+-- memory
+data VkBindImageMemoryInfo = VkBindImageMemoryInfo
+  { -- No documentation found for Nested "VkBindImageMemoryInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkImage"
+  vkImage :: VkImage
+  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  , -- No documentation found for Nested "VkBindImageMemoryInfo" "vkMemoryOffset"
+  vkMemoryOffset :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBindImageMemoryInfo where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkBindImageMemoryInfo <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+                                   <*> peek (ptr `plusPtr` 24)
+                                   <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindImageMemoryInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindImageMemoryInfo))
+                *> poke (ptr `plusPtr` 16) (vkImage (poked :: VkBindImageMemoryInfo))
+                *> poke (ptr `plusPtr` 24) (vkMemory (poked :: VkBindImageMemoryInfo))
+                *> poke (ptr `plusPtr` 32) (vkMemoryOffset (poked :: VkBindImageMemoryInfo))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_dedicated_allocation.hs
@@ -0,0 +1,88 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation
+  ( pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS
+  , pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO
+  , VkMemoryDedicatedRequirements(..)
+  , VkMemoryDedicatedAllocateInfo(..)
+  ) where
+
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  , VkImage
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS"
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS = VkStructureType 1000127000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO"
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO = VkStructureType 1000127001
+-- | VkMemoryDedicatedRequirements - Structure describing dedicated
+-- allocation requirements of buffer and image resources
+data VkMemoryDedicatedRequirements = VkMemoryDedicatedRequirements
+  { -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkPrefersDedicatedAllocation"
+  vkPrefersDedicatedAllocation :: VkBool32
+  , -- No documentation found for Nested "VkMemoryDedicatedRequirements" "vkRequiresDedicatedAllocation"
+  vkRequiresDedicatedAllocation :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryDedicatedRequirements where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryDedicatedRequirements <$> 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 :: VkMemoryDedicatedRequirements))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryDedicatedRequirements))
+                *> poke (ptr `plusPtr` 16) (vkPrefersDedicatedAllocation (poked :: VkMemoryDedicatedRequirements))
+                *> poke (ptr `plusPtr` 20) (vkRequiresDedicatedAllocation (poked :: VkMemoryDedicatedRequirements))
+-- | VkMemoryDedicatedAllocateInfo - Specify a dedicated memory allocation
+-- resource
+data VkMemoryDedicatedAllocateInfo = VkMemoryDedicatedAllocateInfo
+  { -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkImage"
+  vkImage :: VkImage
+  , -- No documentation found for Nested "VkMemoryDedicatedAllocateInfo" "vkBuffer"
+  vkBuffer :: VkBuffer
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryDedicatedAllocateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkMemoryDedicatedAllocateInfo <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+                                           <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryDedicatedAllocateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryDedicatedAllocateInfo))
+                *> poke (ptr `plusPtr` 16) (vkImage (poked :: VkMemoryDedicatedAllocateInfo))
+                *> poke (ptr `plusPtr` 24) (vkBuffer (poked :: VkMemoryDedicatedAllocateInfo))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_descriptor_update_template.hs
@@ -0,0 +1,241 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template
+  ( VkDescriptorUpdateTemplateType(..)
+  , pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
+  , VkDescriptorUpdateTemplateCreateFlags(..)
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO
+  , pattern VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE
+  , VkDescriptorUpdateTemplate
+  , vkCreateDescriptorUpdateTemplate
+  , vkDestroyDescriptorUpdateTemplate
+  , vkUpdateDescriptorSetWithTemplate
+  , VkDescriptorUpdateTemplateEntry(..)
+  , VkDescriptorUpdateTemplateCreateInfo(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorType(..)
+  , VkDescriptorSet
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkPipelineBindPoint(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkPipelineLayout
+  )
+import Graphics.Vulkan.Core10.PipelineLayout
+  ( VkDescriptorSetLayout
+  )
+
+
+-- ** VkDescriptorUpdateTemplateType
+
+-- | VkDescriptorUpdateTemplateType - Indicates the valid usage of the
+-- descriptor update template
+newtype VkDescriptorUpdateTemplateType = VkDescriptorUpdateTemplateType Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDescriptorUpdateTemplateType where
+  showsPrec _ VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET = showString "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkDescriptorUpdateTemplateType 1) = showString "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR"
+  showsPrec p (VkDescriptorUpdateTemplateType x) = showParen (p >= 11) (showString "VkDescriptorUpdateTemplateType " . showsPrec 11 x)
+
+instance Read VkDescriptorUpdateTemplateType where
+  readPrec = parens ( choose [ ("VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET", pure VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR", pure (VkDescriptorUpdateTemplateType 1))
+                             , ("VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR", pure (VkDescriptorUpdateTemplateType 1))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDescriptorUpdateTemplateType")
+                        v <- step readPrec
+                        pure (VkDescriptorUpdateTemplateType v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkDescriptorUpdateTemplateType" "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET"
+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
+newtype VkDescriptorUpdateTemplateCreateFlags = VkDescriptorUpdateTemplateCreateFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDescriptorUpdateTemplateCreateFlags where
+  
+  showsPrec p (VkDescriptorUpdateTemplateCreateFlags x) = showParen (p >= 11) (showString "VkDescriptorUpdateTemplateCreateFlags " . showsPrec 11 x)
+
+instance Read VkDescriptorUpdateTemplateCreateFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDescriptorUpdateTemplateCreateFlags")
+                        v <- step readPrec
+                        pure (VkDescriptorUpdateTemplateCreateFlags v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO = VkStructureType 1000085000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE"
+pattern VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE :: VkObjectType
+pattern VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = VkObjectType 1000085000
+-- | Dummy data to tag the 'Ptr' with
+data VkDescriptorUpdateTemplate_T
+-- | VkDescriptorUpdateTemplate - Opaque handle to a descriptor update
+-- template
+type VkDescriptorUpdateTemplate = Ptr VkDescriptorUpdateTemplate_T
+-- | vkCreateDescriptorUpdateTemplate - Create a new descriptor update
+-- template
+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
+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
+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
+data VkDescriptorUpdateTemplateEntry = VkDescriptorUpdateTemplateEntry
+  { -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDstBinding"
+  vkDstBinding :: Word32
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDstArrayElement"
+  vkDstArrayElement :: Word32
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDescriptorCount"
+  vkDescriptorCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkDescriptorType"
+  vkDescriptorType :: VkDescriptorType
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkOffset"
+  vkOffset :: CSize
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateEntry" "vkStride"
+  vkStride :: CSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorUpdateTemplateEntry where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDescriptorUpdateTemplateEntry <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 4)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 12)
+                                             <*> peek (ptr `plusPtr` 16)
+                                             <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkDstBinding (poked :: VkDescriptorUpdateTemplateEntry))
+                *> poke (ptr `plusPtr` 4) (vkDstArrayElement (poked :: VkDescriptorUpdateTemplateEntry))
+                *> poke (ptr `plusPtr` 8) (vkDescriptorCount (poked :: VkDescriptorUpdateTemplateEntry))
+                *> poke (ptr `plusPtr` 12) (vkDescriptorType (poked :: VkDescriptorUpdateTemplateEntry))
+                *> poke (ptr `plusPtr` 16) (vkOffset (poked :: VkDescriptorUpdateTemplateEntry))
+                *> poke (ptr `plusPtr` 24) (vkStride (poked :: VkDescriptorUpdateTemplateEntry))
+-- | VkDescriptorUpdateTemplateCreateInfo - Structure specifying parameters
+-- of a newly created descriptor update template
+data VkDescriptorUpdateTemplateCreateInfo = VkDescriptorUpdateTemplateCreateInfo
+  { -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkFlags"
+  vkFlags :: VkDescriptorUpdateTemplateCreateFlags
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkDescriptorUpdateEntryCount"
+  vkDescriptorUpdateEntryCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPDescriptorUpdateEntries"
+  vkPDescriptorUpdateEntries :: Ptr VkDescriptorUpdateTemplateEntry
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkTemplateType"
+  vkTemplateType :: VkDescriptorUpdateTemplateType
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkDescriptorSetLayout"
+  vkDescriptorSetLayout :: VkDescriptorSetLayout
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPipelineBindPoint"
+  vkPipelineBindPoint :: VkPipelineBindPoint
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkPipelineLayout"
+  vkPipelineLayout :: VkPipelineLayout
+  , -- No documentation found for Nested "VkDescriptorUpdateTemplateCreateInfo" "vkSet"
+  vkSet :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorUpdateTemplateCreateInfo where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkDescriptorUpdateTemplateCreateInfo <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkDescriptorUpdateEntryCount (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPDescriptorUpdateEntries (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkTemplateType (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkDescriptorSetLayout (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkPipelineBindPoint (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkPipelineLayout (poked :: VkDescriptorUpdateTemplateCreateInfo))
+                *> poke (ptr `plusPtr` 64) (vkSet (poked :: VkDescriptorUpdateTemplateCreateInfo))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group.hs
@@ -0,0 +1,333 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group
+  ( VkPeerMemoryFeatureFlagBits(..)
+  , pattern VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT
+  , pattern VK_PEER_MEMORY_FEATURE_COPY_DST_BIT
+  , pattern VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT
+  , pattern VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT
+  , VkMemoryAllocateFlagBits(..)
+  , pattern VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT
+  , pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO
+  , pattern VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT
+  , pattern VK_PIPELINE_CREATE_DISPATCH_BASE
+  , pattern VK_DEPENDENCY_DEVICE_GROUP_BIT
+  , vkGetDeviceGroupPeerMemoryFeatures
+  , vkCmdSetDeviceMask
+  , vkCmdDispatchBase
+  , VkMemoryAllocateFlagsInfo(..)
+  , VkDeviceGroupRenderPassBeginInfo(..)
+  , VkDeviceGroupCommandBufferBeginInfo(..)
+  , VkDeviceGroupSubmitInfo(..)
+  , VkDeviceGroupBindSparseInfo(..)
+  , VkPeerMemoryFeatureFlags
+  , VkMemoryAllocateFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkDependencyFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkRect2D(..)
+  , VkPipelineCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+
+
+-- ** VkPeerMemoryFeatureFlagBits
+
+-- | VkPeerMemoryFeatureFlagBits - Bitmask specifying supported peer memory
+-- features
+newtype VkPeerMemoryFeatureFlagBits = VkPeerMemoryFeatureFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPeerMemoryFeatureFlagBits where
+  showsPrec _ VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = showString "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"
+  showsPrec _ VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = showString "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"
+  showsPrec _ VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = showString "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"
+  showsPrec _ VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = showString "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"
+  showsPrec p (VkPeerMemoryFeatureFlagBits x) = showParen (p >= 11) (showString "VkPeerMemoryFeatureFlagBits " . showsPrec 11 x)
+
+instance Read VkPeerMemoryFeatureFlagBits where
+  readPrec = parens ( choose [ ("VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT",    pure VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT)
+                             , ("VK_PEER_MEMORY_FEATURE_COPY_DST_BIT",    pure VK_PEER_MEMORY_FEATURE_COPY_DST_BIT)
+                             , ("VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT", pure VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT)
+                             , ("VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT", pure VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPeerMemoryFeatureFlagBits")
+                        v <- step readPrec
+                        pure (VkPeerMemoryFeatureFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPeerMemoryFeatureFlagBits" "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT"
+pattern VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT = VkPeerMemoryFeatureFlagBits 0x00000001
+
+-- No documentation found for Nested "VkPeerMemoryFeatureFlagBits" "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT"
+pattern VK_PEER_MEMORY_FEATURE_COPY_DST_BIT :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_COPY_DST_BIT = VkPeerMemoryFeatureFlagBits 0x00000002
+
+-- No documentation found for Nested "VkPeerMemoryFeatureFlagBits" "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT"
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT = VkPeerMemoryFeatureFlagBits 0x00000004
+
+-- No documentation found for Nested "VkPeerMemoryFeatureFlagBits" "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT"
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT = VkPeerMemoryFeatureFlagBits 0x00000008
+-- ** VkMemoryAllocateFlagBits
+
+-- | VkMemoryAllocateFlagBits - Bitmask specifying flags for a device memory
+-- allocation
+newtype VkMemoryAllocateFlagBits = VkMemoryAllocateFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkMemoryAllocateFlagBits where
+  showsPrec _ VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT = showString "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"
+  showsPrec p (VkMemoryAllocateFlagBits x) = showParen (p >= 11) (showString "VkMemoryAllocateFlagBits " . showsPrec 11 x)
+
+instance Read VkMemoryAllocateFlagBits where
+  readPrec = parens ( choose [ ("VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT", pure VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkMemoryAllocateFlagBits")
+                        v <- step readPrec
+                        pure (VkMemoryAllocateFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkMemoryAllocateFlagBits" "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT"
+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"
+pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO = VkStructureType 1000060000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO = VkStructureType 1000060003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO = VkStructureType 1000060004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO = VkStructureType 1000060005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO = VkStructureType 1000060006
+-- No documentation found for Nested "VkPipelineCreateFlagBits" "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT"
+pattern VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT :: VkPipelineCreateFlagBits
+pattern VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = VkPipelineCreateFlagBits 0x00000008
+-- 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"
+pattern VK_DEPENDENCY_DEVICE_GROUP_BIT :: VkDependencyFlagBits
+pattern VK_DEPENDENCY_DEVICE_GROUP_BIT = VkDependencyFlagBits 0x00000004
+-- | vkGetDeviceGroupPeerMemoryFeatures - Query supported peer memory
+-- features of a device
+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
+foreign import ccall "vkCmdSetDeviceMask" vkCmdSetDeviceMask :: ("commandBuffer" ::: VkCommandBuffer) -> ("deviceMask" ::: Word32) -> IO ()
+-- | vkCmdDispatchBase - Dispatch compute work items
+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
+data VkMemoryAllocateFlagsInfo = VkMemoryAllocateFlagsInfo
+  { -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkFlags"
+  vkFlags :: VkMemoryAllocateFlags
+  , -- No documentation found for Nested "VkMemoryAllocateFlagsInfo" "vkDeviceMask"
+  vkDeviceMask :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryAllocateFlagsInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryAllocateFlagsInfo <$> 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 :: VkMemoryAllocateFlagsInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryAllocateFlagsInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkMemoryAllocateFlagsInfo))
+                *> poke (ptr `plusPtr` 20) (vkDeviceMask (poked :: VkMemoryAllocateFlagsInfo))
+-- | VkDeviceGroupRenderPassBeginInfo - Set the initial device mask and
+-- render areas for a render pass instance
+data VkDeviceGroupRenderPassBeginInfo = VkDeviceGroupRenderPassBeginInfo
+  { -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkDeviceMask"
+  vkDeviceMask :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkDeviceRenderAreaCount"
+  vkDeviceRenderAreaCount :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupRenderPassBeginInfo" "vkPDeviceRenderAreas"
+  vkPDeviceRenderAreas :: Ptr VkRect2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupRenderPassBeginInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupRenderPassBeginInfo <$> 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 :: VkDeviceGroupRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 16) (vkDeviceMask (poked :: VkDeviceGroupRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 20) (vkDeviceRenderAreaCount (poked :: VkDeviceGroupRenderPassBeginInfo))
+                *> poke (ptr `plusPtr` 24) (vkPDeviceRenderAreas (poked :: VkDeviceGroupRenderPassBeginInfo))
+-- | VkDeviceGroupCommandBufferBeginInfo - Set the initial device mask for a
+-- command buffer
+data VkDeviceGroupCommandBufferBeginInfo = VkDeviceGroupCommandBufferBeginInfo
+  { -- No documentation found for Nested "VkDeviceGroupCommandBufferBeginInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupCommandBufferBeginInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupCommandBufferBeginInfo" "vkDeviceMask"
+  vkDeviceMask :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupCommandBufferBeginInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupCommandBufferBeginInfo <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceGroupCommandBufferBeginInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupCommandBufferBeginInfo))
+                *> poke (ptr `plusPtr` 16) (vkDeviceMask (poked :: VkDeviceGroupCommandBufferBeginInfo))
+-- | VkDeviceGroupSubmitInfo - Structure indicating which physical devices
+-- execute semaphore operations and command buffers
+data VkDeviceGroupSubmitInfo = VkDeviceGroupSubmitInfo
+  { -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkWaitSemaphoreCount"
+  vkWaitSemaphoreCount :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPWaitSemaphoreDeviceIndices"
+  vkPWaitSemaphoreDeviceIndices :: Ptr Word32
+  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkCommandBufferCount"
+  vkCommandBufferCount :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPCommandBufferDeviceMasks"
+  vkPCommandBufferDeviceMasks :: Ptr Word32
+  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkSignalSemaphoreCount"
+  vkSignalSemaphoreCount :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupSubmitInfo" "vkPSignalSemaphoreDeviceIndices"
+  vkPSignalSemaphoreDeviceIndices :: Ptr Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupSubmitInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupSubmitInfo <$> 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 :: VkDeviceGroupSubmitInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupSubmitInfo))
+                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkDeviceGroupSubmitInfo))
+                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphoreDeviceIndices (poked :: VkDeviceGroupSubmitInfo))
+                *> poke (ptr `plusPtr` 32) (vkCommandBufferCount (poked :: VkDeviceGroupSubmitInfo))
+                *> poke (ptr `plusPtr` 40) (vkPCommandBufferDeviceMasks (poked :: VkDeviceGroupSubmitInfo))
+                *> poke (ptr `plusPtr` 48) (vkSignalSemaphoreCount (poked :: VkDeviceGroupSubmitInfo))
+                *> poke (ptr `plusPtr` 56) (vkPSignalSemaphoreDeviceIndices (poked :: VkDeviceGroupSubmitInfo))
+-- | VkDeviceGroupBindSparseInfo - Structure indicating which instances are
+-- bound
+data VkDeviceGroupBindSparseInfo = VkDeviceGroupBindSparseInfo
+  { -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkResourceDeviceIndex"
+  vkResourceDeviceIndex :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupBindSparseInfo" "vkMemoryDeviceIndex"
+  vkMemoryDeviceIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupBindSparseInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupBindSparseInfo <$> 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 :: VkDeviceGroupBindSparseInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupBindSparseInfo))
+                *> poke (ptr `plusPtr` 16) (vkResourceDeviceIndex (poked :: VkDeviceGroupBindSparseInfo))
+                *> poke (ptr `plusPtr` 20) (vkMemoryDeviceIndex (poked :: VkDeviceGroupBindSparseInfo))
+-- | VkPeerMemoryFeatureFlags - Bitmask of VkPeerMemoryFeatureFlagBits
+type VkPeerMemoryFeatureFlags = VkPeerMemoryFeatureFlagBits
+-- | VkMemoryAllocateFlags - Bitmask of VkMemoryAllocateFlagBits
+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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.hs
@@ -0,0 +1,104 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2
+  ( pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO
+  , pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
+  , VkBindBufferMemoryDeviceGroupInfo(..)
+  , VkBindImageMemoryDeviceGroupInfo(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkRect2D(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO"
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO = VkStructureType 1000060013
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO"
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO = VkStructureType 1000060014
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT"
+pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT = VkImageCreateFlagBits 0x00000040
+-- | VkBindBufferMemoryDeviceGroupInfo - Structure specifying device within a
+-- group to bind to
+data VkBindBufferMemoryDeviceGroupInfo = VkBindBufferMemoryDeviceGroupInfo
+  { -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkDeviceIndexCount"
+  vkDeviceIndexCount :: Word32
+  , -- No documentation found for Nested "VkBindBufferMemoryDeviceGroupInfo" "vkPDeviceIndices"
+  vkPDeviceIndices :: Ptr Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBindBufferMemoryDeviceGroupInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkBindBufferMemoryDeviceGroupInfo <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+                                               <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindBufferMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindBufferMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 16) (vkDeviceIndexCount (poked :: VkBindBufferMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 24) (vkPDeviceIndices (poked :: VkBindBufferMemoryDeviceGroupInfo))
+-- | VkBindImageMemoryDeviceGroupInfo - Structure specifying device within a
+-- group to bind to
+data VkBindImageMemoryDeviceGroupInfo = VkBindImageMemoryDeviceGroupInfo
+  { -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkDeviceIndexCount"
+  vkDeviceIndexCount :: Word32
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkPDeviceIndices"
+  vkPDeviceIndices :: Ptr Word32
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkSplitInstanceBindRegionCount"
+  vkSplitInstanceBindRegionCount :: Word32
+  , -- No documentation found for Nested "VkBindImageMemoryDeviceGroupInfo" "vkPSplitInstanceBindRegions"
+  vkPSplitInstanceBindRegions :: Ptr VkRect2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBindImageMemoryDeviceGroupInfo where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkBindImageMemoryDeviceGroupInfo <$> 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) (vkSType (poked :: VkBindImageMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindImageMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 16) (vkDeviceIndexCount (poked :: VkBindImageMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 24) (vkPDeviceIndices (poked :: VkBindImageMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 32) (vkSplitInstanceBindRegionCount (poked :: VkBindImageMemoryDeviceGroupInfo))
+                *> poke (ptr `plusPtr` 40) (vkPSplitInstanceBindRegions (poked :: VkBindImageMemoryDeviceGroupInfo))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_device_group_creation.hs
@@ -0,0 +1,120 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO
+  , pattern VK_MEMORY_HEAP_MULTI_INSTANCE_BIT
+  , VK_MAX_DEVICE_GROUP_SIZE
+  , pattern VK_MAX_DEVICE_GROUP_SIZE
+  , vkEnumeratePhysicalDeviceGroups
+  , VkPhysicalDeviceGroupProperties(..)
+  , VkDeviceGroupDeviceCreateInfo(..)
+  ) where
+
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  , VkInstance
+  , VkMemoryHeapFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES = VkStructureType 1000070000
+-- 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"
+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"
+type VK_MAX_DEVICE_GROUP_SIZE = 32
+-- No documentation found for Nested "Integral a => a" "VK_MAX_DEVICE_GROUP_SIZE"
+pattern VK_MAX_DEVICE_GROUP_SIZE :: Integral a => a
+pattern VK_MAX_DEVICE_GROUP_SIZE = 32
+-- | vkEnumeratePhysicalDeviceGroups - Enumerates groups of physical devices
+-- that can be used to create a single logical device
+foreign import ccall "vkEnumeratePhysicalDeviceGroups" vkEnumeratePhysicalDeviceGroups :: ("instance" ::: VkInstance) -> ("pPhysicalDeviceGroupCount" ::: Ptr Word32) -> ("pPhysicalDeviceGroupProperties" ::: Ptr VkPhysicalDeviceGroupProperties) -> IO VkResult
+-- | VkPhysicalDeviceGroupProperties - Structure specifying physical device
+-- group properties
+data VkPhysicalDeviceGroupProperties = VkPhysicalDeviceGroupProperties
+  { -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkPhysicalDeviceCount"
+  vkPhysicalDeviceCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkPhysicalDevices"
+  vkPhysicalDevices :: Vector VK_MAX_DEVICE_GROUP_SIZE VkPhysicalDevice
+  , -- No documentation found for Nested "VkPhysicalDeviceGroupProperties" "vkSubsetAllocation"
+  vkSubsetAllocation :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceGroupProperties where
+  sizeOf ~_ = 288
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceGroupProperties <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+                                             <*> peek (ptr `plusPtr` 24)
+                                             <*> peek (ptr `plusPtr` 280)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceGroupProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceGroupProperties))
+                *> poke (ptr `plusPtr` 16) (vkPhysicalDeviceCount (poked :: VkPhysicalDeviceGroupProperties))
+                *> poke (ptr `plusPtr` 24) (vkPhysicalDevices (poked :: VkPhysicalDeviceGroupProperties))
+                *> poke (ptr `plusPtr` 280) (vkSubsetAllocation (poked :: VkPhysicalDeviceGroupProperties))
+-- | VkDeviceGroupDeviceCreateInfo - Create a logical device from multiple
+-- physical devices
+data VkDeviceGroupDeviceCreateInfo = VkDeviceGroupDeviceCreateInfo
+  { -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkPhysicalDeviceCount"
+  vkPhysicalDeviceCount :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupDeviceCreateInfo" "vkPPhysicalDevices"
+  vkPPhysicalDevices :: Ptr VkPhysicalDevice
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupDeviceCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupDeviceCreateInfo <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+                                           <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceGroupDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkPhysicalDeviceCount (poked :: VkDeviceGroupDeviceCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPPhysicalDevices (poked :: VkDeviceGroupDeviceCreateInfo))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence.hs
@@ -0,0 +1,103 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence
+  ( VkFenceImportFlagBits(..)
+  , pattern VK_FENCE_IMPORT_TEMPORARY_BIT
+  , pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO
+  , VkExportFenceCreateInfo(..)
+  , VkFenceImportFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+  ( VkExternalFenceHandleTypeFlags
+  )
+
+
+-- ** VkFenceImportFlagBits
+
+-- | VkFenceImportFlagBits - Bitmask specifying additional parameters of
+-- fence payload import
+newtype VkFenceImportFlagBits = VkFenceImportFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkFenceImportFlagBits where
+  showsPrec _ VK_FENCE_IMPORT_TEMPORARY_BIT = showString "VK_FENCE_IMPORT_TEMPORARY_BIT"
+  showsPrec p (VkFenceImportFlagBits x) = showParen (p >= 11) (showString "VkFenceImportFlagBits " . showsPrec 11 x)
+
+instance Read VkFenceImportFlagBits where
+  readPrec = parens ( choose [ ("VK_FENCE_IMPORT_TEMPORARY_BIT", pure VK_FENCE_IMPORT_TEMPORARY_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkFenceImportFlagBits")
+                        v <- step readPrec
+                        pure (VkFenceImportFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkFenceImportFlagBits" "VK_FENCE_IMPORT_TEMPORARY_BIT"
+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"
+pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO = VkStructureType 1000113000
+-- | VkExportFenceCreateInfo - Structure specifying handle types that can be
+-- exported from a fence
+data VkExportFenceCreateInfo = VkExportFenceCreateInfo
+  { -- No documentation found for Nested "VkExportFenceCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportFenceCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportFenceCreateInfo" "vkHandleTypes"
+  vkHandleTypes :: VkExternalFenceHandleTypeFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportFenceCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExportFenceCreateInfo <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportFenceCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportFenceCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExportFenceCreateInfo))
+-- | VkFenceImportFlags - Bitmask of VkFenceImportFlagBits
+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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_fence_capabilities.hs
@@ -0,0 +1,204 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+  ( VkExternalFenceHandleTypeFlagBits(..)
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
+  , VkExternalFenceFeatureFlagBits(..)
+  , pattern VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
+  , pattern VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES
+  , vkGetPhysicalDeviceExternalFenceProperties
+  , VkPhysicalDeviceExternalFenceInfo(..)
+  , VkExternalFenceProperties(..)
+  , VkExternalFenceHandleTypeFlags
+  , VkExternalFenceFeatureFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+
+
+-- ** VkExternalFenceHandleTypeFlagBits
+
+-- | VkExternalFenceHandleTypeFlagBits - Bitmask of valid external fence
+-- handle types
+newtype VkExternalFenceHandleTypeFlagBits = VkExternalFenceHandleTypeFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalFenceHandleTypeFlagBits where
+  showsPrec _ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = showString "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"
+  showsPrec _ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = showString "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+  showsPrec _ VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = showString "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+  showsPrec _ VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = showString "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"
+  showsPrec p (VkExternalFenceHandleTypeFlagBits x) = showParen (p >= 11) (showString "VkExternalFenceHandleTypeFlagBits " . showsPrec 11 x)
+
+instance Read VkExternalFenceHandleTypeFlagBits where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT",        pure VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT)
+                             , ("VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT",     pure VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT)
+                             , ("VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
+                             , ("VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT",          pure VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalFenceHandleTypeFlagBits")
+                        v <- step readPrec
+                        pure (VkExternalFenceHandleTypeFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkExternalFenceHandleTypeFlagBits" "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT = VkExternalFenceHandleTypeFlagBits 0x00000001
+
+-- No documentation found for Nested "VkExternalFenceHandleTypeFlagBits" "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT = VkExternalFenceHandleTypeFlagBits 0x00000002
+
+-- No documentation found for Nested "VkExternalFenceHandleTypeFlagBits" "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = VkExternalFenceHandleTypeFlagBits 0x00000004
+
+-- No documentation found for Nested "VkExternalFenceHandleTypeFlagBits" "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT = VkExternalFenceHandleTypeFlagBits 0x00000008
+-- ** VkExternalFenceFeatureFlagBits
+
+-- | VkExternalFenceFeatureFlagBits - Bitfield describing features of an
+-- external fence handle type
+newtype VkExternalFenceFeatureFlagBits = VkExternalFenceFeatureFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalFenceFeatureFlagBits where
+  showsPrec _ VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT = showString "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"
+  showsPrec _ VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT = showString "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT"
+  showsPrec p (VkExternalFenceFeatureFlagBits x) = showParen (p >= 11) (showString "VkExternalFenceFeatureFlagBits " . showsPrec 11 x)
+
+instance Read VkExternalFenceFeatureFlagBits where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT", pure VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT)
+                             , ("VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT", pure VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalFenceFeatureFlagBits")
+                        v <- step readPrec
+                        pure (VkExternalFenceFeatureFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkExternalFenceFeatureFlagBits" "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT"
+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"
+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"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO = VkStructureType 1000112000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES = VkStructureType 1000112001
+-- | vkGetPhysicalDeviceExternalFenceProperties - Function for querying
+-- external fence handle capabilities.
+foreign import ccall "vkGetPhysicalDeviceExternalFenceProperties" vkGetPhysicalDeviceExternalFenceProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalFenceInfo" ::: Ptr VkPhysicalDeviceExternalFenceInfo) -> ("pExternalFenceProperties" ::: Ptr VkExternalFenceProperties) -> IO ()
+-- | VkPhysicalDeviceExternalFenceInfo - Structure specifying fence creation
+-- parameters.
+data VkPhysicalDeviceExternalFenceInfo = VkPhysicalDeviceExternalFenceInfo
+  { -- No documentation found for Nested "VkPhysicalDeviceExternalFenceInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalFenceInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalFenceInfo" "vkHandleType"
+  vkHandleType :: VkExternalFenceHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceExternalFenceInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceExternalFenceInfo <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceExternalFenceInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceExternalFenceInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkPhysicalDeviceExternalFenceInfo))
+-- | VkExternalFenceProperties - Structure describing supported external
+-- fence handle features
+data VkExternalFenceProperties = VkExternalFenceProperties
+  { -- No documentation found for Nested "VkExternalFenceProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalFenceProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalFenceProperties" "vkExportFromImportedHandleTypes"
+  vkExportFromImportedHandleTypes :: VkExternalFenceHandleTypeFlags
+  , -- No documentation found for Nested "VkExternalFenceProperties" "vkCompatibleHandleTypes"
+  vkCompatibleHandleTypes :: VkExternalFenceHandleTypeFlags
+  , -- No documentation found for Nested "VkExternalFenceProperties" "vkExternalFenceFeatures"
+  vkExternalFenceFeatures :: VkExternalFenceFeatureFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalFenceProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkExternalFenceProperties <$> 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 :: VkExternalFenceProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalFenceProperties))
+                *> poke (ptr `plusPtr` 16) (vkExportFromImportedHandleTypes (poked :: VkExternalFenceProperties))
+                *> poke (ptr `plusPtr` 20) (vkCompatibleHandleTypes (poked :: VkExternalFenceProperties))
+                *> poke (ptr `plusPtr` 24) (vkExternalFenceFeatures (poked :: VkExternalFenceProperties))
+-- | VkExternalFenceHandleTypeFlags - Bitmask of
+-- VkExternalFenceHandleTypeFlagBits
+type VkExternalFenceHandleTypeFlags = VkExternalFenceHandleTypeFlagBits
+-- | VkExternalFenceFeatureFlags - Bitmask of VkExternalFenceFeatureFlagBits
+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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory.hs
@@ -0,0 +1,116 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory
+  ( pattern VK_ERROR_INVALID_EXTERNAL_HANDLE
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO
+  , pattern VK_QUEUE_FAMILY_EXTERNAL
+  , VkExternalMemoryImageCreateInfo(..)
+  , VkExternalMemoryBufferCreateInfo(..)
+  , VkExportMemoryAllocateInfo(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlags
+  )
+
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_INVALID_EXTERNAL_HANDLE"
+pattern VK_ERROR_INVALID_EXTERNAL_HANDLE :: VkResult
+pattern VK_ERROR_INVALID_EXTERNAL_HANDLE = VkResult (-1000072003)
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO = VkStructureType 1000072000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO = VkStructureType 1000072001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO"
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO = VkStructureType 1000072002
+-- No documentation found for Nested "Word32" "VK_QUEUE_FAMILY_EXTERNAL"
+pattern VK_QUEUE_FAMILY_EXTERNAL :: Word32
+pattern VK_QUEUE_FAMILY_EXTERNAL = 0xfffffffe
+-- | VkExternalMemoryImageCreateInfo - Specify that an image may be backed by
+-- external memory
+data VkExternalMemoryImageCreateInfo = VkExternalMemoryImageCreateInfo
+  { -- No documentation found for Nested "VkExternalMemoryImageCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfo" "vkHandleTypes"
+  vkHandleTypes :: VkExternalMemoryHandleTypeFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalMemoryImageCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExternalMemoryImageCreateInfo <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExternalMemoryImageCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalMemoryImageCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExternalMemoryImageCreateInfo))
+-- | VkExternalMemoryBufferCreateInfo - Specify that a buffer may be backed
+-- by external memory
+data VkExternalMemoryBufferCreateInfo = VkExternalMemoryBufferCreateInfo
+  { -- No documentation found for Nested "VkExternalMemoryBufferCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalMemoryBufferCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalMemoryBufferCreateInfo" "vkHandleTypes"
+  vkHandleTypes :: VkExternalMemoryHandleTypeFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalMemoryBufferCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExternalMemoryBufferCreateInfo <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExternalMemoryBufferCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalMemoryBufferCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExternalMemoryBufferCreateInfo))
+-- | VkExportMemoryAllocateInfo - Specify exportable handle types for a
+-- device memory object
+data VkExportMemoryAllocateInfo = VkExportMemoryAllocateInfo
+  { -- No documentation found for Nested "VkExportMemoryAllocateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportMemoryAllocateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportMemoryAllocateInfo" "vkHandleTypes"
+  vkHandleTypes :: VkExternalMemoryHandleTypeFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportMemoryAllocateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExportMemoryAllocateInfo <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportMemoryAllocateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportMemoryAllocateInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExportMemoryAllocateInfo))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_memory_capabilities.hs
@@ -0,0 +1,379 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBits(..)
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
+  , VkExternalMemoryFeatureFlagBits(..)
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
+  , VK_LUID_SIZE
+  , pattern VK_LUID_SIZE
+  , vkGetPhysicalDeviceExternalBufferProperties
+  , VkExternalMemoryProperties(..)
+  , VkPhysicalDeviceExternalImageFormatInfo(..)
+  , VkExternalImageFormatProperties(..)
+  , VkPhysicalDeviceExternalBufferInfo(..)
+  , VkExternalBufferProperties(..)
+  , VkPhysicalDeviceIDProperties(..)
+  , VkExternalMemoryHandleTypeFlags
+  , VkExternalMemoryFeatureFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  , Word8
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Buffer
+  ( VkBufferUsageFlags
+  , VkBufferCreateFlags
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VK_UUID_SIZE
+  , VkPhysicalDevice
+  )
+
+
+-- ** VkExternalMemoryHandleTypeFlagBits
+
+-- | VkExternalMemoryHandleTypeFlagBits - Bit specifying external memory
+-- handle types
+newtype VkExternalMemoryHandleTypeFlagBits = VkExternalMemoryHandleTypeFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalMemoryHandleTypeFlagBits where
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkExternalMemoryHandleTypeFlagBits 0x00000200) = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"
+  showsPrec _ (VkExternalMemoryHandleTypeFlagBits 0x00000400) = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"
+  showsPrec _ (VkExternalMemoryHandleTypeFlagBits 0x00000080) = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"
+  showsPrec _ (VkExternalMemoryHandleTypeFlagBits 0x00000100) = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"
+  showsPrec p (VkExternalMemoryHandleTypeFlagBits x) = showParen (p >= 11) (showString "VkExternalMemoryHandleTypeFlagBits " . showsPrec 11 x)
+
+instance Read VkExternalMemoryHandleTypeFlagBits where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT",         pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT",      pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT",  pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT",     pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT", pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT",        pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT",    pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT",                     pure (VkExternalMemoryHandleTypeFlagBits 0x00000200))
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID", pure (VkExternalMemoryHandleTypeFlagBits 0x00000400))
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT",             pure (VkExternalMemoryHandleTypeFlagBits 0x00000080))
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT",  pure (VkExternalMemoryHandleTypeFlagBits 0x00000100))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalMemoryHandleTypeFlagBits")
+                        v <- step readPrec
+                        pure (VkExternalMemoryHandleTypeFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT = VkExternalMemoryHandleTypeFlagBits 0x00000001
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT = VkExternalMemoryHandleTypeFlagBits 0x00000002
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = VkExternalMemoryHandleTypeFlagBits 0x00000004
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT = VkExternalMemoryHandleTypeFlagBits 0x00000008
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT = VkExternalMemoryHandleTypeFlagBits 0x00000010
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT = VkExternalMemoryHandleTypeFlagBits 0x00000020
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT = VkExternalMemoryHandleTypeFlagBits 0x00000040
+-- ** VkExternalMemoryFeatureFlagBits
+
+-- | VkExternalMemoryFeatureFlagBits - Bitmask specifying features of an
+-- external memory handle type
+newtype VkExternalMemoryFeatureFlagBits = VkExternalMemoryFeatureFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalMemoryFeatureFlagBits where
+  showsPrec _ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = showString "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = showString "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"
+  showsPrec _ VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = showString "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"
+  showsPrec p (VkExternalMemoryFeatureFlagBits x) = showParen (p >= 11) (showString "VkExternalMemoryFeatureFlagBits " . showsPrec 11 x)
+
+instance Read VkExternalMemoryFeatureFlagBits where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT", pure VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT)
+                             , ("VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT",     pure VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT)
+                             , ("VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT",     pure VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalMemoryFeatureFlagBits")
+                        v <- step readPrec
+                        pure (VkExternalMemoryFeatureFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkExternalMemoryFeatureFlagBits" "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT"
+pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT :: VkExternalMemoryFeatureFlagBits
+pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT = VkExternalMemoryFeatureFlagBits 0x00000001
+
+-- No documentation found for Nested "VkExternalMemoryFeatureFlagBits" "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT"
+pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT :: VkExternalMemoryFeatureFlagBits
+pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT = VkExternalMemoryFeatureFlagBits 0x00000002
+
+-- No documentation found for Nested "VkExternalMemoryFeatureFlagBits" "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT"
+pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT :: VkExternalMemoryFeatureFlagBits
+pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT = VkExternalMemoryFeatureFlagBits 0x00000004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO = VkStructureType 1000071000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES = VkStructureType 1000071001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO = VkStructureType 1000071002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES = VkStructureType 1000071003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES = VkStructureType 1000071004
+-- No documentation found for TopLevel "VK_LUID_SIZE"
+type VK_LUID_SIZE = 8
+-- No documentation found for Nested "Integral a => a" "VK_LUID_SIZE"
+pattern VK_LUID_SIZE :: Integral a => a
+pattern VK_LUID_SIZE = 8
+-- | vkGetPhysicalDeviceExternalBufferProperties - Query external handle
+-- types supported by buffers
+foreign import ccall "vkGetPhysicalDeviceExternalBufferProperties" vkGetPhysicalDeviceExternalBufferProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalBufferInfo" ::: Ptr VkPhysicalDeviceExternalBufferInfo) -> ("pExternalBufferProperties" ::: Ptr VkExternalBufferProperties) -> IO ()
+-- | VkExternalMemoryProperties - Structure specifying external memory handle
+-- type capabilities
+data VkExternalMemoryProperties = VkExternalMemoryProperties
+  { -- No documentation found for Nested "VkExternalMemoryProperties" "vkExternalMemoryFeatures"
+  vkExternalMemoryFeatures :: VkExternalMemoryFeatureFlags
+  , -- No documentation found for Nested "VkExternalMemoryProperties" "vkExportFromImportedHandleTypes"
+  vkExportFromImportedHandleTypes :: VkExternalMemoryHandleTypeFlags
+  , -- No documentation found for Nested "VkExternalMemoryProperties" "vkCompatibleHandleTypes"
+  vkCompatibleHandleTypes :: VkExternalMemoryHandleTypeFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalMemoryProperties where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkExternalMemoryProperties <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 4)
+                                        <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkExternalMemoryFeatures (poked :: VkExternalMemoryProperties))
+                *> poke (ptr `plusPtr` 4) (vkExportFromImportedHandleTypes (poked :: VkExternalMemoryProperties))
+                *> poke (ptr `plusPtr` 8) (vkCompatibleHandleTypes (poked :: VkExternalMemoryProperties))
+-- | VkPhysicalDeviceExternalImageFormatInfo - Structure specifying external
+-- image creation parameters
+data VkPhysicalDeviceExternalImageFormatInfo = VkPhysicalDeviceExternalImageFormatInfo
+  { -- No documentation found for Nested "VkPhysicalDeviceExternalImageFormatInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalImageFormatInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalImageFormatInfo" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceExternalImageFormatInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceExternalImageFormatInfo <$> peek (ptr `plusPtr` 0)
+                                                     <*> peek (ptr `plusPtr` 8)
+                                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceExternalImageFormatInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceExternalImageFormatInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkPhysicalDeviceExternalImageFormatInfo))
+-- | VkExternalImageFormatProperties - Structure specifying supported
+-- external handle properties
+data VkExternalImageFormatProperties = VkExternalImageFormatProperties
+  { -- No documentation found for Nested "VkExternalImageFormatProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalImageFormatProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalImageFormatProperties" "vkExternalMemoryProperties"
+  vkExternalMemoryProperties :: VkExternalMemoryProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalImageFormatProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkExternalImageFormatProperties <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExternalImageFormatProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalImageFormatProperties))
+                *> poke (ptr `plusPtr` 16) (vkExternalMemoryProperties (poked :: VkExternalImageFormatProperties))
+-- | VkPhysicalDeviceExternalBufferInfo - Structure specifying buffer
+-- creation parameters
+data VkPhysicalDeviceExternalBufferInfo = VkPhysicalDeviceExternalBufferInfo
+  { -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkFlags"
+  vkFlags :: VkBufferCreateFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkUsage"
+  vkUsage :: VkBufferUsageFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalBufferInfo" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceExternalBufferInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceExternalBufferInfo <$> 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 :: VkPhysicalDeviceExternalBufferInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceExternalBufferInfo))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPhysicalDeviceExternalBufferInfo))
+                *> poke (ptr `plusPtr` 20) (vkUsage (poked :: VkPhysicalDeviceExternalBufferInfo))
+                *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkPhysicalDeviceExternalBufferInfo))
+-- | VkExternalBufferProperties - Structure specifying supported external
+-- handle capabilities
+data VkExternalBufferProperties = VkExternalBufferProperties
+  { -- No documentation found for Nested "VkExternalBufferProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalBufferProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalBufferProperties" "vkExternalMemoryProperties"
+  vkExternalMemoryProperties :: VkExternalMemoryProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalBufferProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkExternalBufferProperties <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExternalBufferProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalBufferProperties))
+                *> poke (ptr `plusPtr` 16) (vkExternalMemoryProperties (poked :: VkExternalBufferProperties))
+-- | VkPhysicalDeviceIDProperties - Structure specifying IDs related to the
+-- physical device
+data VkPhysicalDeviceIDProperties = VkPhysicalDeviceIDProperties
+  { -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceUUID"
+  vkDeviceUUID :: Vector VK_UUID_SIZE Word8
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDriverUUID"
+  vkDriverUUID :: Vector VK_UUID_SIZE Word8
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceLUID"
+  vkDeviceLUID :: Vector VK_LUID_SIZE Word8
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceNodeMask"
+  vkDeviceNodeMask :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceIDProperties" "vkDeviceLUIDValid"
+  vkDeviceLUIDValid :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceIDProperties where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceIDProperties <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 16)
+                                          <*> peek (ptr `plusPtr` 32)
+                                          <*> peek (ptr `plusPtr` 48)
+                                          <*> peek (ptr `plusPtr` 56)
+                                          <*> peek (ptr `plusPtr` 60)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceIDProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceIDProperties))
+                *> poke (ptr `plusPtr` 16) (vkDeviceUUID (poked :: VkPhysicalDeviceIDProperties))
+                *> poke (ptr `plusPtr` 32) (vkDriverUUID (poked :: VkPhysicalDeviceIDProperties))
+                *> poke (ptr `plusPtr` 48) (vkDeviceLUID (poked :: VkPhysicalDeviceIDProperties))
+                *> poke (ptr `plusPtr` 56) (vkDeviceNodeMask (poked :: VkPhysicalDeviceIDProperties))
+                *> poke (ptr `plusPtr` 60) (vkDeviceLUIDValid (poked :: VkPhysicalDeviceIDProperties))
+-- | VkExternalMemoryHandleTypeFlags - Bitmask of
+-- VkExternalMemoryHandleTypeFlagBits
+type VkExternalMemoryHandleTypeFlags = VkExternalMemoryHandleTypeFlagBits
+-- | VkExternalMemoryFeatureFlags - Bitmask of
+-- VkExternalMemoryFeatureFlagBits
+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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore.hs
@@ -0,0 +1,103 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore
+  ( VkSemaphoreImportFlagBits(..)
+  , pattern VK_SEMAPHORE_IMPORT_TEMPORARY_BIT
+  , pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO
+  , VkExportSemaphoreCreateInfo(..)
+  , VkSemaphoreImportFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+  ( VkExternalSemaphoreHandleTypeFlags
+  )
+
+
+-- ** VkSemaphoreImportFlagBits
+
+-- | VkSemaphoreImportFlagBits - Bitmask specifying additional parameters of
+-- semaphore payload import
+newtype VkSemaphoreImportFlagBits = VkSemaphoreImportFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSemaphoreImportFlagBits where
+  showsPrec _ VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = showString "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"
+  showsPrec p (VkSemaphoreImportFlagBits x) = showParen (p >= 11) (showString "VkSemaphoreImportFlagBits " . showsPrec 11 x)
+
+instance Read VkSemaphoreImportFlagBits where
+  readPrec = parens ( choose [ ("VK_SEMAPHORE_IMPORT_TEMPORARY_BIT", pure VK_SEMAPHORE_IMPORT_TEMPORARY_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSemaphoreImportFlagBits")
+                        v <- step readPrec
+                        pure (VkSemaphoreImportFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkSemaphoreImportFlagBits" "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT"
+pattern VK_SEMAPHORE_IMPORT_TEMPORARY_BIT :: VkSemaphoreImportFlagBits
+pattern VK_SEMAPHORE_IMPORT_TEMPORARY_BIT = VkSemaphoreImportFlagBits 0x00000001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO = VkStructureType 1000077000
+-- | VkExportSemaphoreCreateInfo - Structure specifying handle types that can
+-- be exported from a semaphore
+data VkExportSemaphoreCreateInfo = VkExportSemaphoreCreateInfo
+  { -- No documentation found for Nested "VkExportSemaphoreCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportSemaphoreCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportSemaphoreCreateInfo" "vkHandleTypes"
+  vkHandleTypes :: VkExternalSemaphoreHandleTypeFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportSemaphoreCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExportSemaphoreCreateInfo <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportSemaphoreCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportSemaphoreCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExportSemaphoreCreateInfo))
+-- | VkSemaphoreImportFlags - Bitmask of 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_external_semaphore_capabilities.hs
@@ -0,0 +1,212 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+  ( VkExternalSemaphoreHandleTypeFlagBits(..)
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
+  , VkExternalSemaphoreFeatureFlagBits(..)
+  , pattern VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
+  , vkGetPhysicalDeviceExternalSemaphoreProperties
+  , VkPhysicalDeviceExternalSemaphoreInfo(..)
+  , VkExternalSemaphoreProperties(..)
+  , VkExternalSemaphoreHandleTypeFlags
+  , VkExternalSemaphoreFeatureFlags
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+
+
+-- ** VkExternalSemaphoreHandleTypeFlagBits
+
+-- | VkExternalSemaphoreHandleTypeFlagBits - Bitmask of valid external
+-- semaphore handle types
+newtype VkExternalSemaphoreHandleTypeFlagBits = VkExternalSemaphoreHandleTypeFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalSemaphoreHandleTypeFlagBits where
+  showsPrec _ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = showString "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"
+  showsPrec _ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = showString "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+  showsPrec _ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = showString "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+  showsPrec _ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = showString "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"
+  showsPrec _ VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = showString "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"
+  showsPrec p (VkExternalSemaphoreHandleTypeFlagBits x) = showParen (p >= 11) (showString "VkExternalSemaphoreHandleTypeFlagBits " . showsPrec 11 x)
+
+instance Read VkExternalSemaphoreHandleTypeFlagBits where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT",        pure VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT)
+                             , ("VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT",     pure VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT)
+                             , ("VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT", pure VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT)
+                             , ("VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT",      pure VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT)
+                             , ("VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT",          pure VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalSemaphoreHandleTypeFlagBits")
+                        v <- step readPrec
+                        pure (VkExternalSemaphoreHandleTypeFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkExternalSemaphoreHandleTypeFlagBits" "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT = VkExternalSemaphoreHandleTypeFlagBits 0x00000001
+
+-- No documentation found for Nested "VkExternalSemaphoreHandleTypeFlagBits" "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT = VkExternalSemaphoreHandleTypeFlagBits 0x00000002
+
+-- No documentation found for Nested "VkExternalSemaphoreHandleTypeFlagBits" "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT = VkExternalSemaphoreHandleTypeFlagBits 0x00000004
+
+-- No documentation found for Nested "VkExternalSemaphoreHandleTypeFlagBits" "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT = VkExternalSemaphoreHandleTypeFlagBits 0x00000008
+
+-- No documentation found for Nested "VkExternalSemaphoreHandleTypeFlagBits" "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT = VkExternalSemaphoreHandleTypeFlagBits 0x00000010
+-- ** VkExternalSemaphoreFeatureFlagBits
+
+-- | VkExternalSemaphoreFeatureFlagBits - Bitfield describing features of an
+-- external semaphore handle type
+newtype VkExternalSemaphoreFeatureFlagBits = VkExternalSemaphoreFeatureFlagBits VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalSemaphoreFeatureFlagBits where
+  showsPrec _ VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT = showString "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"
+  showsPrec _ VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT = showString "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT"
+  showsPrec p (VkExternalSemaphoreFeatureFlagBits x) = showParen (p >= 11) (showString "VkExternalSemaphoreFeatureFlagBits " . showsPrec 11 x)
+
+instance Read VkExternalSemaphoreFeatureFlagBits where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT", pure VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT)
+                             , ("VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT", pure VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalSemaphoreFeatureFlagBits")
+                        v <- step readPrec
+                        pure (VkExternalSemaphoreFeatureFlagBits v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkExternalSemaphoreFeatureFlagBits" "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT"
+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"
+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"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO = VkStructureType 1000076000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES = VkStructureType 1000076001
+-- | vkGetPhysicalDeviceExternalSemaphoreProperties - Function for querying
+-- external semaphore handle capabilities.
+foreign import ccall "vkGetPhysicalDeviceExternalSemaphoreProperties" vkGetPhysicalDeviceExternalSemaphoreProperties :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalSemaphoreInfo" ::: Ptr VkPhysicalDeviceExternalSemaphoreInfo) -> ("pExternalSemaphoreProperties" ::: Ptr VkExternalSemaphoreProperties) -> IO ()
+-- | VkPhysicalDeviceExternalSemaphoreInfo - Structure specifying semaphore
+-- creation parameters.
+data VkPhysicalDeviceExternalSemaphoreInfo = VkPhysicalDeviceExternalSemaphoreInfo
+  { -- No documentation found for Nested "VkPhysicalDeviceExternalSemaphoreInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalSemaphoreInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalSemaphoreInfo" "vkHandleType"
+  vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceExternalSemaphoreInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceExternalSemaphoreInfo <$> peek (ptr `plusPtr` 0)
+                                                   <*> peek (ptr `plusPtr` 8)
+                                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceExternalSemaphoreInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceExternalSemaphoreInfo))
+                *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkPhysicalDeviceExternalSemaphoreInfo))
+-- | VkExternalSemaphoreProperties - Structure describing supported external
+-- semaphore handle features
+data VkExternalSemaphoreProperties = VkExternalSemaphoreProperties
+  { -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkExportFromImportedHandleTypes"
+  vkExportFromImportedHandleTypes :: VkExternalSemaphoreHandleTypeFlags
+  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkCompatibleHandleTypes"
+  vkCompatibleHandleTypes :: VkExternalSemaphoreHandleTypeFlags
+  , -- No documentation found for Nested "VkExternalSemaphoreProperties" "vkExternalSemaphoreFeatures"
+  vkExternalSemaphoreFeatures :: VkExternalSemaphoreFeatureFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalSemaphoreProperties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkExternalSemaphoreProperties <$> 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 :: VkExternalSemaphoreProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalSemaphoreProperties))
+                *> poke (ptr `plusPtr` 16) (vkExportFromImportedHandleTypes (poked :: VkExternalSemaphoreProperties))
+                *> poke (ptr `plusPtr` 20) (vkCompatibleHandleTypes (poked :: VkExternalSemaphoreProperties))
+                *> poke (ptr `plusPtr` 24) (vkExternalSemaphoreFeatures (poked :: VkExternalSemaphoreProperties))
+-- | VkExternalSemaphoreHandleTypeFlags - Bitmask of
+-- VkExternalSemaphoreHandleTypeFlagBits
+type VkExternalSemaphoreHandleTypeFlags = VkExternalSemaphoreHandleTypeFlagBits
+-- | VkExternalSemaphoreFeatureFlags - Bitmask of
+-- VkExternalSemaphoreFeatureFlagBitsKHR
+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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_memory_requirements2.hs
@@ -0,0 +1,179 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2
+  ( pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2
+  , pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
+  , pattern VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
+  , pattern VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
+  , pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2
+  , vkGetBufferMemoryRequirements2
+  , vkGetImageMemoryRequirements2
+  , vkGetImageSparseMemoryRequirements2
+  , VkBufferMemoryRequirementsInfo2(..)
+  , VkImageMemoryRequirementsInfo2(..)
+  , VkImageSparseMemoryRequirementsInfo2(..)
+  , VkMemoryRequirements2(..)
+  , VkSparseImageMemoryRequirements2(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkMemoryRequirements(..)
+  , VkImage
+  , VkBuffer
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkSparseImageMemoryRequirements(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2"
+pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2 = VkStructureType 1000146000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2"
+pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2 = VkStructureType 1000146001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2"
+pattern VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2 = VkStructureType 1000146002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2"
+pattern VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 = VkStructureType 1000146003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2"
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2 = VkStructureType 1000146004
+-- | vkGetBufferMemoryRequirements2 - Returns the memory requirements for
+-- specified Vulkan object
+foreign import ccall "vkGetBufferMemoryRequirements2" vkGetBufferMemoryRequirements2 :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkBufferMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements2) -> IO ()
+-- | vkGetImageMemoryRequirements2 - Returns the memory requirements for
+-- specified Vulkan object
+foreign import ccall "vkGetImageMemoryRequirements2" vkGetImageMemoryRequirements2 :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkImageMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements2) -> IO ()
+-- | vkGetImageSparseMemoryRequirements2 - Query the memory requirements for
+-- a sparse image
+foreign import ccall "vkGetImageSparseMemoryRequirements2" vkGetImageSparseMemoryRequirements2 :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkImageSparseMemoryRequirementsInfo2) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr VkSparseImageMemoryRequirements2) -> IO ()
+-- | VkBufferMemoryRequirementsInfo2 - (None)
+data VkBufferMemoryRequirementsInfo2 = VkBufferMemoryRequirementsInfo2
+  { -- No documentation found for Nested "VkBufferMemoryRequirementsInfo2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBufferMemoryRequirementsInfo2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBufferMemoryRequirementsInfo2" "vkBuffer"
+  vkBuffer :: VkBuffer
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBufferMemoryRequirementsInfo2 where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkBufferMemoryRequirementsInfo2 <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBufferMemoryRequirementsInfo2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBufferMemoryRequirementsInfo2))
+                *> poke (ptr `plusPtr` 16) (vkBuffer (poked :: VkBufferMemoryRequirementsInfo2))
+-- | VkImageMemoryRequirementsInfo2 - (None)
+data VkImageMemoryRequirementsInfo2 = VkImageMemoryRequirementsInfo2
+  { -- No documentation found for Nested "VkImageMemoryRequirementsInfo2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageMemoryRequirementsInfo2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageMemoryRequirementsInfo2" "vkImage"
+  vkImage :: VkImage
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageMemoryRequirementsInfo2 where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkImageMemoryRequirementsInfo2 <$> peek (ptr `plusPtr` 0)
+                                            <*> peek (ptr `plusPtr` 8)
+                                            <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageMemoryRequirementsInfo2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageMemoryRequirementsInfo2))
+                *> poke (ptr `plusPtr` 16) (vkImage (poked :: VkImageMemoryRequirementsInfo2))
+-- | VkImageSparseMemoryRequirementsInfo2 - (None)
+data VkImageSparseMemoryRequirementsInfo2 = VkImageSparseMemoryRequirementsInfo2
+  { -- No documentation found for Nested "VkImageSparseMemoryRequirementsInfo2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageSparseMemoryRequirementsInfo2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageSparseMemoryRequirementsInfo2" "vkImage"
+  vkImage :: VkImage
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageSparseMemoryRequirementsInfo2 where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkImageSparseMemoryRequirementsInfo2 <$> peek (ptr `plusPtr` 0)
+                                                  <*> peek (ptr `plusPtr` 8)
+                                                  <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageSparseMemoryRequirementsInfo2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageSparseMemoryRequirementsInfo2))
+                *> poke (ptr `plusPtr` 16) (vkImage (poked :: VkImageSparseMemoryRequirementsInfo2))
+-- | VkMemoryRequirements2 - Structure specifying memory requirements
+data VkMemoryRequirements2 = VkMemoryRequirements2
+  { -- No documentation found for Nested "VkMemoryRequirements2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryRequirements2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryRequirements2" "vkMemoryRequirements"
+  vkMemoryRequirements :: VkMemoryRequirements
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryRequirements2 where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkMemoryRequirements2 <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryRequirements2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryRequirements2))
+                *> poke (ptr `plusPtr` 16) (vkMemoryRequirements (poked :: VkMemoryRequirements2))
+-- | VkSparseImageMemoryRequirements2 - (None)
+data VkSparseImageMemoryRequirements2 = VkSparseImageMemoryRequirements2
+  { -- No documentation found for Nested "VkSparseImageMemoryRequirements2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSparseImageMemoryRequirements2" "vkMemoryRequirements"
+  vkMemoryRequirements :: VkSparseImageMemoryRequirements
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseImageMemoryRequirements2 where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkSparseImageMemoryRequirements2 <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSparseImageMemoryRequirements2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSparseImageMemoryRequirements2))
+                *> poke (ptr `plusPtr` 16) (vkMemoryRequirements (poked :: VkSparseImageMemoryRequirements2))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_get_physical_device_properties2.hs
@@ -0,0 +1,341 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
+  , pattern VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
+  , vkGetPhysicalDeviceFeatures2
+  , vkGetPhysicalDeviceProperties2
+  , vkGetPhysicalDeviceFormatProperties2
+  , vkGetPhysicalDeviceImageFormatProperties2
+  , vkGetPhysicalDeviceQueueFamilyProperties2
+  , vkGetPhysicalDeviceMemoryProperties2
+  , vkGetPhysicalDeviceSparseImageFormatProperties2
+  , VkPhysicalDeviceFeatures2(..)
+  , VkPhysicalDeviceProperties2(..)
+  , VkFormatProperties2(..)
+  , VkImageFormatProperties2(..)
+  , VkPhysicalDeviceImageFormatInfo2(..)
+  , VkQueueFamilyProperties2(..)
+  , VkPhysicalDeviceMemoryProperties2(..)
+  , VkSparseImageFormatProperties2(..)
+  , VkPhysicalDeviceSparseImageFormatInfo2(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkFormat(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkSampleCountFlagBits(..)
+  , VkPhysicalDeviceMemoryProperties(..)
+  , VkQueueFamilyProperties(..)
+  , VkImageCreateFlags
+  , VkImageUsageFlags
+  , VkImageTiling(..)
+  , VkImageType(..)
+  , VkImageFormatProperties(..)
+  , VkFormatProperties(..)
+  , VkPhysicalDeviceProperties(..)
+  , VkPhysicalDeviceFeatures(..)
+  , VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkSparseImageFormatProperties(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2 = VkStructureType 1000059000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2 = VkStructureType 1000059001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2"
+pattern VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2 = VkStructureType 1000059002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2"
+pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2 = VkStructureType 1000059003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2 = VkStructureType 1000059004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2"
+pattern VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2 = VkStructureType 1000059005
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2 = VkStructureType 1000059006
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2"
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2 = VkStructureType 1000059007
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2"
+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
+foreign import ccall "vkGetPhysicalDeviceFeatures2" vkGetPhysicalDeviceFeatures2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFeatures" ::: Ptr VkPhysicalDeviceFeatures2) -> IO ()
+-- | vkGetPhysicalDeviceProperties2 - Returns properties of a physical device
+foreign import ccall "vkGetPhysicalDeviceProperties2" vkGetPhysicalDeviceProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pProperties" ::: Ptr VkPhysicalDeviceProperties2) -> IO ()
+-- | vkGetPhysicalDeviceFormatProperties2 - Lists physical device’s format
+-- capabilities
+foreign import ccall "vkGetPhysicalDeviceFormatProperties2" vkGetPhysicalDeviceFormatProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("pFormatProperties" ::: Ptr VkFormatProperties2) -> IO ()
+-- | vkGetPhysicalDeviceImageFormatProperties2 - Lists physical device’s
+-- image format capabilities
+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
+foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties2" vkGetPhysicalDeviceQueueFamilyProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr VkQueueFamilyProperties2) -> IO ()
+-- | vkGetPhysicalDeviceMemoryProperties2 - Reports memory information for
+-- the specified physical device
+foreign import ccall "vkGetPhysicalDeviceMemoryProperties2" vkGetPhysicalDeviceMemoryProperties2 :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pMemoryProperties" ::: Ptr VkPhysicalDeviceMemoryProperties2) -> IO ()
+-- | vkGetPhysicalDeviceSparseImageFormatProperties2 - Retrieve properties of
+-- an image format applied to sparse images
+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
+data VkPhysicalDeviceFeatures2 = VkPhysicalDeviceFeatures2
+  { -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceFeatures2" "vkFeatures"
+  vkFeatures :: VkPhysicalDeviceFeatures
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceFeatures2 where
+  sizeOf ~_ = 240
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceFeatures2 <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 8)
+                                       <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceFeatures2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceFeatures2))
+                *> poke (ptr `plusPtr` 16) (vkFeatures (poked :: VkPhysicalDeviceFeatures2))
+-- | VkPhysicalDeviceProperties2 - Structure specifying physical device
+-- properties
+data VkPhysicalDeviceProperties2 = VkPhysicalDeviceProperties2
+  { -- No documentation found for Nested "VkPhysicalDeviceProperties2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceProperties2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceProperties2" "vkProperties"
+  vkProperties :: VkPhysicalDeviceProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceProperties2 where
+  sizeOf ~_ = 840
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceProperties2 <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceProperties2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceProperties2))
+                *> poke (ptr `plusPtr` 16) (vkProperties (poked :: VkPhysicalDeviceProperties2))
+-- | VkFormatProperties2 - Structure specifying image format properties
+data VkFormatProperties2 = VkFormatProperties2
+  { -- No documentation found for Nested "VkFormatProperties2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkFormatProperties2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkFormatProperties2" "vkFormatProperties"
+  vkFormatProperties :: VkFormatProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkFormatProperties2 where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkFormatProperties2 <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFormatProperties2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFormatProperties2))
+                *> poke (ptr `plusPtr` 16) (vkFormatProperties (poked :: VkFormatProperties2))
+-- | VkImageFormatProperties2 - Structure specifying a image format
+-- properties
+data VkImageFormatProperties2 = VkImageFormatProperties2
+  { -- No documentation found for Nested "VkImageFormatProperties2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageFormatProperties2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageFormatProperties2" "vkImageFormatProperties"
+  vkImageFormatProperties :: VkImageFormatProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageFormatProperties2 where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkImageFormatProperties2 <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageFormatProperties2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageFormatProperties2))
+                *> poke (ptr `plusPtr` 16) (vkImageFormatProperties (poked :: VkImageFormatProperties2))
+-- | VkPhysicalDeviceImageFormatInfo2 - Structure specifying image creation
+-- parameters
+data VkPhysicalDeviceImageFormatInfo2 = VkPhysicalDeviceImageFormatInfo2
+  { -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkType"
+  vkType :: VkImageType
+  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkTiling"
+  vkTiling :: VkImageTiling
+  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkUsage"
+  vkUsage :: VkImageUsageFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceImageFormatInfo2" "vkFlags"
+  vkFlags :: VkImageCreateFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceImageFormatInfo2 where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceImageFormatInfo2 <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceImageFormatInfo2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceImageFormatInfo2))
+                *> poke (ptr `plusPtr` 16) (vkFormat (poked :: VkPhysicalDeviceImageFormatInfo2))
+                *> poke (ptr `plusPtr` 20) (vkType (poked :: VkPhysicalDeviceImageFormatInfo2))
+                *> poke (ptr `plusPtr` 24) (vkTiling (poked :: VkPhysicalDeviceImageFormatInfo2))
+                *> poke (ptr `plusPtr` 28) (vkUsage (poked :: VkPhysicalDeviceImageFormatInfo2))
+                *> poke (ptr `plusPtr` 32) (vkFlags (poked :: VkPhysicalDeviceImageFormatInfo2))
+-- | VkQueueFamilyProperties2 - Structure providing information about a queue
+-- family
+data VkQueueFamilyProperties2 = VkQueueFamilyProperties2
+  { -- No documentation found for Nested "VkQueueFamilyProperties2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkQueueFamilyProperties2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkQueueFamilyProperties2" "vkQueueFamilyProperties"
+  vkQueueFamilyProperties :: VkQueueFamilyProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkQueueFamilyProperties2 where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkQueueFamilyProperties2 <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkQueueFamilyProperties2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkQueueFamilyProperties2))
+                *> poke (ptr `plusPtr` 16) (vkQueueFamilyProperties (poked :: VkQueueFamilyProperties2))
+-- | VkPhysicalDeviceMemoryProperties2 - Structure specifying physical device
+-- memory properties
+data VkPhysicalDeviceMemoryProperties2 = VkPhysicalDeviceMemoryProperties2
+  { -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceMemoryProperties2" "vkMemoryProperties"
+  vkMemoryProperties :: VkPhysicalDeviceMemoryProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceMemoryProperties2 where
+  sizeOf ~_ = 536
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceMemoryProperties2 <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceMemoryProperties2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceMemoryProperties2))
+                *> poke (ptr `plusPtr` 16) (vkMemoryProperties (poked :: VkPhysicalDeviceMemoryProperties2))
+-- | VkSparseImageFormatProperties2 - Structure specifying sparse image
+-- format properties
+data VkSparseImageFormatProperties2 = VkSparseImageFormatProperties2
+  { -- No documentation found for Nested "VkSparseImageFormatProperties2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSparseImageFormatProperties2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSparseImageFormatProperties2" "vkProperties"
+  vkProperties :: VkSparseImageFormatProperties
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSparseImageFormatProperties2 where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkSparseImageFormatProperties2 <$> peek (ptr `plusPtr` 0)
+                                            <*> peek (ptr `plusPtr` 8)
+                                            <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSparseImageFormatProperties2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSparseImageFormatProperties2))
+                *> poke (ptr `plusPtr` 16) (vkProperties (poked :: VkSparseImageFormatProperties2))
+-- | VkPhysicalDeviceSparseImageFormatInfo2 - Structure specifying sparse
+-- image format inputs
+data VkPhysicalDeviceSparseImageFormatInfo2 = VkPhysicalDeviceSparseImageFormatInfo2
+  { -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkType"
+  vkType :: VkImageType
+  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkSamples"
+  vkSamples :: VkSampleCountFlagBits
+  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkUsage"
+  vkUsage :: VkImageUsageFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceSparseImageFormatInfo2" "vkTiling"
+  vkTiling :: VkImageTiling
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceSparseImageFormatInfo2 where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceSparseImageFormatInfo2 <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceSparseImageFormatInfo2))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceSparseImageFormatInfo2))
+                *> poke (ptr `plusPtr` 16) (vkFormat (poked :: VkPhysicalDeviceSparseImageFormatInfo2))
+                *> poke (ptr `plusPtr` 20) (vkType (poked :: VkPhysicalDeviceSparseImageFormatInfo2))
+                *> poke (ptr `plusPtr` 24) (vkSamples (poked :: VkPhysicalDeviceSparseImageFormatInfo2))
+                *> poke (ptr `plusPtr` 28) (vkUsage (poked :: VkPhysicalDeviceSparseImageFormatInfo2))
+                *> poke (ptr `plusPtr` 32) (vkTiling (poked :: VkPhysicalDeviceSparseImageFormatInfo2))
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance1.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance1.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance1.hs
@@ -0,0 +1,93 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1
+  ( VkCommandPoolTrimFlags(..)
+  , pattern VK_ERROR_OUT_OF_POOL_MEMORY
+  , pattern VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
+  , pattern VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
+  , pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+  , vkTrimCommandPool
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Foreign.Storable
+  ( Storable(..)
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.CommandPool
+  ( VkCommandPool
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  , VkFormatFeatureFlagBits(..)
+  , VkImageCreateFlagBits(..)
+  )
+
+
+-- ** VkCommandPoolTrimFlags
+
+-- | VkCommandPoolTrimFlags - Reserved for future use
+newtype VkCommandPoolTrimFlags = VkCommandPoolTrimFlags VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkCommandPoolTrimFlags where
+  
+  showsPrec p (VkCommandPoolTrimFlags x) = showParen (p >= 11) (showString "VkCommandPoolTrimFlags " . showsPrec 11 x)
+
+instance Read VkCommandPoolTrimFlags where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCommandPoolTrimFlags")
+                        v <- step readPrec
+                        pure (VkCommandPoolTrimFlags v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_OUT_OF_POOL_MEMORY"
+pattern VK_ERROR_OUT_OF_POOL_MEMORY :: VkResult
+pattern VK_ERROR_OUT_OF_POOL_MEMORY = VkResult (-1000069000)
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT"
+pattern VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT = VkImageCreateFlagBits 0x00000020
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT"
+pattern VK_FORMAT_FEATURE_TRANSFER_SRC_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_TRANSFER_SRC_BIT = VkFormatFeatureFlagBits 0x00004000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_TRANSFER_DST_BIT"
+pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT = VkFormatFeatureFlagBits 0x00008000
+-- | vkTrimCommandPool - Trim a command pool
+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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance2.hs
@@ -0,0 +1,265 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2
+  ( VkPointClippingBehavior(..)
+  , pattern VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
+  , pattern VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
+  , VkTessellationDomainOrigin(..)
+  , pattern VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
+  , pattern VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
+  , pattern VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO
+  , pattern VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
+  , pattern VK_IMAGE_CREATE_EXTENDED_USAGE_BIT
+  , VkInputAttachmentAspectReference(..)
+  , VkRenderPassInputAttachmentAspectCreateInfo(..)
+  , VkPhysicalDevicePointClippingProperties(..)
+  , VkImageViewUsageCreateInfo(..)
+  , VkPipelineTessellationDomainOriginStateCreateInfo(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageUsageFlags
+  , VkImageCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkImageAspectFlags
+  )
+
+
+-- ** VkPointClippingBehavior
+
+-- | VkPointClippingBehavior - Enum specifying the point clipping behaviour
+newtype VkPointClippingBehavior = VkPointClippingBehavior Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkPointClippingBehavior where
+  showsPrec _ VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES = showString "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"
+  showsPrec _ VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY = showString "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY"
+  showsPrec p (VkPointClippingBehavior x) = showParen (p >= 11) (showString "VkPointClippingBehavior " . showsPrec 11 x)
+
+instance Read VkPointClippingBehavior where
+  readPrec = parens ( choose [ ("VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES",       pure VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES)
+                             , ("VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY", pure VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPointClippingBehavior")
+                        v <- step readPrec
+                        pure (VkPointClippingBehavior v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPointClippingBehavior" "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES"
+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"
+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
+newtype VkTessellationDomainOrigin = VkTessellationDomainOrigin Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkTessellationDomainOrigin where
+  showsPrec _ VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = showString "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"
+  showsPrec _ VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = showString "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"
+  showsPrec p (VkTessellationDomainOrigin x) = showParen (p >= 11) (showString "VkTessellationDomainOrigin " . showsPrec 11 x)
+
+instance Read VkTessellationDomainOrigin where
+  readPrec = parens ( choose [ ("VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT", pure VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT)
+                             , ("VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT", pure VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkTessellationDomainOrigin")
+                        v <- step readPrec
+                        pure (VkTessellationDomainOrigin v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkTessellationDomainOrigin" "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT"
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT :: VkTessellationDomainOrigin
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT = VkTessellationDomainOrigin 0
+
+-- No documentation found for Nested "VkTessellationDomainOrigin" "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT"
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT :: VkTessellationDomainOrigin
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT = VkTessellationDomainOrigin 1
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL = VkImageLayout 1000117000
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL"
+pattern VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL = VkImageLayout 1000117001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES = VkStructureType 1000117000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO = VkStructureType 1000117001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO = VkStructureType 1000117002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO = VkStructureType 1000117003
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT"
+pattern VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT = VkImageCreateFlagBits 0x00000080
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT"
+pattern VK_IMAGE_CREATE_EXTENDED_USAGE_BIT :: VkImageCreateFlagBits
+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.
+data VkInputAttachmentAspectReference = VkInputAttachmentAspectReference
+  { -- No documentation found for Nested "VkInputAttachmentAspectReference" "vkSubpass"
+  vkSubpass :: Word32
+  , -- No documentation found for Nested "VkInputAttachmentAspectReference" "vkInputAttachmentIndex"
+  vkInputAttachmentIndex :: Word32
+  , -- No documentation found for Nested "VkInputAttachmentAspectReference" "vkAspectMask"
+  vkAspectMask :: VkImageAspectFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkInputAttachmentAspectReference where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkInputAttachmentAspectReference <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 4)
+                                              <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSubpass (poked :: VkInputAttachmentAspectReference))
+                *> poke (ptr `plusPtr` 4) (vkInputAttachmentIndex (poked :: VkInputAttachmentAspectReference))
+                *> poke (ptr `plusPtr` 8) (vkAspectMask (poked :: VkInputAttachmentAspectReference))
+-- | VkRenderPassInputAttachmentAspectCreateInfo - Structure specifying, for
+-- a given subpass\/input attachment pair, which aspect /can/ be read.
+data VkRenderPassInputAttachmentAspectCreateInfo = VkRenderPassInputAttachmentAspectCreateInfo
+  { -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkAspectReferenceCount"
+  vkAspectReferenceCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassInputAttachmentAspectCreateInfo" "vkPAspectReferences"
+  vkPAspectReferences :: Ptr VkInputAttachmentAspectReference
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRenderPassInputAttachmentAspectCreateInfo where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkRenderPassInputAttachmentAspectCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                         <*> peek (ptr `plusPtr` 8)
+                                                         <*> peek (ptr `plusPtr` 16)
+                                                         <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassInputAttachmentAspectCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassInputAttachmentAspectCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkAspectReferenceCount (poked :: VkRenderPassInputAttachmentAspectCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPAspectReferences (poked :: VkRenderPassInputAttachmentAspectCreateInfo))
+-- | VkPhysicalDevicePointClippingProperties - Structure describing the point
+-- clipping behavior supported by an implementation
+data VkPhysicalDevicePointClippingProperties = VkPhysicalDevicePointClippingProperties
+  { -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDevicePointClippingProperties" "vkPointClippingBehavior"
+  vkPointClippingBehavior :: VkPointClippingBehavior
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDevicePointClippingProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDevicePointClippingProperties <$> peek (ptr `plusPtr` 0)
+                                                     <*> peek (ptr `plusPtr` 8)
+                                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDevicePointClippingProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDevicePointClippingProperties))
+                *> poke (ptr `plusPtr` 16) (vkPointClippingBehavior (poked :: VkPhysicalDevicePointClippingProperties))
+-- | VkImageViewUsageCreateInfo - Specify the intended usage of an image view
+data VkImageViewUsageCreateInfo = VkImageViewUsageCreateInfo
+  { -- No documentation found for Nested "VkImageViewUsageCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageViewUsageCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageViewUsageCreateInfo" "vkUsage"
+  vkUsage :: VkImageUsageFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageViewUsageCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkImageViewUsageCreateInfo <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageViewUsageCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageViewUsageCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkUsage (poked :: VkImageViewUsageCreateInfo))
+-- | VkPipelineTessellationDomainOriginStateCreateInfo - Structure specifying
+-- the orientation of the tessellation domain
+data VkPipelineTessellationDomainOriginStateCreateInfo = VkPipelineTessellationDomainOriginStateCreateInfo
+  { -- No documentation found for Nested "VkPipelineTessellationDomainOriginStateCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineTessellationDomainOriginStateCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineTessellationDomainOriginStateCreateInfo" "vkDomainOrigin"
+  vkDomainOrigin :: VkTessellationDomainOrigin
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineTessellationDomainOriginStateCreateInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPipelineTessellationDomainOriginStateCreateInfo <$> peek (ptr `plusPtr` 0)
+                                                               <*> peek (ptr `plusPtr` 8)
+                                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineTessellationDomainOriginStateCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineTessellationDomainOriginStateCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkDomainOrigin (poked :: VkPipelineTessellationDomainOriginStateCreateInfo))
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance3.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance3.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_maintenance3.hs
@@ -0,0 +1,99 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
+  , vkGetDescriptorSetLayoutSupport
+  , VkPhysicalDeviceMaintenance3Properties(..)
+  , VkDescriptorSetLayoutSupport(..)
+  ) where
+
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorSetLayoutCreateInfo(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkDevice
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES = VkStructureType 1000168000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT = VkStructureType 1000168001
+-- | vkGetDescriptorSetLayoutSupport - Query whether a descriptor set layout
+-- can be created
+foreign import ccall "vkGetDescriptorSetLayoutSupport" vkGetDescriptorSetLayoutSupport :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkDescriptorSetLayoutCreateInfo) -> ("pSupport" ::: Ptr VkDescriptorSetLayoutSupport) -> IO ()
+-- | VkPhysicalDeviceMaintenance3Properties - Structure describing descriptor
+-- set properties
+data VkPhysicalDeviceMaintenance3Properties = VkPhysicalDeviceMaintenance3Properties
+  { -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkMaxPerSetDescriptors"
+  vkMaxPerSetDescriptors :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceMaintenance3Properties" "vkMaxMemoryAllocationSize"
+  vkMaxMemoryAllocationSize :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceMaintenance3Properties where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceMaintenance3Properties <$> peek (ptr `plusPtr` 0)
+                                                    <*> peek (ptr `plusPtr` 8)
+                                                    <*> peek (ptr `plusPtr` 16)
+                                                    <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceMaintenance3Properties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceMaintenance3Properties))
+                *> poke (ptr `plusPtr` 16) (vkMaxPerSetDescriptors (poked :: VkPhysicalDeviceMaintenance3Properties))
+                *> poke (ptr `plusPtr` 24) (vkMaxMemoryAllocationSize (poked :: VkPhysicalDeviceMaintenance3Properties))
+-- | VkDescriptorSetLayoutSupport - Structure returning information about
+-- whether a descriptor set layout can be supported
+data VkDescriptorSetLayoutSupport = VkDescriptorSetLayoutSupport
+  { -- No documentation found for Nested "VkDescriptorSetLayoutSupport" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorSetLayoutSupport" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorSetLayoutSupport" "vkSupported"
+  vkSupported :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorSetLayoutSupport where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDescriptorSetLayoutSupport <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetLayoutSupport))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetLayoutSupport))
+                *> poke (ptr `plusPtr` 16) (vkSupported (poked :: VkDescriptorSetLayoutSupport))
diff --git a/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_multiview.hs b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_multiview.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_multiview.hs
@@ -0,0 +1,147 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview
+  ( pattern VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
+  , pattern VK_DEPENDENCY_VIEW_LOCAL_BIT
+  , VkPhysicalDeviceMultiviewFeatures(..)
+  , VkPhysicalDeviceMultiviewProperties(..)
+  , VkRenderPassMultiviewCreateInfo(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkDependencyFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO"
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO = VkStructureType 1000053000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES = VkStructureType 1000053001
+-- 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"
+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
+data VkPhysicalDeviceMultiviewFeatures = VkPhysicalDeviceMultiviewFeatures
+  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkMultiview"
+  vkMultiview :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkMultiviewGeometryShader"
+  vkMultiviewGeometryShader :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewFeatures" "vkMultiviewTessellationShader"
+  vkMultiviewTessellationShader :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceMultiviewFeatures where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceMultiviewFeatures <$> 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 :: VkPhysicalDeviceMultiviewFeatures))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceMultiviewFeatures))
+                *> poke (ptr `plusPtr` 16) (vkMultiview (poked :: VkPhysicalDeviceMultiviewFeatures))
+                *> poke (ptr `plusPtr` 20) (vkMultiviewGeometryShader (poked :: VkPhysicalDeviceMultiviewFeatures))
+                *> poke (ptr `plusPtr` 24) (vkMultiviewTessellationShader (poked :: VkPhysicalDeviceMultiviewFeatures))
+-- | VkPhysicalDeviceMultiviewProperties - Structure describing multiview
+-- limits that can be supported by an implementation
+data VkPhysicalDeviceMultiviewProperties = VkPhysicalDeviceMultiviewProperties
+  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkMaxMultiviewViewCount"
+  vkMaxMultiviewViewCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewProperties" "vkMaxMultiviewInstanceIndex"
+  vkMaxMultiviewInstanceIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceMultiviewProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceMultiviewProperties <$> 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 :: VkPhysicalDeviceMultiviewProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceMultiviewProperties))
+                *> poke (ptr `plusPtr` 16) (vkMaxMultiviewViewCount (poked :: VkPhysicalDeviceMultiviewProperties))
+                *> poke (ptr `plusPtr` 20) (vkMaxMultiviewInstanceIndex (poked :: VkPhysicalDeviceMultiviewProperties))
+-- | VkRenderPassMultiviewCreateInfo - Structure containing multiview info
+-- for all subpasses
+data VkRenderPassMultiviewCreateInfo = VkRenderPassMultiviewCreateInfo
+  { -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkSubpassCount"
+  vkSubpassCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPViewMasks"
+  vkPViewMasks :: Ptr Word32
+  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkDependencyCount"
+  vkDependencyCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPViewOffsets"
+  vkPViewOffsets :: Ptr Int32
+  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkCorrelationMaskCount"
+  vkCorrelationMaskCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassMultiviewCreateInfo" "vkPCorrelationMasks"
+  vkPCorrelationMasks :: Ptr Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRenderPassMultiviewCreateInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkRenderPassMultiviewCreateInfo <$> 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 :: VkRenderPassMultiviewCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassMultiviewCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkSubpassCount (poked :: VkRenderPassMultiviewCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkPViewMasks (poked :: VkRenderPassMultiviewCreateInfo))
+                *> poke (ptr `plusPtr` 32) (vkDependencyCount (poked :: VkRenderPassMultiviewCreateInfo))
+                *> poke (ptr `plusPtr` 40) (vkPViewOffsets (poked :: VkRenderPassMultiviewCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkCorrelationMaskCount (poked :: VkRenderPassMultiviewCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkPCorrelationMasks (poked :: VkRenderPassMultiviewCreateInfo))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_sampler_ycbcr_conversion.hs
@@ -0,0 +1,566 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion
+  ( VkSamplerYcbcrModelConversion(..)
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
+  , VkSamplerYcbcrRange(..)
+  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL
+  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW
+  , VkChromaLocation(..)
+  , pattern VK_CHROMA_LOCATION_COSITED_EVEN
+  , pattern VK_CHROMA_LOCATION_MIDPOINT
+  , pattern VK_FORMAT_G8B8G8R8_422_UNORM
+  , pattern VK_FORMAT_B8G8R8G8_422_UNORM
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
+  , pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
+  , pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
+  , pattern VK_FORMAT_R10X6_UNORM_PACK16
+  , pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16
+  , pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
+  , pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
+  , pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
+  , pattern VK_FORMAT_R12X4_UNORM_PACK16
+  , pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16
+  , pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
+  , pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
+  , pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
+  , pattern VK_FORMAT_G16B16G16R16_422_UNORM
+  , pattern VK_FORMAT_B16G16R16G16_422_UNORM
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
+  , pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
+  , pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
+  , pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
+  , pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
+  , pattern VK_IMAGE_CREATE_DISJOINT_BIT
+  , pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+  , pattern VK_FORMAT_FEATURE_DISJOINT_BIT
+  , pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
+  , pattern VK_IMAGE_ASPECT_PLANE_0_BIT
+  , pattern VK_IMAGE_ASPECT_PLANE_1_BIT
+  , pattern VK_IMAGE_ASPECT_PLANE_2_BIT
+  , VkSamplerYcbcrConversion
+  , vkCreateSamplerYcbcrConversion
+  , vkDestroySamplerYcbcrConversion
+  , VkSamplerYcbcrConversionInfo(..)
+  , VkSamplerYcbcrConversionCreateInfo(..)
+  , VkBindImagePlaneMemoryInfo(..)
+  , VkImagePlaneMemoryRequirementsInfo(..)
+  , VkPhysicalDeviceSamplerYcbcrConversionFeatures(..)
+  , VkSamplerYcbcrConversionImageFormatProperties(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkFormat(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  , VkFormatFeatureFlagBits(..)
+  , VkImageCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.ImageView
+  ( VkComponentMapping(..)
+  )
+import Graphics.Vulkan.Core10.Sampler
+  ( VkFilter(..)
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkImageAspectFlagBits(..)
+  )
+
+
+-- ** VkSamplerYcbcrModelConversion
+
+-- | VkSamplerYcbcrModelConversion - Color model component of a color space
+newtype VkSamplerYcbcrModelConversion = VkSamplerYcbcrModelConversion Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSamplerYcbcrModelConversion where
+  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
+  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
+  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
+  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
+  showsPrec _ VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = showString "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
+  showsPrec p (VkSamplerYcbcrModelConversion x) = showParen (p >= 11) (showString "VkSamplerYcbcrModelConversion " . showsPrec 11 x)
+
+instance Read VkSamplerYcbcrModelConversion where
+  readPrec = parens ( choose [ ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY",   pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY)
+                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY", pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY)
+                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709",      pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709)
+                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601",      pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601)
+                             , ("VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020",     pure VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSamplerYcbcrModelConversion")
+                        v <- step readPrec
+                        pure (VkSamplerYcbcrModelConversion v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY = VkSamplerYcbcrModelConversion 0
+
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY = VkSamplerYcbcrModelConversion 1
+
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709 = VkSamplerYcbcrModelConversion 2
+
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601 = VkSamplerYcbcrModelConversion 3
+
+-- No documentation found for Nested "VkSamplerYcbcrModelConversion" "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020 = VkSamplerYcbcrModelConversion 4
+-- ** VkSamplerYcbcrRange
+
+-- | VkSamplerYcbcrRange - Range of encoded values in a color space
+newtype VkSamplerYcbcrRange = VkSamplerYcbcrRange Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSamplerYcbcrRange where
+  showsPrec _ VK_SAMPLER_YCBCR_RANGE_ITU_FULL = showString "VK_SAMPLER_YCBCR_RANGE_ITU_FULL"
+  showsPrec _ VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = showString "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"
+  showsPrec p (VkSamplerYcbcrRange x) = showParen (p >= 11) (showString "VkSamplerYcbcrRange " . showsPrec 11 x)
+
+instance Read VkSamplerYcbcrRange where
+  readPrec = parens ( choose [ ("VK_SAMPLER_YCBCR_RANGE_ITU_FULL",   pure VK_SAMPLER_YCBCR_RANGE_ITU_FULL)
+                             , ("VK_SAMPLER_YCBCR_RANGE_ITU_NARROW", pure VK_SAMPLER_YCBCR_RANGE_ITU_NARROW)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSamplerYcbcrRange")
+                        v <- step readPrec
+                        pure (VkSamplerYcbcrRange v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkSamplerYcbcrRange" "VK_SAMPLER_YCBCR_RANGE_ITU_FULL"
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL :: VkSamplerYcbcrRange
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL = VkSamplerYcbcrRange 0
+
+-- No documentation found for Nested "VkSamplerYcbcrRange" "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW"
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW :: VkSamplerYcbcrRange
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW = VkSamplerYcbcrRange 1
+-- ** VkChromaLocation
+
+-- | VkChromaLocation - Position of downsampled chroma samples
+newtype VkChromaLocation = VkChromaLocation Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkChromaLocation where
+  showsPrec _ VK_CHROMA_LOCATION_COSITED_EVEN = showString "VK_CHROMA_LOCATION_COSITED_EVEN"
+  showsPrec _ VK_CHROMA_LOCATION_MIDPOINT = showString "VK_CHROMA_LOCATION_MIDPOINT"
+  showsPrec p (VkChromaLocation x) = showParen (p >= 11) (showString "VkChromaLocation " . showsPrec 11 x)
+
+instance Read VkChromaLocation where
+  readPrec = parens ( choose [ ("VK_CHROMA_LOCATION_COSITED_EVEN", pure VK_CHROMA_LOCATION_COSITED_EVEN)
+                             , ("VK_CHROMA_LOCATION_MIDPOINT",     pure VK_CHROMA_LOCATION_MIDPOINT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkChromaLocation")
+                        v <- step readPrec
+                        pure (VkChromaLocation v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkChromaLocation" "VK_CHROMA_LOCATION_COSITED_EVEN"
+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"
+pattern VK_CHROMA_LOCATION_MIDPOINT :: VkChromaLocation
+pattern VK_CHROMA_LOCATION_MIDPOINT = VkChromaLocation 1
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_G8B8G8R8_422_UNORM"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+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"
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO = VkStructureType 1000156000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO"
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO = VkStructureType 1000156001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO"
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO = VkStructureType 1000156002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO"
+pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO = VkStructureType 1000156003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES = VkStructureType 1000156004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES"
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES = VkStructureType 1000156005
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION"
+pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION :: VkObjectType
+pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = VkObjectType 1000156000
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_DISJOINT_BIT"
+pattern VK_IMAGE_CREATE_DISJOINT_BIT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_DISJOINT_BIT = VkImageCreateFlagBits 0x00000200
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT"
+pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT = VkFormatFeatureFlagBits 0x00020000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = VkFormatFeatureFlagBits 0x00040000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = VkFormatFeatureFlagBits 0x00080000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = VkFormatFeatureFlagBits 0x00100000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = VkFormatFeatureFlagBits 0x00200000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_DISJOINT_BIT"
+pattern VK_FORMAT_FEATURE_DISJOINT_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_DISJOINT_BIT = VkFormatFeatureFlagBits 0x00400000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT"
+pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT = VkFormatFeatureFlagBits 0x00800000
+-- No documentation found for Nested "VkImageAspectFlagBits" "VK_IMAGE_ASPECT_PLANE_0_BIT"
+pattern VK_IMAGE_ASPECT_PLANE_0_BIT :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_PLANE_0_BIT = VkImageAspectFlagBits 0x00000010
+-- No documentation found for Nested "VkImageAspectFlagBits" "VK_IMAGE_ASPECT_PLANE_1_BIT"
+pattern VK_IMAGE_ASPECT_PLANE_1_BIT :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_PLANE_1_BIT = VkImageAspectFlagBits 0x00000020
+-- No documentation found for Nested "VkImageAspectFlagBits" "VK_IMAGE_ASPECT_PLANE_2_BIT"
+pattern VK_IMAGE_ASPECT_PLANE_2_BIT :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_PLANE_2_BIT = VkImageAspectFlagBits 0x00000040
+-- | Dummy data to tag the 'Ptr' with
+data VkSamplerYcbcrConversion_T
+-- | VkSamplerYcbcrConversion - NO SHORT DESCRIPTION PROVIDED
+type VkSamplerYcbcrConversion = Ptr VkSamplerYcbcrConversion_T
+-- | vkCreateSamplerYcbcrConversion - Create a new Ycbcr conversion
+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
+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
+data VkSamplerYcbcrConversionInfo = VkSamplerYcbcrConversionInfo
+  { -- No documentation found for Nested "VkSamplerYcbcrConversionInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionInfo" "vkConversion"
+  vkConversion :: VkSamplerYcbcrConversion
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSamplerYcbcrConversionInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSamplerYcbcrConversionInfo <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerYcbcrConversionInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerYcbcrConversionInfo))
+                *> poke (ptr `plusPtr` 16) (vkConversion (poked :: VkSamplerYcbcrConversionInfo))
+-- | VkSamplerYcbcrConversionCreateInfo - Structure specifying the parameters
+-- of the newly created conversion
+data VkSamplerYcbcrConversionCreateInfo = VkSamplerYcbcrConversionCreateInfo
+  { -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkYcbcrModel"
+  vkYcbcrModel :: VkSamplerYcbcrModelConversion
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkYcbcrRange"
+  vkYcbcrRange :: VkSamplerYcbcrRange
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkComponents"
+  vkComponents :: VkComponentMapping
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkXChromaOffset"
+  vkXChromaOffset :: VkChromaLocation
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkYChromaOffset"
+  vkYChromaOffset :: VkChromaLocation
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkChromaFilter"
+  vkChromaFilter :: VkFilter
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionCreateInfo" "vkForceExplicitReconstruction"
+  vkForceExplicitReconstruction :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSamplerYcbcrConversionCreateInfo where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkSamplerYcbcrConversionCreateInfo <$> 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` 44)
+                                                <*> peek (ptr `plusPtr` 48)
+                                                <*> peek (ptr `plusPtr` 52)
+                                                <*> peek (ptr `plusPtr` 56)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 16) (vkFormat (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 20) (vkYcbcrModel (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 24) (vkYcbcrRange (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 28) (vkComponents (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 44) (vkXChromaOffset (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 48) (vkYChromaOffset (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 52) (vkChromaFilter (poked :: VkSamplerYcbcrConversionCreateInfo))
+                *> poke (ptr `plusPtr` 56) (vkForceExplicitReconstruction (poked :: VkSamplerYcbcrConversionCreateInfo))
+-- | VkBindImagePlaneMemoryInfo - Structure specifying how to bind an image
+-- plane to memory
+data VkBindImagePlaneMemoryInfo = VkBindImagePlaneMemoryInfo
+  { -- No documentation found for Nested "VkBindImagePlaneMemoryInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBindImagePlaneMemoryInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBindImagePlaneMemoryInfo" "vkPlaneAspect"
+  vkPlaneAspect :: VkImageAspectFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBindImagePlaneMemoryInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkBindImagePlaneMemoryInfo <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindImagePlaneMemoryInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindImagePlaneMemoryInfo))
+                *> poke (ptr `plusPtr` 16) (vkPlaneAspect (poked :: VkBindImagePlaneMemoryInfo))
+-- | VkImagePlaneMemoryRequirementsInfo - Structure specifying image plane
+-- for memory requirements
+data VkImagePlaneMemoryRequirementsInfo = VkImagePlaneMemoryRequirementsInfo
+  { -- No documentation found for Nested "VkImagePlaneMemoryRequirementsInfo" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImagePlaneMemoryRequirementsInfo" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImagePlaneMemoryRequirementsInfo" "vkPlaneAspect"
+  vkPlaneAspect :: VkImageAspectFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImagePlaneMemoryRequirementsInfo where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkImagePlaneMemoryRequirementsInfo <$> peek (ptr `plusPtr` 0)
+                                                <*> peek (ptr `plusPtr` 8)
+                                                <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImagePlaneMemoryRequirementsInfo))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImagePlaneMemoryRequirementsInfo))
+                *> poke (ptr `plusPtr` 16) (vkPlaneAspect (poked :: VkImagePlaneMemoryRequirementsInfo))
+-- | VkPhysicalDeviceSamplerYcbcrConversionFeatures - Structure describing
+-- Y’CbCr conversion features that can be supported by an implementation
+data VkPhysicalDeviceSamplerYcbcrConversionFeatures = VkPhysicalDeviceSamplerYcbcrConversionFeatures
+  { -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerYcbcrConversionFeatures" "vkSamplerYcbcrConversion"
+  vkSamplerYcbcrConversion :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceSamplerYcbcrConversionFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceSamplerYcbcrConversionFeatures <$> peek (ptr `plusPtr` 0)
+                                                            <*> peek (ptr `plusPtr` 8)
+                                                            <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceSamplerYcbcrConversionFeatures))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceSamplerYcbcrConversionFeatures))
+                *> poke (ptr `plusPtr` 16) (vkSamplerYcbcrConversion (poked :: VkPhysicalDeviceSamplerYcbcrConversionFeatures))
+-- | VkSamplerYcbcrConversionImageFormatProperties - Structure specifying
+-- combined image sampler descriptor count for multi-planar images
+data VkSamplerYcbcrConversionImageFormatProperties = VkSamplerYcbcrConversionImageFormatProperties
+  { -- No documentation found for Nested "VkSamplerYcbcrConversionImageFormatProperties" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionImageFormatProperties" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSamplerYcbcrConversionImageFormatProperties" "vkCombinedImageSamplerDescriptorCount"
+  vkCombinedImageSamplerDescriptorCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSamplerYcbcrConversionImageFormatProperties where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSamplerYcbcrConversionImageFormatProperties <$> peek (ptr `plusPtr` 0)
+                                                           <*> peek (ptr `plusPtr` 8)
+                                                           <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerYcbcrConversionImageFormatProperties))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerYcbcrConversionImageFormatProperties))
+                *> poke (ptr `plusPtr` 16) (vkCombinedImageSamplerDescriptorCount (poked :: VkSamplerYcbcrConversionImageFormatProperties))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_shader_draw_parameters.hs
@@ -0,0 +1,69 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_shader_draw_parameters
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES
+  , VkPhysicalDeviceShaderDrawParameterFeatures(..)
+  ) where
+
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VkStructureType 1000063000
+-- | VkPhysicalDeviceShaderDrawParameterFeatures - Structure describing
+-- shader draw parameter features that can be supported by an
+-- implementation
+--
+-- = Description
+-- #_description#
+--
+-- If the @VkPhysicalDeviceShaderDrawParameterFeatures@ structure is
+-- included in the @pNext@ chain of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2',
+-- it is filled with a value indicating whether the feature is supported.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderDrawParameterFeatures" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderDrawParameterFeatures" "vkShaderDrawParameters"
+  vkShaderDrawParameters :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceShaderDrawParameterFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceShaderDrawParameterFeatures <$> peek (ptr `plusPtr` 0)
+                                                         <*> peek (ptr `plusPtr` 8)
+                                                         <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceShaderDrawParameterFeatures))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceShaderDrawParameterFeatures))
+                *> poke (ptr `plusPtr` 16) (vkShaderDrawParameters (poked :: VkPhysicalDeviceShaderDrawParameterFeatures))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Core11/Promoted_from_VK_KHR_variable_pointers.hs
@@ -0,0 +1,54 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
+  , VkPhysicalDeviceVariablePointerFeatures(..)
+  ) where
+
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VkStructureType 1000120000
+-- | VkPhysicalDeviceVariablePointerFeatures - Structure describing variable
+-- pointers features that can be supported by an implementation
+data VkPhysicalDeviceVariablePointerFeatures = VkPhysicalDeviceVariablePointerFeatures
+  { -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkVariablePointersStorageBuffer"
+  vkVariablePointersStorageBuffer :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceVariablePointerFeatures" "vkVariablePointers"
+  vkVariablePointers :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceVariablePointerFeatures where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceVariablePointerFeatures <$> 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 :: VkPhysicalDeviceVariablePointerFeatures))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceVariablePointerFeatures))
+                *> poke (ptr `plusPtr` 16) (vkVariablePointersStorageBuffer (poked :: VkPhysicalDeviceVariablePointerFeatures))
+                *> poke (ptr `plusPtr` 20) (vkVariablePointers (poked :: VkPhysicalDeviceVariablePointerFeatures))
diff --git a/src/Graphics/Vulkan/DescriptorSet.hs b/src/Graphics/Vulkan/DescriptorSet.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/DescriptorSet.hs
+++ /dev/null
@@ -1,452 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.DescriptorSet where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Graphics.Vulkan.Buffer( VkBuffer(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)
-                             , VkShaderStageFlags(..)
-                             )
-import Graphics.Vulkan.Sampler( VkSampler(..)
-                              )
-import Graphics.Vulkan.Image( VkImageLayout(..)
-                            )
-import Graphics.Vulkan.ImageView( VkImageView(..)
-                                )
-import Graphics.Vulkan.BufferView( VkBufferView(..)
-                                 )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** vkUpdateDescriptorSets
-foreign import ccall "vkUpdateDescriptorSets" vkUpdateDescriptorSets ::
-  VkDevice ->
-  Word32 ->
-    Ptr VkWriteDescriptorSet ->
-      Word32 -> Ptr VkCopyDescriptorSet -> IO ()
-
--- ** VkDescriptorPoolResetFlags
--- | Opaque flag
-newtype VkDescriptorPoolResetFlags = VkDescriptorPoolResetFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** vkAllocateDescriptorSets
-foreign import ccall "vkAllocateDescriptorSets" vkAllocateDescriptorSets ::
-  VkDevice ->
-  Ptr VkDescriptorSetAllocateInfo ->
-    Ptr VkDescriptorSet -> IO VkResult
-
-
-data VkDescriptorBufferInfo =
-  VkDescriptorBufferInfo{ vkBuffer :: VkBuffer 
-                        , vkOffset :: VkDeviceSize 
-                        , vkRange :: VkDeviceSize 
-                        }
-  deriving (Eq)
-
-instance Storable VkDescriptorBufferInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkDescriptorBufferInfo <$> peek (ptr `plusPtr` 0)
-                                    <*> peek (ptr `plusPtr` 8)
-                                    <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkDescriptorBufferInfo))
-                *> poke (ptr `plusPtr` 8) (vkOffset (poked :: VkDescriptorBufferInfo))
-                *> poke (ptr `plusPtr` 16) (vkRange (poked :: VkDescriptorBufferInfo))
-
-
-
-data VkDescriptorImageInfo =
-  VkDescriptorImageInfo{ vkSampler :: VkSampler 
-                       , vkImageView :: VkImageView 
-                       , vkImageLayout :: VkImageLayout 
-                       }
-  deriving (Eq)
-
-instance Storable VkDescriptorImageInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkDescriptorImageInfo <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSampler (poked :: VkDescriptorImageInfo))
-                *> poke (ptr `plusPtr` 8) (vkImageView (poked :: VkDescriptorImageInfo))
-                *> poke (ptr `plusPtr` 16) (vkImageLayout (poked :: VkDescriptorImageInfo))
-
-
-
-data VkCopyDescriptorSet =
-  VkCopyDescriptorSet{ vkSType :: VkStructureType 
-                     , vkPNext :: Ptr Void 
-                     , vkSrcSet :: VkDescriptorSet 
-                     , vkSrcBinding :: Word32 
-                     , vkSrcArrayElement :: Word32 
-                     , vkDstSet :: VkDescriptorSet 
-                     , vkDstBinding :: Word32 
-                     , vkDstArrayElement :: Word32 
-                     , vkDescriptorCount :: Word32 
-                     }
-  deriving (Eq)
-
-instance Storable VkCopyDescriptorSet where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkCopyDescriptorSet <$> peek (ptr `plusPtr` 0)
-                                 <*> peek (ptr `plusPtr` 8)
-                                 <*> peek (ptr `plusPtr` 16)
-                                 <*> peek (ptr `plusPtr` 24)
-                                 <*> peek (ptr `plusPtr` 28)
-                                 <*> peek (ptr `plusPtr` 32)
-                                 <*> peek (ptr `plusPtr` 40)
-                                 <*> peek (ptr `plusPtr` 44)
-                                 <*> peek (ptr `plusPtr` 48)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 16) (vkSrcSet (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 24) (vkSrcBinding (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 28) (vkSrcArrayElement (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 32) (vkDstSet (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 40) (vkDstBinding (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 44) (vkDstArrayElement (poked :: VkCopyDescriptorSet))
-                *> poke (ptr `plusPtr` 48) (vkDescriptorCount (poked :: VkCopyDescriptorSet))
-
-
--- ** vkDestroyDescriptorPool
-foreign import ccall "vkDestroyDescriptorPool" vkDestroyDescriptorPool ::
-  VkDevice -> VkDescriptorPool -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** vkCreateDescriptorSetLayout
-foreign import ccall "vkCreateDescriptorSetLayout" vkCreateDescriptorSetLayout ::
-  VkDevice ->
-  Ptr VkDescriptorSetLayoutCreateInfo ->
-    Ptr VkAllocationCallbacks ->
-      Ptr VkDescriptorSetLayout -> IO VkResult
-
-newtype VkDescriptorPool = VkDescriptorPool Word64
-  deriving (Eq, Storable)
-
--- ** vkResetDescriptorPool
-foreign import ccall "vkResetDescriptorPool" vkResetDescriptorPool ::
-  VkDevice ->
-  VkDescriptorPool -> VkDescriptorPoolResetFlags -> IO VkResult
-
-newtype VkDescriptorSetLayout = VkDescriptorSetLayout Word64
-  deriving (Eq, Storable)
-
--- ** vkFreeDescriptorSets
-foreign import ccall "vkFreeDescriptorSets" vkFreeDescriptorSets ::
-  VkDevice ->
-  VkDescriptorPool -> Word32 -> Ptr VkDescriptorSet -> IO VkResult
-
-
-data VkDescriptorPoolCreateInfo =
-  VkDescriptorPoolCreateInfo{ vkSType :: VkStructureType 
-                            , vkPNext :: Ptr Void 
-                            , vkFlags :: VkDescriptorPoolCreateFlags 
-                            , vkMaxSets :: Word32 
-                            , vkPoolSizeCount :: Word32 
-                            , vkPPoolSizes :: Ptr VkDescriptorPoolSize 
-                            }
-  deriving (Eq)
-
-instance Storable VkDescriptorPoolCreateInfo where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkDescriptorPoolCreateInfo <$> peek (ptr `plusPtr` 0)
-                                        <*> peek (ptr `plusPtr` 8)
-                                        <*> peek (ptr `plusPtr` 16)
-                                        <*> peek (ptr `plusPtr` 20)
-                                        <*> peek (ptr `plusPtr` 24)
-                                        <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorPoolCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorPoolCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorPoolCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkMaxSets (poked :: VkDescriptorPoolCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPoolSizeCount (poked :: VkDescriptorPoolCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPPoolSizes (poked :: VkDescriptorPoolCreateInfo))
-
-
--- ** VkDescriptorSetLayoutCreateFlags
--- | Opaque flag
-newtype VkDescriptorSetLayoutCreateFlags = VkDescriptorSetLayoutCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkDescriptorSetLayoutCreateInfo =
-  VkDescriptorSetLayoutCreateInfo{ vkSType :: VkStructureType 
-                                 , vkPNext :: Ptr Void 
-                                 , vkFlags :: VkDescriptorSetLayoutCreateFlags 
-                                 , vkBindingCount :: Word32 
-                                 , vkPBindings :: Ptr VkDescriptorSetLayoutBinding 
-                                 }
-  deriving (Eq)
-
-instance Storable VkDescriptorSetLayoutCreateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkDescriptorSetLayoutCreateInfo <$> 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 :: VkDescriptorSetLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDescriptorSetLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkBindingCount (poked :: VkDescriptorSetLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPBindings (poked :: VkDescriptorSetLayoutCreateInfo))
-
-
--- ** VkDescriptorPoolCreateFlags
-
-newtype VkDescriptorPoolCreateFlagBits = VkDescriptorPoolCreateFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkDescriptorPoolCreateFlagBits
-type VkDescriptorPoolCreateFlags = VkDescriptorPoolCreateFlagBits
-
-instance Show VkDescriptorPoolCreateFlagBits where
-  showsPrec _ VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = showString "VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT"
-  
-  showsPrec p (VkDescriptorPoolCreateFlagBits x) = showParen (p >= 11) (showString "VkDescriptorPoolCreateFlagBits " . showsPrec 11 x)
-
-instance Read VkDescriptorPoolCreateFlagBits where
-  readPrec = parens ( choose [ ("VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT", pure VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDescriptorPoolCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkDescriptorPoolCreateFlagBits v)
-                        )
-                    )
-
--- | Descriptor sets may be freed individually
-pattern VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT = VkDescriptorPoolCreateFlagBits 0x1
-
-
-
-data VkDescriptorPoolSize =
-  VkDescriptorPoolSize{ vkType :: VkDescriptorType 
-                      , vkDescriptorCount :: Word32 
-                      }
-  deriving (Eq)
-
-instance Storable VkDescriptorPoolSize where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek ptr = VkDescriptorPoolSize <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 4)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkDescriptorPoolSize))
-                *> poke (ptr `plusPtr` 4) (vkDescriptorCount (poked :: VkDescriptorPoolSize))
-
-
-newtype VkDescriptorSet = VkDescriptorSet Word64
-  deriving (Eq, Storable)
-
-
-data VkWriteDescriptorSet =
-  VkWriteDescriptorSet{ vkSType :: VkStructureType 
-                      , vkPNext :: Ptr Void 
-                      , vkDstSet :: VkDescriptorSet 
-                      , vkDstBinding :: Word32 
-                      , vkDstArrayElement :: Word32 
-                      , vkDescriptorCount :: Word32 
-                      , vkDescriptorType :: VkDescriptorType 
-                      , vkPImageInfo :: Ptr VkDescriptorImageInfo 
-                      , vkPBufferInfo :: Ptr VkDescriptorBufferInfo 
-                      , vkPTexelBufferView :: Ptr VkBufferView 
-                      }
-  deriving (Eq)
-
-instance Storable VkWriteDescriptorSet where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkWriteDescriptorSet <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 8)
-                                  <*> peek (ptr `plusPtr` 16)
-                                  <*> 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)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 16) (vkDstSet (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 24) (vkDstBinding (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 28) (vkDstArrayElement (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 32) (vkDescriptorCount (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 36) (vkDescriptorType (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 40) (vkPImageInfo (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 48) (vkPBufferInfo (poked :: VkWriteDescriptorSet))
-                *> poke (ptr `plusPtr` 56) (vkPTexelBufferView (poked :: VkWriteDescriptorSet))
-
-
--- ** vkCreateDescriptorPool
-foreign import ccall "vkCreateDescriptorPool" vkCreateDescriptorPool ::
-  VkDevice ->
-  Ptr VkDescriptorPoolCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkDescriptorPool -> IO VkResult
-
--- ** vkDestroyDescriptorSetLayout
-foreign import ccall "vkDestroyDescriptorSetLayout" vkDestroyDescriptorSetLayout ::
-  VkDevice ->
-  VkDescriptorSetLayout -> Ptr VkAllocationCallbacks -> IO ()
-
-
-data VkDescriptorSetLayoutBinding =
-  VkDescriptorSetLayoutBinding{ vkBinding :: Word32 
-                              , vkDescriptorType :: VkDescriptorType 
-                              , vkDescriptorCount :: Word32 
-                              , vkStageFlags :: VkShaderStageFlags 
-                              , vkPImmutableSamplers :: Ptr VkSampler 
-                              }
-  deriving (Eq)
-
-instance Storable VkDescriptorSetLayoutBinding where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkDescriptorSetLayoutBinding <$> 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) (vkBinding (poked :: VkDescriptorSetLayoutBinding))
-                *> poke (ptr `plusPtr` 4) (vkDescriptorType (poked :: VkDescriptorSetLayoutBinding))
-                *> poke (ptr `plusPtr` 8) (vkDescriptorCount (poked :: VkDescriptorSetLayoutBinding))
-                *> poke (ptr `plusPtr` 12) (vkStageFlags (poked :: VkDescriptorSetLayoutBinding))
-                *> poke (ptr `plusPtr` 16) (vkPImmutableSamplers (poked :: VkDescriptorSetLayoutBinding))
-
-
--- ** VkDescriptorType
-
-newtype VkDescriptorType = VkDescriptorType Int32
-  deriving (Eq, Storable)
-
-instance Show VkDescriptorType where
-  showsPrec _ VK_DESCRIPTOR_TYPE_SAMPLER = showString "VK_DESCRIPTOR_TYPE_SAMPLER"
-  showsPrec _ VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = showString "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER"
-  showsPrec _ VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = showString "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE"
-  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = showString "VK_DESCRIPTOR_TYPE_STORAGE_IMAGE"
-  showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = showString "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER"
-  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = showString "VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER"
-  showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = showString "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER"
-  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = showString "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER"
-  showsPrec _ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = showString "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC"
-  showsPrec _ VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = showString "VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC"
-  showsPrec _ VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = showString "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT"
-  showsPrec p (VkDescriptorType x) = showParen (p >= 11) (showString "VkDescriptorType " . showsPrec 11 x)
-
-instance Read VkDescriptorType where
-  readPrec = parens ( choose [ ("VK_DESCRIPTOR_TYPE_SAMPLER", pure VK_DESCRIPTOR_TYPE_SAMPLER)
-                             , ("VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER", pure VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)
-                             , ("VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE", pure VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE)
-                             , ("VK_DESCRIPTOR_TYPE_STORAGE_IMAGE", pure VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)
-                             , ("VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER", pure VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER)
-                             , ("VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER", pure VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)
-                             , ("VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER", pure VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER)
-                             , ("VK_DESCRIPTOR_TYPE_STORAGE_BUFFER", pure VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
-                             , ("VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC", pure VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)
-                             , ("VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC", pure VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)
-                             , ("VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT", pure VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDescriptorType")
-                        v <- step readPrec
-                        pure (VkDescriptorType v)
-                        )
-                    )
-
-
-pattern VK_DESCRIPTOR_TYPE_SAMPLER = VkDescriptorType 0
-
-pattern VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER = VkDescriptorType 1
-
-pattern VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE = VkDescriptorType 2
-
-pattern VK_DESCRIPTOR_TYPE_STORAGE_IMAGE = VkDescriptorType 3
-
-pattern VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER = VkDescriptorType 4
-
-pattern VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER = VkDescriptorType 5
-
-pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER = VkDescriptorType 6
-
-pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER = VkDescriptorType 7
-
-pattern VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = VkDescriptorType 8
-
-pattern VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = VkDescriptorType 9
-
-pattern VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = VkDescriptorType 10
-
-
-data VkDescriptorSetAllocateInfo =
-  VkDescriptorSetAllocateInfo{ vkSType :: VkStructureType 
-                             , vkPNext :: Ptr Void 
-                             , vkDescriptorPool :: VkDescriptorPool 
-                             , vkDescriptorSetCount :: Word32 
-                             , vkPSetLayouts :: Ptr VkDescriptorSetLayout 
-                             }
-  deriving (Eq)
-
-instance Storable VkDescriptorSetAllocateInfo where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkDescriptorSetAllocateInfo <$> peek (ptr `plusPtr` 0)
-                                         <*> peek (ptr `plusPtr` 8)
-                                         <*> peek (ptr `plusPtr` 16)
-                                         <*> peek (ptr `plusPtr` 24)
-                                         <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetAllocateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetAllocateInfo))
-                *> poke (ptr `plusPtr` 16) (vkDescriptorPool (poked :: VkDescriptorSetAllocateInfo))
-                *> poke (ptr `plusPtr` 24) (vkDescriptorSetCount (poked :: VkDescriptorSetAllocateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPSetLayouts (poked :: VkDescriptorSetAllocateInfo))
-
-
diff --git a/src/Graphics/Vulkan/Device.hs b/src/Graphics/Vulkan/Device.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Device.hs
+++ /dev/null
@@ -1,303 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Device where
-
-import Data.Word( Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CFloat
-                      , CFloat(..)
-                      , CChar
-                      , CSize(..)
-                      )
-
--- ** vkCreateDevice
-foreign import ccall "vkCreateDevice" vkCreateDevice ::
-  VkPhysicalDevice ->
-  Ptr VkDeviceCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkDevice -> IO VkResult
-
-
-data VkPhysicalDeviceFeatures =
-  VkPhysicalDeviceFeatures{ vkRobustBufferAccess :: VkBool32 
-                          , vkFullDrawIndexUint32 :: VkBool32 
-                          , vkImageCubeArray :: VkBool32 
-                          , vkIndependentBlend :: VkBool32 
-                          , vkGeometryShader :: VkBool32 
-                          , vkTessellationShader :: VkBool32 
-                          , vkSampleRateShading :: VkBool32 
-                          , vkDualSrcBlend :: VkBool32 
-                          , vkLogicOp :: VkBool32 
-                          , vkMultiDrawIndirect :: VkBool32 
-                          , vkDrawIndirectFirstInstance :: VkBool32 
-                          , vkDepthClamp :: VkBool32 
-                          , vkDepthBiasClamp :: VkBool32 
-                          , vkFillModeNonSolid :: VkBool32 
-                          , vkDepthBounds :: VkBool32 
-                          , vkWideLines :: VkBool32 
-                          , vkLargePoints :: VkBool32 
-                          , vkAlphaToOne :: VkBool32 
-                          , vkMultiViewport :: VkBool32 
-                          , vkSamplerAnisotropy :: VkBool32 
-                          , vkTextureCompressionETC2 :: VkBool32 
-                          , vkTextureCompressionASTC_LDR :: VkBool32 
-                          , vkTextureCompressionBC :: VkBool32 
-                          , vkOcclusionQueryPrecise :: VkBool32 
-                          , vkPipelineStatisticsQuery :: VkBool32 
-                          , vkVertexPipelineStoresAndAtomics :: VkBool32 
-                          , vkFragmentStoresAndAtomics :: VkBool32 
-                          , vkShaderTessellationAndGeometryPointSize :: VkBool32 
-                          , vkShaderImageGatherExtended :: VkBool32 
-                          , vkShaderStorageImageExtendedFormats :: VkBool32 
-                          , vkShaderStorageImageMultisample :: VkBool32 
-                          , vkShaderStorageImageReadWithoutFormat :: VkBool32 
-                          , vkShaderStorageImageWriteWithoutFormat :: VkBool32 
-                          , vkShaderUniformBufferArrayDynamicIndexing :: VkBool32 
-                          , vkShaderSampledImageArrayDynamicIndexing :: VkBool32 
-                          , vkShaderStorageBufferArrayDynamicIndexing :: VkBool32 
-                          , vkShaderStorageImageArrayDynamicIndexing :: VkBool32 
-                          , vkShaderClipDistance :: VkBool32 
-                          , vkShaderCullDistance :: VkBool32 
-                          , vkShaderFloat64 :: VkBool32 
-                          , vkShaderInt64 :: VkBool32 
-                          , vkShaderInt16 :: VkBool32 
-                          , vkShaderResourceResidency :: VkBool32 
-                          , vkShaderResourceMinLod :: VkBool32 
-                          , vkSparseBinding :: VkBool32 
-                          , vkSparseResidencyBuffer :: VkBool32 
-                          , vkSparseResidencyImage2D :: VkBool32 
-                          , vkSparseResidencyImage3D :: VkBool32 
-                          , vkSparseResidency2Samples :: VkBool32 
-                          , vkSparseResidency4Samples :: VkBool32 
-                          , vkSparseResidency8Samples :: VkBool32 
-                          , vkSparseResidency16Samples :: VkBool32 
-                          , vkSparseResidencyAliased :: VkBool32 
-                          , vkVariableMultisampleRate :: VkBool32 
-                          , vkInheritedQueries :: VkBool32 
-                          }
-  deriving (Eq)
-
-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))
-
-
--- ** VkDeviceCreateFlags
--- | Opaque flag
-newtype VkDeviceCreateFlags = VkDeviceCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkDeviceQueueCreateInfo =
-  VkDeviceQueueCreateInfo{ vkSType :: VkStructureType 
-                         , vkPNext :: Ptr Void 
-                         , vkFlags :: VkDeviceQueueCreateFlags 
-                         , vkQueueFamilyIndex :: Word32 
-                         , vkQueueCount :: Word32 
-                         , vkPQueuePriorities :: Ptr CFloat 
-                         }
-  deriving (Eq)
-
-instance Storable VkDeviceQueueCreateInfo where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkDeviceQueueCreateInfo <$> peek (ptr `plusPtr` 0)
-                                     <*> peek (ptr `plusPtr` 8)
-                                     <*> peek (ptr `plusPtr` 16)
-                                     <*> peek (ptr `plusPtr` 20)
-                                     <*> peek (ptr `plusPtr` 24)
-                                     <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceQueueCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceQueueCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceQueueCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkQueueFamilyIndex (poked :: VkDeviceQueueCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkQueueCount (poked :: VkDeviceQueueCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPQueuePriorities (poked :: VkDeviceQueueCreateInfo))
-
-
--- ** VkDeviceQueueCreateFlags
--- | Opaque flag
-newtype VkDeviceQueueCreateFlags = VkDeviceQueueCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** vkDestroyDevice
-foreign import ccall "vkDestroyDevice" vkDestroyDevice ::
-  VkDevice -> Ptr VkAllocationCallbacks -> IO ()
-
-data VkPhysicalDevice_T
-type VkPhysicalDevice = Ptr VkPhysicalDevice_T
-
-data VkDevice_T
-type VkDevice = Ptr VkDevice_T
-
-
-data VkDeviceCreateInfo =
-  VkDeviceCreateInfo{ vkSType :: VkStructureType 
-                    , vkPNext :: Ptr Void 
-                    , vkFlags :: VkDeviceCreateFlags 
-                    , vkQueueCreateInfoCount :: Word32 
-                    , vkPQueueCreateInfos :: Ptr VkDeviceQueueCreateInfo 
-                    , vkEnabledLayerCount :: Word32 
-                    , vkPpEnabledLayerNames :: Ptr (Ptr CChar) 
-                    , vkEnabledExtensionCount :: Word32 
-                    , vkPpEnabledExtensionNames :: Ptr (Ptr CChar) 
-                    , vkPEnabledFeatures :: Ptr VkPhysicalDeviceFeatures 
-                    }
-  deriving (Eq)
-
-instance Storable VkDeviceCreateInfo where
-  sizeOf ~_ = 72
-  alignment ~_ = 8
-  peek ptr = VkDeviceCreateInfo <$> 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)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkQueueCreateInfoCount (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPQueueCreateInfos (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkEnabledLayerCount (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPpEnabledLayerNames (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkEnabledExtensionCount (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkPpEnabledExtensionNames (poked :: VkDeviceCreateInfo))
-                *> poke (ptr `plusPtr` 64) (vkPEnabledFeatures (poked :: VkDeviceCreateInfo))
-
-
diff --git a/src/Graphics/Vulkan/Device.hs-boot b/src/Graphics/Vulkan/Device.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Device.hs-boot
+++ /dev/null
@@ -1,9 +0,0 @@
-
-module Graphics.Vulkan.Device where
-
-import Foreign.Ptr( Ptr
-                  )
-
-data VkDevice_T
-type VkDevice = Ptr VkDevice_T
-
diff --git a/src/Graphics/Vulkan/DeviceInitialization.hs b/src/Graphics/Vulkan/DeviceInitialization.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/DeviceInitialization.hs
+++ /dev/null
@@ -1,939 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.DeviceInitialization where
-
-import Data.Vector.Storable.Sized( Vector
-                                 )
-import Graphics.Vulkan.Device( VkPhysicalDeviceFeatures(..)
-                             , VkPhysicalDevice(..)
-                             , VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word8
-                , Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , FunPtr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Graphics.Vulkan.Constants( VK_MAX_PHYSICAL_DEVICE_NAME_SIZE
-                                , VK_MAX_MEMORY_HEAPS
-                                , VK_UUID_SIZE
-                                , VK_MAX_MEMORY_TYPES
-                                )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)
-                              , VkSampleCountFlags(..)
-                              )
-import Graphics.Vulkan.Image( VkImageUsageFlags(..)
-                            , VkImageType(..)
-                            , VkImageUsageFlagBits(..)
-                            , VkImageCreateFlags(..)
-                            , VkImageTiling(..)
-                            , VkImageCreateFlagBits(..)
-                            )
-import Graphics.Vulkan.Core( VkExtent3D(..)
-                           , VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkBool32(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize
-                      , CFloat
-                      , CFloat(..)
-                      , CChar
-                      , CSize(..)
-                      )
-
--- ** VkPhysicalDeviceType
-
-newtype VkPhysicalDeviceType = VkPhysicalDeviceType Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_PHYSICAL_DEVICE_TYPE_OTHER = VkPhysicalDeviceType 0
-
-pattern VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU = VkPhysicalDeviceType 1
-
-pattern VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU = VkPhysicalDeviceType 2
-
-pattern VK_PHYSICAL_DEVICE_TYPE_VIRTUAL_GPU = VkPhysicalDeviceType 3
-
-pattern VK_PHYSICAL_DEVICE_TYPE_CPU = VkPhysicalDeviceType 4
-
-
-data VkInstanceCreateInfo =
-  VkInstanceCreateInfo{ vkSType :: VkStructureType 
-                      , vkPNext :: Ptr Void 
-                      , vkFlags :: VkInstanceCreateFlags 
-                      , vkPApplicationInfo :: Ptr VkApplicationInfo 
-                      , vkEnabledLayerCount :: Word32 
-                      , vkPpEnabledLayerNames :: Ptr (Ptr CChar) 
-                      , vkEnabledExtensionCount :: Word32 
-                      , vkPpEnabledExtensionNames :: Ptr (Ptr CChar) 
-                      }
-  deriving (Eq)
-
-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))
-
-
--- ** vkGetPhysicalDeviceImageFormatProperties
-foreign import ccall "vkGetPhysicalDeviceImageFormatProperties" vkGetPhysicalDeviceImageFormatProperties ::
-  VkPhysicalDevice ->
-  VkFormat ->
-    VkImageType ->
-      VkImageTiling ->
-        VkImageUsageFlags ->
-          VkImageCreateFlags -> Ptr VkImageFormatProperties -> IO VkResult
-
-type PFN_vkVoidFunction = FunPtr (IO ())
-
-
-data VkApplicationInfo =
-  VkApplicationInfo{ vkSType :: VkStructureType 
-                   , vkPNext :: Ptr Void 
-                   , vkPApplicationName :: Ptr CChar 
-                   , vkApplicationVersion :: Word32 
-                   , vkPEngineName :: Ptr CChar 
-                   , vkEngineVersion :: Word32 
-                   , vkApiVersion :: Word32 
-                   }
-  deriving (Eq)
-
-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))
-
-
-
-data VkPhysicalDeviceLimits =
-  VkPhysicalDeviceLimits{ vkMaxImageDimension1D :: Word32 
-                        , vkMaxImageDimension2D :: Word32 
-                        , vkMaxImageDimension3D :: Word32 
-                        , vkMaxImageDimensionCube :: Word32 
-                        , vkMaxImageArrayLayers :: Word32 
-                        , vkMaxTexelBufferElements :: Word32 
-                        , vkMaxUniformBufferRange :: Word32 
-                        , vkMaxStorageBufferRange :: Word32 
-                        , vkMaxPushConstantsSize :: Word32 
-                        , vkMaxMemoryAllocationCount :: Word32 
-                        , vkMaxSamplerAllocationCount :: Word32 
-                        , vkBufferImageGranularity :: VkDeviceSize 
-                        , vkSparseAddressSpaceSize :: VkDeviceSize 
-                        , vkMaxBoundDescriptorSets :: Word32 
-                        , vkMaxPerStageDescriptorSamplers :: Word32 
-                        , vkMaxPerStageDescriptorUniformBuffers :: Word32 
-                        , vkMaxPerStageDescriptorStorageBuffers :: Word32 
-                        , vkMaxPerStageDescriptorSampledImages :: Word32 
-                        , vkMaxPerStageDescriptorStorageImages :: Word32 
-                        , vkMaxPerStageDescriptorInputAttachments :: Word32 
-                        , vkMaxPerStageResources :: Word32 
-                        , vkMaxDescriptorSetSamplers :: Word32 
-                        , vkMaxDescriptorSetUniformBuffers :: Word32 
-                        , vkMaxDescriptorSetUniformBuffersDynamic :: Word32 
-                        , vkMaxDescriptorSetStorageBuffers :: Word32 
-                        , vkMaxDescriptorSetStorageBuffersDynamic :: Word32 
-                        , vkMaxDescriptorSetSampledImages :: Word32 
-                        , vkMaxDescriptorSetStorageImages :: Word32 
-                        , vkMaxDescriptorSetInputAttachments :: Word32 
-                        , vkMaxVertexInputAttributes :: Word32 
-                        , vkMaxVertexInputBindings :: Word32 
-                        , vkMaxVertexInputAttributeOffset :: Word32 
-                        , vkMaxVertexInputBindingStride :: Word32 
-                        , vkMaxVertexOutputComponents :: Word32 
-                        , vkMaxTessellationGenerationLevel :: Word32 
-                        , vkMaxTessellationPatchSize :: Word32 
-                        , vkMaxTessellationControlPerVertexInputComponents :: Word32 
-                        , vkMaxTessellationControlPerVertexOutputComponents :: Word32 
-                        , vkMaxTessellationControlPerPatchOutputComponents :: Word32 
-                        , vkMaxTessellationControlTotalOutputComponents :: Word32 
-                        , vkMaxTessellationEvaluationInputComponents :: Word32 
-                        , vkMaxTessellationEvaluationOutputComponents :: Word32 
-                        , vkMaxGeometryShaderInvocations :: Word32 
-                        , vkMaxGeometryInputComponents :: Word32 
-                        , vkMaxGeometryOutputComponents :: Word32 
-                        , vkMaxGeometryOutputVertices :: Word32 
-                        , vkMaxGeometryTotalOutputComponents :: Word32 
-                        , vkMaxFragmentInputComponents :: Word32 
-                        , vkMaxFragmentOutputAttachments :: Word32 
-                        , vkMaxFragmentDualSrcAttachments :: Word32 
-                        , vkMaxFragmentCombinedOutputResources :: Word32 
-                        , vkMaxComputeSharedMemorySize :: Word32 
-                        , vkMaxComputeWorkGroupCount :: Vector 3 Word32 
-                        , vkMaxComputeWorkGroupInvocations :: Word32 
-                        , vkMaxComputeWorkGroupSize :: Vector 3 Word32 
-                        , vkSubPixelPrecisionBits :: Word32 
-                        , vkSubTexelPrecisionBits :: Word32 
-                        , vkMipmapPrecisionBits :: Word32 
-                        , vkMaxDrawIndexedIndexValue :: Word32 
-                        , vkMaxDrawIndirectCount :: Word32 
-                        , vkMaxSamplerLodBias :: CFloat 
-                        , vkMaxSamplerAnisotropy :: CFloat 
-                        , vkMaxViewports :: Word32 
-                        , vkMaxViewportDimensions :: Vector 2 Word32 
-                        , vkViewportBoundsRange :: Vector 2 CFloat 
-                        , vkViewportSubPixelBits :: Word32 
-                        , vkMinMemoryMapAlignment :: CSize 
-                        , vkMinTexelBufferOffsetAlignment :: VkDeviceSize 
-                        , vkMinUniformBufferOffsetAlignment :: VkDeviceSize 
-                        , vkMinStorageBufferOffsetAlignment :: VkDeviceSize 
-                        , vkMinTexelOffset :: Int32 
-                        , vkMaxTexelOffset :: Word32 
-                        , vkMinTexelGatherOffset :: Int32 
-                        , vkMaxTexelGatherOffset :: Word32 
-                        , vkMinInterpolationOffset :: CFloat 
-                        , vkMaxInterpolationOffset :: CFloat 
-                        , vkSubPixelInterpolationOffsetBits :: Word32 
-                        , vkMaxFramebufferWidth :: Word32 
-                        , vkMaxFramebufferHeight :: Word32 
-                        , vkMaxFramebufferLayers :: Word32 
-                        , vkFramebufferColorSampleCounts :: VkSampleCountFlags 
-                        , vkFramebufferDepthSampleCounts :: VkSampleCountFlags 
-                        , vkFramebufferStencilSampleCounts :: VkSampleCountFlags 
-                        , vkFramebufferNoAttachmentsSampleCounts :: VkSampleCountFlags 
-                        , vkMaxColorAttachments :: Word32 
-                        , vkSampledImageColorSampleCounts :: VkSampleCountFlags 
-                        , vkSampledImageIntegerSampleCounts :: VkSampleCountFlags 
-                        , vkSampledImageDepthSampleCounts :: VkSampleCountFlags 
-                        , vkSampledImageStencilSampleCounts :: VkSampleCountFlags 
-                        , vkStorageImageSampleCounts :: VkSampleCountFlags 
-                        , vkMaxSampleMaskWords :: Word32 
-                        , vkTimestampComputeAndGraphics :: VkBool32 
-                        , vkTimestampPeriod :: CFloat 
-                        , vkMaxClipDistances :: Word32 
-                        , vkMaxCullDistances :: Word32 
-                        , vkMaxCombinedClipAndCullDistances :: Word32 
-                        , vkDiscreteQueuePriorities :: Word32 
-                        , vkPointSizeRange :: Vector 2 CFloat 
-                        , vkLineWidthRange :: Vector 2 CFloat 
-                        , vkPointSizeGranularity :: CFloat 
-                        , vkLineWidthGranularity :: CFloat 
-                        , vkStrictLines :: VkBool32 
-                        , vkStandardSampleLocations :: VkBool32 
-                        , vkOptimalBufferCopyOffsetAlignment :: VkDeviceSize 
-                        , vkOptimalBufferCopyRowPitchAlignment :: VkDeviceSize 
-                        , vkNonCoherentAtomSize :: VkDeviceSize 
-                        }
-  deriving (Eq)
-
-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))
-
-
-
-data VkMemoryHeap =
-  VkMemoryHeap{ vkSize :: VkDeviceSize 
-              , vkFlags :: VkMemoryHeapFlags 
-              }
-  deriving (Eq)
-
-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))
-
-
--- ** vkEnumeratePhysicalDevices
-foreign import ccall "vkEnumeratePhysicalDevices" vkEnumeratePhysicalDevices ::
-  VkInstance -> Ptr Word32 -> Ptr VkPhysicalDevice -> IO VkResult
-
--- ** vkGetDeviceProcAddr
-foreign import ccall "vkGetDeviceProcAddr" vkGetDeviceProcAddr ::
-  VkDevice -> Ptr CChar -> IO PFN_vkVoidFunction
-
--- ** vkCreateInstance
-foreign import ccall "vkCreateInstance" vkCreateInstance ::
-  Ptr VkInstanceCreateInfo ->
-  Ptr VkAllocationCallbacks -> Ptr VkInstance -> IO VkResult
-
--- ** VkFormatFeatureFlags
-
-newtype VkFormatFeatureFlagBits = VkFormatFeatureFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkFormatFeatureFlagBits
-type VkFormatFeatureFlags = VkFormatFeatureFlagBits
-
-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"
-  
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkFormatFeatureFlagBits")
-                        v <- step readPrec
-                        pure (VkFormatFeatureFlagBits v)
-                        )
-                    )
-
--- | Format can be used for sampled images (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT = VkFormatFeatureFlagBits 0x1
--- | Format can be used for storage images (STORAGE_IMAGE descriptor type)
-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT = VkFormatFeatureFlagBits 0x2
--- | Format supports atomic operations in case it's used for storage images
-pattern VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT = VkFormatFeatureFlagBits 0x4
--- | Format can be used for uniform texel buffers (TBOs)
-pattern VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x8
--- | Format can be used for storage texel buffers (IBOs)
-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT = VkFormatFeatureFlagBits 0x10
--- | Format supports atomic operations in case it's used for storage texel buffers
-pattern VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = VkFormatFeatureFlagBits 0x20
--- | Format can be used for vertex buffers (VBOs)
-pattern VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT = VkFormatFeatureFlagBits 0x40
--- | Format can be used for color attachment images
-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x80
--- | Format supports blending in case it's used for color attachment images
-pattern VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT = VkFormatFeatureFlagBits 0x100
--- | Format can be used for depth/stencil attachment images
-pattern VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT = VkFormatFeatureFlagBits 0x200
--- | Format can be used as the source image of blits with vkCmdBlitImage
-pattern VK_FORMAT_FEATURE_BLIT_SRC_BIT = VkFormatFeatureFlagBits 0x400
--- | Format can be used as the destination image of blits with vkCmdBlitImage
-pattern VK_FORMAT_FEATURE_BLIT_DST_BIT = VkFormatFeatureFlagBits 0x800
--- | Format can be filtered with VK_FILTER_LINEAR when being sampled
-pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT = VkFormatFeatureFlagBits 0x1000
-
-
-
-data VkPhysicalDeviceMemoryProperties =
-  VkPhysicalDeviceMemoryProperties{ vkMemoryTypeCount :: Word32 
-                                  , vkMemoryTypes :: Vector VK_MAX_MEMORY_TYPES VkMemoryType 
-                                  , vkMemoryHeapCount :: Word32 
-                                  , vkMemoryHeaps :: Vector VK_MAX_MEMORY_HEAPS VkMemoryHeap 
-                                  }
-  deriving (Eq)
-
-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))
-
-
-data VkInstance_T
-type VkInstance = Ptr VkInstance_T
-
--- ** VkMemoryHeapFlags
-
-newtype VkMemoryHeapFlagBits = VkMemoryHeapFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkMemoryHeapFlagBits
-type VkMemoryHeapFlags = VkMemoryHeapFlagBits
-
-instance Show VkMemoryHeapFlagBits where
-  showsPrec _ VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = showString "VK_MEMORY_HEAP_DEVICE_LOCAL_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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkMemoryHeapFlagBits")
-                        v <- step readPrec
-                        pure (VkMemoryHeapFlagBits v)
-                        )
-                    )
-
--- | If set, heap represents device memory
-pattern VK_MEMORY_HEAP_DEVICE_LOCAL_BIT = VkMemoryHeapFlagBits 0x1
-
-
-
-data VkQueueFamilyProperties =
-  VkQueueFamilyProperties{ vkQueueFlags :: VkQueueFlags 
-                         , vkQueueCount :: Word32 
-                         , vkTimestampValidBits :: Word32 
-                         , vkMinImageTransferGranularity :: VkExtent3D 
-                         }
-  deriving (Eq)
-
-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))
-
-
-
-data VkImageFormatProperties =
-  VkImageFormatProperties{ vkMaxExtent :: VkExtent3D 
-                         , vkMaxMipLevels :: Word32 
-                         , vkMaxArrayLayers :: Word32 
-                         , vkSampleCounts :: VkSampleCountFlags 
-                         , vkMaxResourceSize :: VkDeviceSize 
-                         }
-  deriving (Eq)
-
-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))
-
-
-
-data VkPhysicalDeviceSparseProperties =
-  VkPhysicalDeviceSparseProperties{ vkResidencyStandard2DBlockShape :: VkBool32 
-                                  , vkResidencyStandard2DMultisampleBlockShape :: VkBool32 
-                                  , vkResidencyStandard3DBlockShape :: VkBool32 
-                                  , vkResidencyAlignedMipSize :: VkBool32 
-                                  , vkResidencyNonResidentStrict :: VkBool32 
-                                  }
-  deriving (Eq)
-
-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))
-
-
--- ** vkGetPhysicalDeviceFeatures
-foreign import ccall "vkGetPhysicalDeviceFeatures" vkGetPhysicalDeviceFeatures ::
-  VkPhysicalDevice -> Ptr VkPhysicalDeviceFeatures -> IO ()
-
--- ** vkGetPhysicalDeviceMemoryProperties
-foreign import ccall "vkGetPhysicalDeviceMemoryProperties" vkGetPhysicalDeviceMemoryProperties ::
-  VkPhysicalDevice -> Ptr VkPhysicalDeviceMemoryProperties -> IO ()
-
-
-data VkPhysicalDeviceProperties =
-  VkPhysicalDeviceProperties{ vkApiVersion :: Word32 
-                            , vkDriverVersion :: Word32 
-                            , vkVendorID :: Word32 
-                            , vkDeviceID :: Word32 
-                            , vkDeviceType :: VkPhysicalDeviceType 
-                            , vkDeviceName :: Vector VK_MAX_PHYSICAL_DEVICE_NAME_SIZE CChar 
-                            , vkPipelineCacheUUID :: Vector VK_UUID_SIZE Word8 
-                            , vkLimits :: VkPhysicalDeviceLimits 
-                            , vkSparseProperties :: VkPhysicalDeviceSparseProperties 
-                            }
-  deriving (Eq)
-
-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))
-
-
--- ** vkGetPhysicalDeviceQueueFamilyProperties
-foreign import ccall "vkGetPhysicalDeviceQueueFamilyProperties" vkGetPhysicalDeviceQueueFamilyProperties ::
-  VkPhysicalDevice ->
-  Ptr Word32 -> Ptr VkQueueFamilyProperties -> IO ()
-
-
-data VkMemoryType =
-  VkMemoryType{ vkPropertyFlags :: VkMemoryPropertyFlags 
-              , vkHeapIndex :: Word32 
-              }
-  deriving (Eq)
-
-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))
-
-
--- ** vkGetInstanceProcAddr
-foreign import ccall "vkGetInstanceProcAddr" vkGetInstanceProcAddr ::
-  VkInstance -> Ptr CChar -> IO PFN_vkVoidFunction
-
--- ** VkMemoryPropertyFlags
-
-newtype VkMemoryPropertyFlagBits = VkMemoryPropertyFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkMemoryPropertyFlagBits
-type VkMemoryPropertyFlags = VkMemoryPropertyFlagBits
-
-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"
-  
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkMemoryPropertyFlagBits")
-                        v <- step readPrec
-                        pure (VkMemoryPropertyFlagBits v)
-                        )
-                    )
-
--- | If otherwise stated, then allocate memory on device
-pattern VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT = VkMemoryPropertyFlagBits 0x1
--- | Memory is mappable by host
-pattern VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT = VkMemoryPropertyFlagBits 0x2
--- | Memory will have i/o coherency. If not set, application may need to use vkFlushMappedMemoryRanges and vkInvalidateMappedMemoryRanges to flush/invalidate host cache
-pattern VK_MEMORY_PROPERTY_HOST_COHERENT_BIT = VkMemoryPropertyFlagBits 0x4
--- | Memory will be cached by the host
-pattern VK_MEMORY_PROPERTY_HOST_CACHED_BIT = VkMemoryPropertyFlagBits 0x8
--- | Memory may be allocated by the driver when it is required
-pattern VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT = VkMemoryPropertyFlagBits 0x10
-
-
--- ** vkDestroyInstance
-foreign import ccall "vkDestroyInstance" vkDestroyInstance ::
-  VkInstance -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** VkQueueFlags
-
-newtype VkQueueFlagBits = VkQueueFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkQueueFlagBits
-type VkQueueFlags = VkQueueFlagBits
-
-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"
-  
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkQueueFlagBits")
-                        v <- step readPrec
-                        pure (VkQueueFlagBits v)
-                        )
-                    )
-
--- | Queue supports graphics operations
-pattern VK_QUEUE_GRAPHICS_BIT = VkQueueFlagBits 0x1
--- | Queue supports compute operations
-pattern VK_QUEUE_COMPUTE_BIT = VkQueueFlagBits 0x2
--- | Queue supports transfer operations
-pattern VK_QUEUE_TRANSFER_BIT = VkQueueFlagBits 0x4
--- | Queue supports sparse resource memory management operations
-pattern VK_QUEUE_SPARSE_BINDING_BIT = VkQueueFlagBits 0x8
-
-
--- ** vkGetPhysicalDeviceProperties
-foreign import ccall "vkGetPhysicalDeviceProperties" vkGetPhysicalDeviceProperties ::
-  VkPhysicalDevice -> Ptr VkPhysicalDeviceProperties -> IO ()
-
--- ** VkInstanceCreateFlags
--- | Opaque flag
-newtype VkInstanceCreateFlags = VkInstanceCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** vkGetPhysicalDeviceFormatProperties
-foreign import ccall "vkGetPhysicalDeviceFormatProperties" vkGetPhysicalDeviceFormatProperties ::
-  VkPhysicalDevice -> VkFormat -> Ptr VkFormatProperties -> IO ()
-
-
-data VkFormatProperties =
-  VkFormatProperties{ vkLinearTilingFeatures :: VkFormatFeatureFlags 
-                    , vkOptimalTilingFeatures :: VkFormatFeatureFlags 
-                    , vkBufferFeatures :: VkFormatFeatureFlags 
-                    }
-  deriving (Eq)
-
-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))
-
-
diff --git a/src/Graphics/Vulkan/EXT/DebugReport.hs b/src/Graphics/Vulkan/EXT/DebugReport.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/EXT/DebugReport.hs
+++ /dev/null
@@ -1,271 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.EXT.DebugReport where
-
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , FunPtr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.DeviceInitialization( VkInstance(..)
-                                           )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize
-                      , CChar
-                      , CSize(..)
-                      )
-
--- ** vkDebugReportMessageEXT
-foreign import ccall "vkDebugReportMessageEXT" vkDebugReportMessageEXT ::
-  VkInstance ->
-  VkDebugReportFlagsEXT ->
-    VkDebugReportObjectTypeEXT ->
-      Word64 -> CSize -> Int32 -> Ptr CChar -> Ptr CChar -> IO ()
-
-newtype VkDebugReportCallbackEXT = VkDebugReportCallbackEXT Word64
-  deriving (Eq, Storable)
-
--- ** VkDebugReportObjectTypeEXT
-
-newtype VkDebugReportObjectTypeEXT = VkDebugReportObjectTypeEXT Int32
-  deriving (Eq, Storable)
-
-instance Show VkDebugReportObjectTypeEXT where
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"
-  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT"
-  showsPrec p (VkDebugReportObjectTypeEXT x) = showParen (p >= 11) (showString "VkDebugReportObjectTypeEXT " . showsPrec 11 x)
-
-instance Read VkDebugReportObjectTypeEXT where
-  readPrec = parens ( choose [ ("VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT)
-                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDebugReportObjectTypeEXT")
-                        v <- step readPrec
-                        pure (VkDebugReportObjectTypeEXT v)
-                        )
-                    )
-
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = VkDebugReportObjectTypeEXT 0
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = VkDebugReportObjectTypeEXT 1
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = VkDebugReportObjectTypeEXT 2
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = VkDebugReportObjectTypeEXT 3
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = VkDebugReportObjectTypeEXT 4
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = VkDebugReportObjectTypeEXT 5
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = VkDebugReportObjectTypeEXT 6
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = VkDebugReportObjectTypeEXT 7
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = VkDebugReportObjectTypeEXT 8
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = VkDebugReportObjectTypeEXT 9
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = VkDebugReportObjectTypeEXT 10
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = VkDebugReportObjectTypeEXT 11
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = VkDebugReportObjectTypeEXT 12
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = VkDebugReportObjectTypeEXT 13
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = VkDebugReportObjectTypeEXT 14
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = VkDebugReportObjectTypeEXT 15
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = VkDebugReportObjectTypeEXT 16
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = VkDebugReportObjectTypeEXT 17
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = VkDebugReportObjectTypeEXT 18
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = VkDebugReportObjectTypeEXT 19
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = VkDebugReportObjectTypeEXT 20
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = VkDebugReportObjectTypeEXT 21
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = VkDebugReportObjectTypeEXT 22
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = VkDebugReportObjectTypeEXT 23
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = VkDebugReportObjectTypeEXT 24
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = VkDebugReportObjectTypeEXT 25
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = VkDebugReportObjectTypeEXT 26
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = VkDebugReportObjectTypeEXT 27
-
-pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VkDebugReportObjectTypeEXT 28
-
--- ** VkDebugReportErrorEXT
-
-newtype VkDebugReportErrorEXT = VkDebugReportErrorEXT Int32
-  deriving (Eq, Storable)
-
-instance Show VkDebugReportErrorEXT where
-  showsPrec _ VK_DEBUG_REPORT_ERROR_NONE_EXT = showString "VK_DEBUG_REPORT_ERROR_NONE_EXT"
-  showsPrec _ VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT = showString "VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT"
-  showsPrec p (VkDebugReportErrorEXT x) = showParen (p >= 11) (showString "VkDebugReportErrorEXT " . showsPrec 11 x)
-
-instance Read VkDebugReportErrorEXT where
-  readPrec = parens ( choose [ ("VK_DEBUG_REPORT_ERROR_NONE_EXT", pure VK_DEBUG_REPORT_ERROR_NONE_EXT)
-                             , ("VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT", pure VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDebugReportErrorEXT")
-                        v <- step readPrec
-                        pure (VkDebugReportErrorEXT v)
-                        )
-                    )
-
-
-pattern VK_DEBUG_REPORT_ERROR_NONE_EXT = VkDebugReportErrorEXT 0
-
-pattern VK_DEBUG_REPORT_ERROR_CALLBACK_REF_EXT = VkDebugReportErrorEXT 1
-
-
-data VkDebugReportCallbackCreateInfoEXT =
-  VkDebugReportCallbackCreateInfoEXT{ vkSType :: VkStructureType 
-                                    , vkPNext :: Ptr Void 
-                                    , vkFlags :: VkDebugReportFlagsEXT 
-                                    , vkPfnCallback :: PFN_vkDebugReportCallbackEXT 
-                                    , vkPUserData :: Ptr Void 
-                                    }
-  deriving (Eq)
-
-instance Storable VkDebugReportCallbackCreateInfoEXT where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkDebugReportCallbackCreateInfoEXT <$> peek (ptr `plusPtr` 0)
-                                                <*> peek (ptr `plusPtr` 8)
-                                                <*> peek (ptr `plusPtr` 16)
-                                                <*> peek (ptr `plusPtr` 24)
-                                                <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugReportCallbackCreateInfoEXT))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugReportCallbackCreateInfoEXT))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDebugReportCallbackCreateInfoEXT))
-                *> poke (ptr `plusPtr` 24) (vkPfnCallback (poked :: VkDebugReportCallbackCreateInfoEXT))
-                *> poke (ptr `plusPtr` 32) (vkPUserData (poked :: VkDebugReportCallbackCreateInfoEXT))
-
-
--- ** vkDestroyDebugReportCallbackEXT
-foreign import ccall "vkDestroyDebugReportCallbackEXT" vkDestroyDebugReportCallbackEXT ::
-  VkInstance ->
-  VkDebugReportCallbackEXT -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** VkDebugReportFlagsEXT
--- | Opaque flag
-newtype VkDebugReportFlagsEXT = VkDebugReportFlagsEXT VkFlags
-  deriving (Eq, Storable)
-
-type PFN_vkDebugReportCallbackEXT = FunPtr
-  (VkDebugReportFlagsEXT ->
-     VkDebugReportObjectTypeEXT ->
-       Word64 ->
-         CSize ->
-           Int32 -> Ptr CChar -> Ptr CChar -> Ptr Void -> IO VkBool32)
-
--- ** vkCreateDebugReportCallbackEXT
-foreign import ccall "vkCreateDebugReportCallbackEXT" vkCreateDebugReportCallbackEXT ::
-  VkInstance ->
-  Ptr VkDebugReportCallbackCreateInfoEXT ->
-    Ptr VkAllocationCallbacks ->
-      Ptr VkDebugReportCallbackEXT -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/Event.hs b/src/Graphics/Vulkan/Event.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Event.hs
+++ /dev/null
@@ -1,82 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Event where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** vkDestroyEvent
-foreign import ccall "vkDestroyEvent" vkDestroyEvent ::
-  VkDevice -> VkEvent -> Ptr VkAllocationCallbacks -> IO ()
-
-
-data VkEventCreateInfo =
-  VkEventCreateInfo{ vkSType :: VkStructureType 
-                   , vkPNext :: Ptr Void 
-                   , vkFlags :: VkEventCreateFlags 
-                   }
-  deriving (Eq)
-
-instance Storable VkEventCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkEventCreateInfo <$> peek (ptr `plusPtr` 0)
-                               <*> peek (ptr `plusPtr` 8)
-                               <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkEventCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkEventCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkEventCreateInfo))
-
-
--- ** vkSetEvent
-foreign import ccall "vkSetEvent" vkSetEvent ::
-  VkDevice -> VkEvent -> IO VkResult
-
--- ** vkGetEventStatus
-foreign import ccall "vkGetEventStatus" vkGetEventStatus ::
-  VkDevice -> VkEvent -> IO VkResult
-
--- ** vkResetEvent
-foreign import ccall "vkResetEvent" vkResetEvent ::
-  VkDevice -> VkEvent -> IO VkResult
-
--- ** vkCreateEvent
-foreign import ccall "vkCreateEvent" vkCreateEvent ::
-  VkDevice ->
-  Ptr VkEventCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkEvent -> IO VkResult
-
-newtype VkEvent = VkEvent Word64
-  deriving (Eq, Storable)
-
--- ** VkEventCreateFlags
--- | Opaque flag
-newtype VkEventCreateFlags = VkEventCreateFlags VkFlags
-  deriving (Eq, Storable)
-
diff --git a/src/Graphics/Vulkan/ExtensionDiscovery.hs b/src/Graphics/Vulkan/ExtensionDiscovery.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/ExtensionDiscovery.hs
+++ /dev/null
@@ -1,48 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE Strict #-}
-module Graphics.Vulkan.ExtensionDiscovery where
-
-import Data.Vector.Storable.Sized( Vector
-                                 )
-import Graphics.Vulkan.Device( VkPhysicalDevice(..)
-                             )
-import Data.Word( Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Graphics.Vulkan.Constants( VK_MAX_EXTENSION_NAME_SIZE
-                                )
-import Graphics.Vulkan.Core( VkResult(..)
-                           )
-import Foreign.C.Types( CChar
-                      )
-
-
-data VkExtensionProperties =
-  VkExtensionProperties{ vkExtensionName :: Vector VK_MAX_EXTENSION_NAME_SIZE CChar 
-                       , vkSpecVersion :: Word32 
-                       }
-  deriving (Eq)
-
-instance Storable VkExtensionProperties where
-  sizeOf ~_ = 260
-  alignment ~_ = 4
-  peek ptr = VkExtensionProperties <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 256)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkExtensionName (poked :: VkExtensionProperties))
-                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkExtensionProperties))
-
-
--- ** vkEnumerateInstanceExtensionProperties
-foreign import ccall "vkEnumerateInstanceExtensionProperties" vkEnumerateInstanceExtensionProperties ::
-  Ptr CChar -> Ptr Word32 -> Ptr VkExtensionProperties -> IO VkResult
-
--- ** vkEnumerateDeviceExtensionProperties
-foreign import ccall "vkEnumerateDeviceExtensionProperties" vkEnumerateDeviceExtensionProperties ::
-  VkPhysicalDevice ->
-  Ptr CChar -> Ptr Word32 -> Ptr VkExtensionProperties -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/Extensions.hs b/src/Graphics/Vulkan/Extensions.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions.hs
@@ -0,0 +1,307 @@
+{-# language Strict #-}
+{-# language CPP #-}
+
+
+module Graphics.Vulkan.Extensions
+  (     module Graphics.Vulkan.Extensions.VK_KHR_surface
+  , module Graphics.Vulkan.Extensions.VK_KHR_swapchain
+  , module Graphics.Vulkan.Extensions.VK_KHR_display
+  , module Graphics.Vulkan.Extensions.VK_KHR_display_swapchain
+#if defined(VK_USE_PLATFORM_XLIB_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
+#endif
+#if defined(VK_USE_PLATFORM_XCB_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_xcb_surface
+#endif
+#if defined(VK_USE_PLATFORM_WAYLAND_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_wayland_surface
+#endif
+#if defined(VK_USE_PLATFORM_MIR_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_mir_surface
+#endif
+#if defined(VK_USE_PLATFORM_ANDROID_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_android_surface
+#endif
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_win32_surface
+#endif
+  , module Graphics.Vulkan.Extensions.VK_EXT_debug_report
+  , module Graphics.Vulkan.Extensions.VK_NV_glsl_shader
+  , module Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted
+  , module Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
+  , module Graphics.Vulkan.Extensions.VK_IMG_filter_cubic
+  , module Graphics.Vulkan.Extensions.VK_AMD_rasterization_order
+  , module Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax
+  , module Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
+  , module Graphics.Vulkan.Extensions.VK_EXT_debug_marker
+  , module Graphics.Vulkan.Extensions.VK_AMD_gcn_shader
+  , module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation
+  , module Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
+  , module Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height
+  , module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float
+  , module Graphics.Vulkan.Extensions.VK_AMD_shader_ballot
+  , module Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
+  , module Graphics.Vulkan.Extensions.VK_AMD_shader_info
+  , module Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
+  , module Graphics.Vulkan.Extensions.VK_KHR_multiview
+  , module Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc
+  , module Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
+  , module Graphics.Vulkan.Extensions.VK_NV_external_memory
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+  , module Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
+#endif
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+  , module Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex
+#endif
+  , module Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2
+  , module Graphics.Vulkan.Extensions.VK_KHR_device_group
+  , module Graphics.Vulkan.Extensions.VK_EXT_validation_flags
+#if defined(VK_USE_PLATFORM_VI_NN)
+  , module Graphics.Vulkan.Extensions.VK_NN_vi_surface
+#endif
+  , module Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters
+  , module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
+  , module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote
+  , module Graphics.Vulkan.Extensions.VK_KHR_maintenance1
+  , module Graphics.Vulkan.Extensions.VK_KHR_device_group_creation
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_memory
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
+#endif
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex
+#endif
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32
+#endif
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd
+  , module Graphics.Vulkan.Extensions.VK_KHR_push_descriptor
+  , module Graphics.Vulkan.Extensions.VK_KHR_16bit_storage
+  , module Graphics.Vulkan.Extensions.VK_KHR_incremental_present
+  , module Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template
+  , module Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands
+  , module Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling
+  , module Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display
+#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT)
+  , module Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display
+#endif
+  , module Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
+  , module Graphics.Vulkan.Extensions.VK_EXT_display_control
+  , module Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing
+  , module Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage
+  , module Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough
+  , module Graphics.Vulkan.Extensions.VK_NV_viewport_array2
+  , module Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
+  , module Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle
+  , module Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles
+  , module Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
+  , module Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace
+  , module Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata
+  , module Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_fence
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32
+#endif
+  , module Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd
+  , module Graphics.Vulkan.Extensions.VK_KHR_maintenance2
+  , module Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2
+  , module Graphics.Vulkan.Extensions.VK_KHR_variable_pointers
+#if defined(VK_USE_PLATFORM_IOS_MVK)
+  , module Graphics.Vulkan.Extensions.VK_MVK_ios_surface
+#endif
+#if defined(VK_USE_PLATFORM_MACOS_MVK)
+  , module Graphics.Vulkan.Extensions.VK_MVK_macos_surface
+#endif
+  , module Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf
+  , module Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign
+  , module Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation
+  , module Graphics.Vulkan.Extensions.VK_EXT_debug_utils
+#if defined(VK_USE_PLATFORM_ANDROID_KHR)
+  , module Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
+#endif
+  , module Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax
+  , module Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
+  , module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16
+  , module Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples
+  , module Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask
+  , module Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export
+  , module Graphics.Vulkan.Extensions.VK_EXT_sample_locations
+  , module Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout
+  , module Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2
+  , module Graphics.Vulkan.Extensions.VK_KHR_image_format_list
+  , module Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced
+  , module Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color
+  , module Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
+  , module Graphics.Vulkan.Extensions.VK_NV_fill_rectangle
+  , module Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage
+  , module Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
+  , module Graphics.Vulkan.Extensions.VK_KHR_bind_memory2
+  , module Graphics.Vulkan.Extensions.VK_EXT_validation_cache
+  , module Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing
+  , module Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
+  , module Graphics.Vulkan.Extensions.VK_KHR_maintenance3
+  , module Graphics.Vulkan.Extensions.VK_EXT_global_priority
+  , module Graphics.Vulkan.Extensions.VK_EXT_external_memory_host
+  , module Graphics.Vulkan.Extensions.VK_AMD_buffer_marker
+  , module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties
+  , module Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
+  , module Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
+  ) where
+
+
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+import Graphics.Vulkan.Extensions.VK_KHR_swapchain
+import Graphics.Vulkan.Extensions.VK_KHR_display
+import Graphics.Vulkan.Extensions.VK_KHR_display_swapchain
+#if defined(VK_USE_PLATFORM_XLIB_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
+#endif
+#if defined(VK_USE_PLATFORM_XCB_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_xcb_surface
+#endif
+#if defined(VK_USE_PLATFORM_WAYLAND_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_wayland_surface
+#endif
+#if defined(VK_USE_PLATFORM_MIR_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_mir_surface
+#endif
+#if defined(VK_USE_PLATFORM_ANDROID_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_android_surface
+#endif
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_win32_surface
+#endif
+import Graphics.Vulkan.Extensions.VK_EXT_debug_report
+import Graphics.Vulkan.Extensions.VK_NV_glsl_shader
+import Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted
+import Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
+import Graphics.Vulkan.Extensions.VK_IMG_filter_cubic
+import Graphics.Vulkan.Extensions.VK_AMD_rasterization_order
+import Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax
+import Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
+import Graphics.Vulkan.Extensions.VK_EXT_debug_marker
+import Graphics.Vulkan.Extensions.VK_AMD_gcn_shader
+import Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation
+import Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
+import Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height
+import Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float
+import Graphics.Vulkan.Extensions.VK_AMD_shader_ballot
+import Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
+import Graphics.Vulkan.Extensions.VK_AMD_shader_info
+import Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
+import Graphics.Vulkan.Extensions.VK_KHR_multiview
+import Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc
+import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
+import Graphics.Vulkan.Extensions.VK_NV_external_memory
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+import Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
+#endif
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+import Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex
+#endif
+import Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2
+import Graphics.Vulkan.Extensions.VK_KHR_device_group
+import Graphics.Vulkan.Extensions.VK_EXT_validation_flags
+#if defined(VK_USE_PLATFORM_VI_NN)
+import Graphics.Vulkan.Extensions.VK_NN_vi_surface
+#endif
+import Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters
+import Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
+import Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote
+import Graphics.Vulkan.Extensions.VK_KHR_maintenance1
+import Graphics.Vulkan.Extensions.VK_KHR_device_group_creation
+import Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities
+import Graphics.Vulkan.Extensions.VK_KHR_external_memory
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
+#endif
+import Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex
+#endif
+import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
+import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32
+#endif
+import Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd
+import Graphics.Vulkan.Extensions.VK_KHR_push_descriptor
+import Graphics.Vulkan.Extensions.VK_KHR_16bit_storage
+import Graphics.Vulkan.Extensions.VK_KHR_incremental_present
+import Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template
+import Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands
+import Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling
+import Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display
+#if defined(VK_USE_PLATFORM_XLIB_XRANDR_EXT)
+import Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display
+#endif
+import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
+import Graphics.Vulkan.Extensions.VK_EXT_display_control
+import Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing
+import Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage
+import Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough
+import Graphics.Vulkan.Extensions.VK_NV_viewport_array2
+import Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
+import Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle
+import Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles
+import Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
+import Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace
+import Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata
+import Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image
+import Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities
+import Graphics.Vulkan.Extensions.VK_KHR_external_fence
+#if defined(VK_USE_PLATFORM_WIN32_KHR)
+import Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32
+#endif
+import Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd
+import Graphics.Vulkan.Extensions.VK_KHR_maintenance2
+import Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2
+import Graphics.Vulkan.Extensions.VK_KHR_variable_pointers
+#if defined(VK_USE_PLATFORM_IOS_MVK)
+import Graphics.Vulkan.Extensions.VK_MVK_ios_surface
+#endif
+#if defined(VK_USE_PLATFORM_MACOS_MVK)
+import Graphics.Vulkan.Extensions.VK_MVK_macos_surface
+#endif
+import Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf
+import Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign
+import Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation
+import Graphics.Vulkan.Extensions.VK_EXT_debug_utils
+#if defined(VK_USE_PLATFORM_ANDROID_KHR)
+import Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
+#endif
+import Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax
+import Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
+import Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16
+import Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples
+import Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask
+import Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export
+import Graphics.Vulkan.Extensions.VK_EXT_sample_locations
+import Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout
+import Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2
+import Graphics.Vulkan.Extensions.VK_KHR_image_format_list
+import Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced
+import Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color
+import Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
+import Graphics.Vulkan.Extensions.VK_NV_fill_rectangle
+import Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage
+import Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
+import Graphics.Vulkan.Extensions.VK_KHR_bind_memory2
+import Graphics.Vulkan.Extensions.VK_EXT_validation_cache
+import Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing
+import Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
+import Graphics.Vulkan.Extensions.VK_KHR_maintenance3
+import Graphics.Vulkan.Extensions.VK_EXT_global_priority
+import Graphics.Vulkan.Extensions.VK_EXT_external_memory_host
+import Graphics.Vulkan.Extensions.VK_AMD_buffer_marker
+import Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties
+import Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
+import Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
+
+
+
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_buffer_marker.hs
@@ -0,0 +1,152 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_buffer_marker
+  ( pattern VK_AMD_BUFFER_MARKER_SPEC_VERSION
+  , pattern VK_AMD_BUFFER_MARKER_EXTENSION_NAME
+  , vkCmdWriteBufferMarkerAMD
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkPipelineStageFlagBits(..)
+  , VkCommandBuffer
+  )
+
+
+-- No documentation found for TopLevel "VK_AMD_BUFFER_MARKER_SPEC_VERSION"
+pattern VK_AMD_BUFFER_MARKER_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_BUFFER_MARKER_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_BUFFER_MARKER_EXTENSION_NAME"
+pattern VK_AMD_BUFFER_MARKER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_BUFFER_MARKER_EXTENSION_NAME = "VK_AMD_buffer_marker"
+-- | vkCmdWriteBufferMarkerAMD - Execute a pipelined write of a marker value
+-- into a buffer
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @pipelineStage@ is one of the
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' values,
+--     specifying the pipeline stage whose completion triggers the marker
+--     write.
+--
+-- -   @dstBuffer@ is the buffer where the marker will be written to.
+--
+-- -   @dstOffset@ is the byte offset into the buffer where the marker will
+--     be written to.
+--
+-- -   @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
+-- specified pipeline stage. This includes the completion of other
+-- preceding @vkCmdWriteBufferMarkerAMD@ commands so long as their
+-- specified pipeline stages occur either at the same time or earlier than
+-- this command’s specified @pipelineStage@.
+--
+-- While consecutive buffer marker writes with the same @pipelineStage@
+-- parameter are implicitly complete in submission order, memory and
+-- execution dependencies between buffer marker writes and other operations
+-- must still be explicitly ordered using synchronization commands. The
+-- access scope for buffer marker writes falls under the
+-- @VK_ACCESS_TRANSFER_WRITE_BIT@, and the pipeline stages for identifying
+-- the synchronization scope /must/ include both @pipelineStage@ and
+-- @VK_PIPELINE_STAGE_TRANSFER_BIT@.
+--
+-- __Note__
+--
+-- Similar to @vkCmdWriteTimestamp@, if an implementation is unable to
+-- write a marker at any specific pipeline stage, it /may/ instead do so at
+-- any logically later stage.
+--
+-- __Note__
+--
+-- Implementations /may/ only support a limited number of pipelined marker
+-- write operations in flight at a given time, thus excessive number of
+-- marker write operations /may/ degrade command execution performance.
+--
+-- == Valid Usage
+--
+-- -   @dstOffset@ /must/ be less than or equal to the size of @dstBuffer@
+--     minus @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
+--
+-- -   @dstOffset@ /must/ be a multiple of @4@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pipelineStage@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits' value
+--
+-- -   @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
+--
+-- -   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         | Both            | Transfer        | Transfer        |
+-- > | Secondary       |                 | Graphics        |                 |
+-- > |                 |                 | Compute         |                 |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
+-- 'Graphics.Vulkan.Core10.Queue.VkPipelineStageFlagBits'
+foreign import ccall "vkCmdWriteBufferMarkerAMD" vkCmdWriteBufferMarkerAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineStage" ::: VkPipelineStageFlagBits) -> ("dstBuffer" ::: VkBuffer) -> ("dstOffset" ::: VkDeviceSize) -> ("marker" ::: Word32) -> IO ()
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_draw_indirect_count.hs
@@ -0,0 +1,469 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
+  ( pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION
+  , pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME
+  , vkCmdDrawIndirectCountAMD
+  , vkCmdDrawIndexedIndirectCountAMD
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+
+
+-- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION"
+pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_DRAW_INDIRECT_COUNT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME"
+pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_DRAW_INDIRECT_COUNT_EXTENSION_NAME = "VK_AMD_draw_indirect_count"
+-- | vkCmdDrawIndirectCountAMD - Perform an indirect draw with the draw count
+-- sourced from a 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.
+--
+-- -   @countBuffer@ is the buffer containing the draw count.
+--
+-- -   @countBufferOffset@ is the byte offset into @countBuffer@ where the
+--     draw count begins.
+--
+-- -   @maxDrawCount@ specifies the maximum number of draws that will be
+--     executed. The actual number of executed draw calls is the minimum of
+--     the count specified in @countBuffer@ and @maxDrawCount@.
+--
+-- -   @stride@ is the byte stride between successive sets of draw
+--     parameters.
+--
+-- = Description
+-- #_description#
+--
+-- @vkCmdDrawIndirectCountAMD@ behaves similarly to
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndirect' except
+-- that the draw count is read by the device from a buffer during
+-- execution. The command will read an unsigned 32-bit integer from
+-- @countBuffer@ located at @countBufferOffset@ and use this as the draw
+-- count.
+--
+-- == 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
+--
+-- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
+--     and contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @countBuffer@ /must/ have been created with the
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @countBufferOffset@ /must/ be a multiple of @4@
+--
+-- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
+--     equal to @sizeof@(@VkDrawIndirectCommand@)
+--
+-- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
+--     (@maxDrawCount@ - 1) + @offset@ + @sizeof@(@VkDrawIndirectCommand@))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   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 the count stored in @countBuffer@ is equal to @1@, (@offset@ +
+--     @sizeof@(@VkDrawIndirectCommand@)) /must/ be less than or equal to
+--     the size of @buffer@
+--
+-- -   If the count stored in @countBuffer@ is greater than @1@, (@stride@
+--     × (@drawCount@ - 1) + @offset@ + @sizeof@(@VkDrawIndirectCommand@))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   The count stored in @countBuffer@ /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
+--
+-- -   @countBuffer@ /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
+--
+-- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /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 "vkCmdDrawIndirectCountAMD" vkCmdDrawIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
+-- | vkCmdDrawIndexedIndirectCountAMD - Perform an indexed indirect draw with
+-- the draw count sourced from a 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.
+--
+-- -   @countBuffer@ is the buffer containing the draw count.
+--
+-- -   @countBufferOffset@ is the byte offset into @countBuffer@ where the
+--     draw count begins.
+--
+-- -   @maxDrawCount@ specifies the maximum number of draws that will be
+--     executed. The actual number of executed draw calls is the minimum of
+--     the count specified in @countBuffer@ and @maxDrawCount@.
+--
+-- -   @stride@ is the byte stride between successive sets of draw
+--     parameters.
+--
+-- = Description
+-- #_description#
+--
+-- @vkCmdDrawIndexedIndirectCountAMD@ behaves similarly to
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdDrawIndexedIndirect'
+-- except that the draw count is read by the device from a buffer during
+-- execution. The command will read an unsigned 32-bit integer from
+-- @countBuffer@ located at @countBufferOffset@ and use this as the draw
+-- count.
+--
+-- == 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
+--
+-- -   If @countBuffer@ is non-sparse then it /must/ be bound completely
+--     and contiguously to a single @VkDeviceMemory@ object
+--
+-- -   @countBuffer@ /must/ have been created with the
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set
+--
+-- -   @offset@ /must/ be a multiple of @4@
+--
+-- -   @countBufferOffset@ /must/ be a multiple of @4@
+--
+-- -   @stride@ /must/ be a multiple of @4@ and /must/ be greater than or
+--     equal to @sizeof@(@VkDrawIndirectCommand@)
+--
+-- -   If @maxDrawCount@ is greater than or equal to @1@, (@stride@ ×
+--     (@maxDrawCount@ - 1) + @offset@ + @sizeof@(@VkDrawIndirectCommand@))
+--     /must/ be less than or equal to the size of @buffer@
+--
+-- -   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 count stored in @countBuffer@ is equal to @1@, (@offset@ +
+--     @sizeof@(@VkDrawIndexedIndirectCommand@)) /must/ be less than or
+--     equal to the size of @buffer@
+--
+-- -   If count stored in @countBuffer@ 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
+--
+-- -   @countBuffer@ /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
+--
+-- -   Each of @buffer@, @commandBuffer@, and @countBuffer@ /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 "vkCmdDrawIndexedIndirectCountAMD" vkCmdDrawIndexedIndirectCountAMD :: ("commandBuffer" ::: VkCommandBuffer) -> ("buffer" ::: VkBuffer) -> ("offset" ::: VkDeviceSize) -> ("countBuffer" ::: VkBuffer) -> ("countBufferOffset" ::: VkDeviceSize) -> ("maxDrawCount" ::: Word32) -> ("stride" ::: Word32) -> IO ()
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_gcn_shader.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_gcn_shader.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_gcn_shader.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_gcn_shader
+  ( pattern VK_AMD_GCN_SHADER_SPEC_VERSION
+  , pattern VK_AMD_GCN_SHADER_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_GCN_SHADER_SPEC_VERSION"
+pattern VK_AMD_GCN_SHADER_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_GCN_SHADER_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_GCN_SHADER_EXTENSION_NAME"
+pattern VK_AMD_GCN_SHADER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_GCN_SHADER_EXTENSION_NAME = "VK_AMD_gcn_shader"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_half_float.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_half_float.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_half_float.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float
+  ( pattern VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION
+  , pattern VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION"
+pattern VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_GPU_SHADER_HALF_FLOAT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME"
+pattern VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_GPU_SHADER_HALF_FLOAT_EXTENSION_NAME = "VK_AMD_gpu_shader_half_float"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_int16.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_int16.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_gpu_shader_int16.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16
+  ( pattern VK_AMD_GPU_SHADER_INT16_SPEC_VERSION
+  , pattern VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_INT16_SPEC_VERSION"
+pattern VK_AMD_GPU_SHADER_INT16_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_GPU_SHADER_INT16_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME"
+pattern VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_GPU_SHADER_INT16_EXTENSION_NAME = "VK_AMD_gpu_shader_int16"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_mixed_attachment_samples.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples
+  ( pattern VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION
+  , pattern VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION"
+pattern VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_MIXED_ATTACHMENT_SAMPLES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME"
+pattern VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_MIXED_ATTACHMENT_SAMPLES_EXTENSION_NAME = "VK_AMD_mixed_attachment_samples"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_negative_viewport_height.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_negative_viewport_height.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_negative_viewport_height.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height
+  ( pattern VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION
+  , pattern VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION"
+pattern VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME"
+pattern VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_NEGATIVE_VIEWPORT_HEIGHT_EXTENSION_NAME = "VK_AMD_negative_viewport_height"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_rasterization_order.hs
@@ -0,0 +1,146 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_rasterization_order
+  ( VkRasterizationOrderAMD(..)
+  , pattern VK_RASTERIZATION_ORDER_STRICT_AMD
+  , pattern VK_RASTERIZATION_ORDER_RELAXED_AMD
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD
+  , pattern VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION
+  , pattern VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME
+  , VkPipelineRasterizationStateRasterizationOrderAMD(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+
+
+-- ** VkRasterizationOrderAMD
+
+-- | VkRasterizationOrderAMD - Specify rasterization order for a graphics
+-- pipeline
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineRasterizationStateRasterizationOrderAMD'
+newtype VkRasterizationOrderAMD = VkRasterizationOrderAMD Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkRasterizationOrderAMD where
+  showsPrec _ VK_RASTERIZATION_ORDER_STRICT_AMD = showString "VK_RASTERIZATION_ORDER_STRICT_AMD"
+  showsPrec _ VK_RASTERIZATION_ORDER_RELAXED_AMD = showString "VK_RASTERIZATION_ORDER_RELAXED_AMD"
+  showsPrec p (VkRasterizationOrderAMD x) = showParen (p >= 11) (showString "VkRasterizationOrderAMD " . showsPrec 11 x)
+
+instance Read VkRasterizationOrderAMD where
+  readPrec = parens ( choose [ ("VK_RASTERIZATION_ORDER_STRICT_AMD",  pure VK_RASTERIZATION_ORDER_STRICT_AMD)
+                             , ("VK_RASTERIZATION_ORDER_RELAXED_AMD", pure VK_RASTERIZATION_ORDER_RELAXED_AMD)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkRasterizationOrderAMD")
+                        v <- step readPrec
+                        pure (VkRasterizationOrderAMD v)
+                        )
+                    )
+
+-- | @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>.
+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>.
+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"
+pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD = VkStructureType 1000018000
+-- No documentation found for TopLevel "VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION"
+pattern VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_RASTERIZATION_ORDER_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME"
+pattern VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_RASTERIZATION_ORDER_EXTENSION_NAME = "VK_AMD_rasterization_order"
+-- | VkPipelineRasterizationStateRasterizationOrderAMD - Structure defining
+-- rasterization order for a graphics pipeline
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD@
+--
+-- -   @rasterizationOrder@ /must/ be a valid 'VkRasterizationOrderAMD'
+--     value
+--
+-- If the @{html_spec_relative}#VK_AMD_rasterization_order@ device
+-- extension is not enabled or the application does not request a
+-- particular rasterization order through specifying a
+-- @VkPipelineRasterizationStateRasterizationOrderAMD@ structure then the
+-- rasterization order used by the graphics pipeline defaults to
+-- @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineRasterizationStateRasterizationOrderAMD" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineRasterizationStateRasterizationOrderAMD" "vkRasterizationOrder"
+  vkRasterizationOrder :: VkRasterizationOrderAMD
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineRasterizationStateRasterizationOrderAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPipelineRasterizationStateRasterizationOrderAMD <$> peek (ptr `plusPtr` 0)
+                                                               <*> peek (ptr `plusPtr` 8)
+                                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineRasterizationStateRasterizationOrderAMD))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationStateRasterizationOrderAMD))
+                *> poke (ptr `plusPtr` 16) (vkRasterizationOrder (poked :: VkPipelineRasterizationStateRasterizationOrderAMD))
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_ballot.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_ballot.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_ballot.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_shader_ballot
+  ( pattern VK_AMD_SHADER_BALLOT_SPEC_VERSION
+  , pattern VK_AMD_SHADER_BALLOT_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_BALLOT_SPEC_VERSION"
+pattern VK_AMD_SHADER_BALLOT_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_SHADER_BALLOT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_SHADER_BALLOT_EXTENSION_NAME"
+pattern VK_AMD_SHADER_BALLOT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_SHADER_BALLOT_EXTENSION_NAME = "VK_AMD_shader_ballot"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_core_properties.hs
@@ -0,0 +1,188 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD
+  , pattern VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION
+  , pattern VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME
+  , VkPhysicalDeviceShaderCorePropertiesAMD(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD = VkStructureType 1000185000
+-- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION"
+pattern VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_SHADER_CORE_PROPERTIES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME"
+pattern VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_SHADER_CORE_PROPERTIES_EXTENSION_NAME = "VK_AMD_shader_core_properties"
+-- | VkPhysicalDeviceShaderCorePropertiesAMD - Structure describing shader
+-- 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
+--     physical device.
+--
+-- -   @shaderArraysPerEngineCount@ is an unsigned integer value indicating
+--     the number of shader arrays inside a shader engine. Each shader
+--     array has its own scan converter, set of compute units, and a render
+--     back end (color and depth buffers). Shader arrays within a shader
+--     engine share shader processor input (wave launcher) and shader
+--     export (export buffer) units. Currently, a shader engine can have
+--     one or two shader arrays.
+--
+-- -   @computeUnitsPerShaderArray@ is an unsigned integer value indicating
+--     the number of compute units within a shader array. A compute unit
+--     houses a set of SIMDs along with a sequencer module and a local data
+--     store.
+--
+-- -   @simdPerComputeUnit@ is an unsigned integer value indicating the
+--     number of SIMDs inside a compute unit. Each SIMD processes a single
+--     instruction at a time.
+--
+-- -   @wavefrontSize@ is an unsigned integer value indicating the number
+--     of channels (or threads) in a wavefront.
+--
+-- -   @sgprsPerSimd@ is an unsigned integer value indicating the number of
+--     physical Scalar General Purpose Registers (SGPRs) per SIMD.
+--
+-- -   @minSgprAllocation@ is an unsigned integer value indicating the
+--     minimum number of SGPRs allocated for a wave.
+--
+-- -   @maxSgprAllocation@ is an unsigned integer value indicating the
+--     maximum number of SGPRs allocated for a wave.
+--
+-- -   @sgprAllocationGranularity@ is an unsigned integer value indicating
+--     the granularity of SGPR allocation for a wave.
+--
+-- -   @vgprsPerSimd@ is an unsigned integer value indicating the number of
+--     physical Vector General Purpose Registers (VGPRs) per SIMD.
+--
+-- -   @minVgprAllocation@ is an unsigned integer value indicating the
+--     minimum number of VGPRs allocated for a wave.
+--
+-- -   @maxVgprAllocation@ is an unsigned integer value indicating the
+--     maximum number of VGPRs allocated for a wave.
+--
+-- -   @vgprAllocationGranularity@ is an unsigned integer value indicating
+--     the granularity of VGPR allocation for a wave.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD@
+--
+-- If the @VkPhysicalDeviceShaderCorePropertiesAMD@ 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
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPhysicalDeviceShaderCorePropertiesAMD = VkPhysicalDeviceShaderCorePropertiesAMD
+  { -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkShaderEngineCount"
+  vkShaderEngineCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkShaderArraysPerEngineCount"
+  vkShaderArraysPerEngineCount :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkComputeUnitsPerShaderArray"
+  vkComputeUnitsPerShaderArray :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSimdPerComputeUnit"
+  vkSimdPerComputeUnit :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkWavefrontsPerSimd"
+  vkWavefrontsPerSimd :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkWavefrontSize"
+  vkWavefrontSize :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSgprsPerSimd"
+  vkSgprsPerSimd :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMinSgprAllocation"
+  vkMinSgprAllocation :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMaxSgprAllocation"
+  vkMaxSgprAllocation :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkSgprAllocationGranularity"
+  vkSgprAllocationGranularity :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkVgprsPerSimd"
+  vkVgprsPerSimd :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMinVgprAllocation"
+  vkMinVgprAllocation :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkMaxVgprAllocation"
+  vkMaxVgprAllocation :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceShaderCorePropertiesAMD" "vkVgprAllocationGranularity"
+  vkVgprAllocationGranularity :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceShaderCorePropertiesAMD where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceShaderCorePropertiesAMD <$> 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)
+                                                     <*> peek (ptr `plusPtr` 60)
+                                                     <*> peek (ptr `plusPtr` 64)
+                                                     <*> peek (ptr `plusPtr` 68)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 16) (vkShaderEngineCount (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 20) (vkShaderArraysPerEngineCount (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 24) (vkComputeUnitsPerShaderArray (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 28) (vkSimdPerComputeUnit (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 32) (vkWavefrontsPerSimd (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 36) (vkWavefrontSize (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 40) (vkSgprsPerSimd (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 44) (vkMinSgprAllocation (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 48) (vkMaxSgprAllocation (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 52) (vkSgprAllocationGranularity (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 56) (vkVgprsPerSimd (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 60) (vkMinVgprAllocation (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 64) (vkMaxVgprAllocation (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
+                *> poke (ptr `plusPtr` 68) (vkVgprAllocationGranularity (poked :: VkPhysicalDeviceShaderCorePropertiesAMD))
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_explicit_vertex_parameter.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_explicit_vertex_parameter.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_explicit_vertex_parameter.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
+  ( pattern VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION
+  , pattern VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION"
+pattern VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME"
+pattern VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_SHADER_EXPLICIT_VERTEX_PARAMETER_EXTENSION_NAME = "VK_AMD_shader_explicit_vertex_parameter"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_fragment_mask.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_fragment_mask.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_fragment_mask.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask
+  ( pattern VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION
+  , pattern VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION"
+pattern VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_SHADER_FRAGMENT_MASK_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME"
+pattern VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_SHADER_FRAGMENT_MASK_EXTENSION_NAME = "VK_AMD_shader_fragment_mask"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_image_load_store_lod.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_image_load_store_lod.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_image_load_store_lod.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
+  ( pattern VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION
+  , pattern VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION"
+pattern VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME"
+pattern VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_SHADER_IMAGE_LOAD_STORE_LOD_EXTENSION_NAME = "VK_AMD_shader_image_load_store_lod"
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_info.hs
@@ -0,0 +1,311 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_shader_info
+  ( VkShaderInfoTypeAMD(..)
+  , pattern VK_SHADER_INFO_TYPE_STATISTICS_AMD
+  , pattern VK_SHADER_INFO_TYPE_BINARY_AMD
+  , pattern VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD
+  , pattern VK_AMD_SHADER_INFO_SPEC_VERSION
+  , pattern VK_AMD_SHADER_INFO_EXTENSION_NAME
+  , vkGetShaderInfoAMD
+  , VkShaderResourceUsageAMD(..)
+  , VkShaderStatisticsInfoAMD(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkShaderStageFlagBits(..)
+  , VkPipeline
+  )
+import Graphics.Vulkan.Core10.PipelineLayout
+  ( VkShaderStageFlags
+  )
+
+
+-- ** VkShaderInfoTypeAMD
+
+-- No documentation found for TopLevel "VkShaderInfoTypeAMD"
+newtype VkShaderInfoTypeAMD = VkShaderInfoTypeAMD Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkShaderInfoTypeAMD where
+  showsPrec _ VK_SHADER_INFO_TYPE_STATISTICS_AMD = showString "VK_SHADER_INFO_TYPE_STATISTICS_AMD"
+  showsPrec _ VK_SHADER_INFO_TYPE_BINARY_AMD = showString "VK_SHADER_INFO_TYPE_BINARY_AMD"
+  showsPrec _ VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = showString "VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD"
+  showsPrec p (VkShaderInfoTypeAMD x) = showParen (p >= 11) (showString "VkShaderInfoTypeAMD " . showsPrec 11 x)
+
+instance Read VkShaderInfoTypeAMD where
+  readPrec = parens ( choose [ ("VK_SHADER_INFO_TYPE_STATISTICS_AMD",  pure VK_SHADER_INFO_TYPE_STATISTICS_AMD)
+                             , ("VK_SHADER_INFO_TYPE_BINARY_AMD",      pure VK_SHADER_INFO_TYPE_BINARY_AMD)
+                             , ("VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD", pure VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkShaderInfoTypeAMD")
+                        v <- step readPrec
+                        pure (VkShaderInfoTypeAMD v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkShaderInfoTypeAMD" "VK_SHADER_INFO_TYPE_STATISTICS_AMD"
+pattern VK_SHADER_INFO_TYPE_STATISTICS_AMD :: VkShaderInfoTypeAMD
+pattern VK_SHADER_INFO_TYPE_STATISTICS_AMD = VkShaderInfoTypeAMD 0
+
+-- No documentation found for Nested "VkShaderInfoTypeAMD" "VK_SHADER_INFO_TYPE_BINARY_AMD"
+pattern VK_SHADER_INFO_TYPE_BINARY_AMD :: VkShaderInfoTypeAMD
+pattern VK_SHADER_INFO_TYPE_BINARY_AMD = VkShaderInfoTypeAMD 1
+
+-- No documentation found for Nested "VkShaderInfoTypeAMD" "VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD"
+pattern VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD :: VkShaderInfoTypeAMD
+pattern VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD = VkShaderInfoTypeAMD 2
+-- No documentation found for TopLevel "VK_AMD_SHADER_INFO_SPEC_VERSION"
+pattern VK_AMD_SHADER_INFO_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_SHADER_INFO_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_SHADER_INFO_EXTENSION_NAME"
+pattern VK_AMD_SHADER_INFO_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_SHADER_INFO_EXTENSION_NAME = "VK_AMD_shader_info"
+-- | vkGetShaderInfoAMD - Get information about a shader in a pipeline
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device that created @pipeline@.
+--
+-- -   @pipeline@ is the target of the query.
+--
+-- -   @shaderStage@ identifies the particular shader within the pipeline
+--     about which information is being queried.
+--
+-- -   @infoType@ describes what kind of information is being queried.
+--
+-- -   @pInfoSize@ is a pointer to a value related to the amount of data
+--     the query returns, as described below.
+--
+-- -   @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
+-- @pInfoSize@. Otherwise, @pInfoSize@ /must/ point to a variable set by
+-- the user to the size of the buffer, in bytes, pointed to by @pInfo@, and
+-- on return the variable is overwritten with the amount of data actually
+-- written to @pInfo@.
+--
+-- If @pInfoSize@ is less than the maximum size that /can/ be retrieved by
+-- the pipeline cache, then at most @pInfoSize@ bytes will be written to
+-- @pInfo@, and @vkGetShaderInfoAMD@ will return @VK_INCOMPLETE@.
+--
+-- Not all information is available for every shader and implementations
+-- may not support all kinds of information for any shader. When a certain
+-- type of information is unavailable, the function returns
+-- @VK_ERROR_FEATURE_NOT_PRESENT@.
+--
+-- If information is successfully and fully queried, the function will
+-- return @VK_SUCCESS@.
+--
+-- For @VK_SHADER_INFO_TYPE_STATISTICS_AMD@, an instance of
+-- @VkShaderStatisticsInfoAMD@ will be written to the buffer pointed to by
+-- @pInfo@. This structure will be populated with statistics regarding the
+-- physical device resources used by that shader along with other
+-- miscellaneous information and is described in further detail below.
+--
+-- For @VK_SHADER_INFO_TYPE_DISASSEMBLY_AMD@, @pInfo@ points to a UTF-8
+-- null-terminated string containing human-readable disassembly. The exact
+-- formatting and contents of the disassembly string are vendor-specific.
+--
+-- The formatting and contents of all other types of information, including
+-- @VK_SHADER_INFO_TYPE_BINARY_AMD@, are left to the vendor and are not
+-- further specified by this extension.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pipeline@ /must/ be a valid @VkPipeline@ handle
+--
+-- -   @shaderStage@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' value
+--
+-- -   @infoType@ /must/ be a valid 'VkShaderInfoTypeAMD' value
+--
+-- -   @pInfoSize@ /must/ be a valid pointer to a @size_t@ value
+--
+-- -   If the value referenced by @pInfoSize@ is not @0@, and @pInfo@ is
+--     not @NULL@, @pInfo@ /must/ be a valid pointer to an array of
+--     @pInfoSize@ bytes
+--
+-- -   @pipeline@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits'
+foreign import ccall "vkGetShaderInfoAMD" vkGetShaderInfoAMD :: ("device" ::: VkDevice) -> ("pipeline" ::: VkPipeline) -> ("shaderStage" ::: VkShaderStageFlagBits) -> ("infoType" ::: VkShaderInfoTypeAMD) -> ("pInfoSize" ::: Ptr CSize) -> ("pInfo" ::: Ptr ()) -> IO VkResult
+-- | 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"
+  vkNumUsedVgprs :: Word32
+  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkNumUsedSgprs"
+  vkNumUsedSgprs :: Word32
+  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkLdsSizePerLocalWorkGroup"
+  vkLdsSizePerLocalWorkGroup :: Word32
+  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkLdsUsageSizeInBytes"
+  vkLdsUsageSizeInBytes :: CSize
+  , -- No documentation found for Nested "VkShaderResourceUsageAMD" "vkScratchMemUsageInBytes"
+  vkScratchMemUsageInBytes :: CSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkShaderResourceUsageAMD where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkShaderResourceUsageAMD <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 4)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkNumUsedVgprs (poked :: VkShaderResourceUsageAMD))
+                *> poke (ptr `plusPtr` 4) (vkNumUsedSgprs (poked :: VkShaderResourceUsageAMD))
+                *> poke (ptr `plusPtr` 8) (vkLdsSizePerLocalWorkGroup (poked :: VkShaderResourceUsageAMD))
+                *> poke (ptr `plusPtr` 16) (vkLdsUsageSizeInBytes (poked :: VkShaderResourceUsageAMD))
+                *> poke (ptr `plusPtr` 24) (vkScratchMemUsageInBytes (poked :: VkShaderResourceUsageAMD))
+-- | VkShaderStatisticsInfoAMD - Statistical information about a particular
+-- 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
+-- bitmask of all of the stages that are active within that shader.
+-- Consequently, if specifying those stages as input to
+-- 'vkGetShaderInfoAMD', the same output information /may/ be returned for
+-- all such shader stage queries.
+--
+-- The number of available VGPRs and SGPRs (@numAvailableVgprs@ and
+-- @numAvailableSgprs@ respectively) are the shader-addressable subset of
+-- physical registers that is given as a limit to the compiler for register
+-- assignment. These values /may/ further be limited by implementations due
+-- 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"
+  vkShaderStageMask :: VkShaderStageFlags
+  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkResourceUsage"
+  vkResourceUsage :: VkShaderResourceUsageAMD
+  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumPhysicalVgprs"
+  vkNumPhysicalVgprs :: Word32
+  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumPhysicalSgprs"
+  vkNumPhysicalSgprs :: Word32
+  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumAvailableVgprs"
+  vkNumAvailableVgprs :: Word32
+  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkNumAvailableSgprs"
+  vkNumAvailableSgprs :: Word32
+  , -- No documentation found for Nested "VkShaderStatisticsInfoAMD" "vkComputeWorkGroupSize"
+  vkComputeWorkGroupSize :: Vector 3 Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkShaderStatisticsInfoAMD where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkShaderStatisticsInfoAMD <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 8)
+                                       <*> 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) (vkShaderStageMask (poked :: VkShaderStatisticsInfoAMD))
+                *> poke (ptr `plusPtr` 8) (vkResourceUsage (poked :: VkShaderStatisticsInfoAMD))
+                *> poke (ptr `plusPtr` 40) (vkNumPhysicalVgprs (poked :: VkShaderStatisticsInfoAMD))
+                *> poke (ptr `plusPtr` 44) (vkNumPhysicalSgprs (poked :: VkShaderStatisticsInfoAMD))
+                *> poke (ptr `plusPtr` 48) (vkNumAvailableVgprs (poked :: VkShaderStatisticsInfoAMD))
+                *> poke (ptr `plusPtr` 52) (vkNumAvailableSgprs (poked :: VkShaderStatisticsInfoAMD))
+                *> poke (ptr `plusPtr` 56) (vkComputeWorkGroupSize (poked :: VkShaderStatisticsInfoAMD))
diff --git a/src/Graphics/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_shader_trinary_minmax.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax
+  ( pattern VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION
+  , pattern VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION"
+pattern VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_SHADER_TRINARY_MINMAX_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME"
+pattern VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_SHADER_TRINARY_MINMAX_EXTENSION_NAME = "VK_AMD_shader_trinary_minmax"
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_AMD_texture_gather_bias_lod.hs
@@ -0,0 +1,71 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
+  ( pattern VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD
+  , pattern VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION
+  , pattern VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME
+  , VkTextureLODGatherFormatPropertiesAMD(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD"
+pattern VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD :: VkStructureType
+pattern VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = VkStructureType 1000041000
+-- No documentation found for TopLevel "VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION"
+pattern VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION :: Integral a => a
+pattern VK_AMD_TEXTURE_GATHER_BIAS_LOD_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME"
+pattern VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_AMD_TEXTURE_GATHER_BIAS_LOD_EXTENSION_NAME = "VK_AMD_texture_gather_bias_lod"
+-- | VkTextureLODGatherFormatPropertiesAMD - Structure informing whether or
+-- 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkTextureLODGatherFormatPropertiesAMD" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkTextureLODGatherFormatPropertiesAMD" "vkSupportsTextureGatherLODBiasAMD"
+  vkSupportsTextureGatherLODBiasAMD :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkTextureLODGatherFormatPropertiesAMD where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkTextureLODGatherFormatPropertiesAMD <$> peek (ptr `plusPtr` 0)
+                                                   <*> peek (ptr `plusPtr` 8)
+                                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkTextureLODGatherFormatPropertiesAMD))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkTextureLODGatherFormatPropertiesAMD))
+                *> poke (ptr `plusPtr` 16) (vkSupportsTextureGatherLODBiasAMD (poked :: VkTextureLODGatherFormatPropertiesAMD))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_ANDROID_external_memory_android_hardware_buffer.hs
@@ -0,0 +1,557 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_ANDROID_external_memory_android_hardware_buffer
+  ( AHardwareBuffer
+  , pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID
+  , pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID
+  , pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID
+  , pattern VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
+  , pattern VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID
+  , pattern VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION
+  , pattern VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME
+  , vkGetAndroidHardwareBufferPropertiesANDROID
+  , vkGetMemoryAndroidHardwareBufferANDROID
+  , VkImportAndroidHardwareBufferInfoANDROID(..)
+  , VkAndroidHardwareBufferUsageANDROID(..)
+  , VkAndroidHardwareBufferPropertiesANDROID(..)
+  , VkMemoryGetAndroidHardwareBufferInfoANDROID(..)
+  , VkAndroidHardwareBufferFormatPropertiesANDROID(..)
+  , VkExternalFormatANDROID(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  , Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  , VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkFormatFeatureFlags
+  , VkDeviceSize
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.ImageView
+  ( VkComponentMapping(..)
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBits(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion
+  ( VkChromaLocation(..)
+  , VkSamplerYcbcrRange(..)
+  , VkSamplerYcbcrModelConversion(..)
+  )
+
+
+-- | Opaque data
+data AHardwareBuffer
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID"
+pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID :: VkStructureType
+pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID = VkStructureType 1000129000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID"
+pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID :: VkStructureType
+pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID = VkStructureType 1000129001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID"
+pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID :: VkStructureType
+pattern VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID = VkStructureType 1000129002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+pattern VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = VkStructureType 1000129003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID"
+pattern VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = VkStructureType 1000129004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = VkStructureType 1000129005
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID = VkExternalMemoryHandleTypeFlagBits 0x00000400
+-- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION"
+pattern VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION :: Integral a => a
+pattern VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION = 3
+-- No documentation found for TopLevel "VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME"
+pattern VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME = "VK_ANDROID_external_memory_android_hardware_buffer"
+-- | vkGetAndroidHardwareBufferPropertiesANDROID - Get Properties of External
+-- Memory Android Hardware Buffers
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that will be importing @buffer@.
+--
+-- -   @buffer@ is the Android hardware buffer which will be imported.
+--
+-- -   @pProperties@ will return properties of @buffer@.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @buffer@ /must/ be a valid Android hardware buffer object with at
+--     least one of the @AHARDWAREBUFFER_USAGE_GPU_@* usage flags.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @buffer@ /must/ be a valid pointer to a valid @AHardwareBuffer@
+--     value
+--
+-- -   @pProperties@ /must/ be a valid pointer to a
+--     @VkAndroidHardwareBufferPropertiesANDROID@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAndroidHardwareBufferPropertiesANDROID',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkGetAndroidHardwareBufferPropertiesANDROID" vkGetAndroidHardwareBufferPropertiesANDROID :: ("device" ::: VkDevice) -> ("buffer" ::: Ptr AHardwareBuffer) -> ("pProperties" ::: Ptr VkAndroidHardwareBufferPropertiesANDROID) -> IO VkResult
+-- | vkGetMemoryAndroidHardwareBufferANDROID - Get an Android hardware buffer
+-- for a memory object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the device memory being
+--     exported.
+--
+-- -   @pInfo@ is a pointer to an instance of the
+--     'VkMemoryGetAndroidHardwareBufferInfoANDROID' structure containing
+--     parameters of the export operation.
+--
+-- -   @pBuffer@ will return an Android hardware buffer representing the
+--     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
+-- reference held by the @VkDeviceMemory@. To avoid leaking resources, the
+-- application /must/ release the reference by calling
+-- AHardwareBuffer_release when it is no longer needed. When called with
+-- the same handle in
+-- @VkMemoryGetAndroidHardwareBufferInfoANDROID@::@memory@,
+-- @vkGetMemoryAndroidHardwareBufferANDROID@ /must/ return the same Android
+-- hardware buffer object. If the device memory was created by importing an
+-- Android hardware buffer, @vkGetMemoryAndroidHardwareBufferANDROID@
+-- /must/ return that same Android hardware buffer object.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pInfo@ /must/ be a valid pointer to a valid
+--     @VkMemoryGetAndroidHardwareBufferInfoANDROID@ structure
+--
+-- -   @pBuffer@ /must/ be a valid pointer to a valid pointer to a
+--     @AHardwareBuffer@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkMemoryGetAndroidHardwareBufferInfoANDROID'
+foreign import ccall "vkGetMemoryAndroidHardwareBufferANDROID" vkGetMemoryAndroidHardwareBufferANDROID :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkMemoryGetAndroidHardwareBufferInfoANDROID) -> ("pBuffer" ::: Ptr (Ptr AHardwareBuffer)) -> IO VkResult
+-- | VkImportAndroidHardwareBufferInfoANDROID - Import memory from an Android
+-- hardware buffer
+--
+-- = Description
+-- #_description#
+--
+-- If the @vkAllocateMemory@ command succeeds, the implementation /must/
+-- acquire a reference to the imported hardware buffer, which it /must/
+-- release when the device memory object is freed. If the command fails,
+-- the implementation /must/ not retain a reference.
+--
+-- == Valid Usage
+--
+-- -   If @buffer@ is not @NULL@, Android hardware buffers /must/ be
+--     supported for import, 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'.
+--
+-- -   If @buffer@ is not @NULL@, it /must/ be a valid Android hardware
+--     buffer object with format and usage compatible with Vulkan as
+--     described by
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportAndroidHardwareBufferInfoANDROID" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportAndroidHardwareBufferInfoANDROID" "vkBuffer"
+  vkBuffer :: Ptr AHardwareBuffer
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportAndroidHardwareBufferInfoANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkImportAndroidHardwareBufferInfoANDROID <$> peek (ptr `plusPtr` 0)
+                                                      <*> peek (ptr `plusPtr` 8)
+                                                      <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImportAndroidHardwareBufferInfoANDROID))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportAndroidHardwareBufferInfoANDROID))
+                *> poke (ptr `plusPtr` 16) (vkBuffer (poked :: VkImportAndroidHardwareBufferInfoANDROID))
+-- | VkAndroidHardwareBufferUsageANDROID - Struct containing Android hardware
+-- 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>
+-- 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'.
+-- It /must/ include at least one GPU usage flag
+-- (@AHARDWAREBUFFER_USAGE_GPU_@*), even if none of the corresponding
+-- Vulkan usages or flags are requested.
+--
+-- __Note__
+--
+-- Requiring at least one GPU usage flag ensures that Android hardware
+-- buffer memory will be allocated in a memory pool accessible to the
+-- Vulkan implementation, and that specializing the memory layout based on
+-- usage flags doesn’t prevent it from being compatible with Vulkan.
+-- Implementations /may/ avoid unnecessary restrictions caused by this
+-- requirement by using vendor usage flags to indicate that only the Vulkan
+-- uses indicated in
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2.VkImageFormatProperties2'
+-- are required.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkAndroidHardwareBufferUsageANDROID" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkAndroidHardwareBufferUsageANDROID" "vkAndroidHardwareBufferUsage"
+  vkAndroidHardwareBufferUsage :: Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAndroidHardwareBufferUsageANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkAndroidHardwareBufferUsageANDROID <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkAndroidHardwareBufferUsageANDROID))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkAndroidHardwareBufferUsageANDROID))
+                *> poke (ptr `plusPtr` 16) (vkAndroidHardwareBufferUsage (poked :: VkAndroidHardwareBufferUsageANDROID))
+-- | 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkAndroidHardwareBufferPropertiesANDROID" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkAndroidHardwareBufferPropertiesANDROID" "vkAllocationSize"
+  vkAllocationSize :: VkDeviceSize
+  , -- No documentation found for Nested "VkAndroidHardwareBufferPropertiesANDROID" "vkMemoryTypeBits"
+  vkMemoryTypeBits :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAndroidHardwareBufferPropertiesANDROID where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkAndroidHardwareBufferPropertiesANDROID <$> peek (ptr `plusPtr` 0)
+                                                      <*> peek (ptr `plusPtr` 8)
+                                                      <*> peek (ptr `plusPtr` 16)
+                                                      <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkAndroidHardwareBufferPropertiesANDROID))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkAndroidHardwareBufferPropertiesANDROID))
+                *> poke (ptr `plusPtr` 16) (vkAllocationSize (poked :: VkAndroidHardwareBufferPropertiesANDROID))
+                *> poke (ptr `plusPtr` 24) (vkMemoryTypeBits (poked :: VkAndroidHardwareBufferPropertiesANDROID))
+-- | VkMemoryGetAndroidHardwareBufferInfoANDROID - Structure describing an
+-- Android hardware buffer memory export operation
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID@
+--     /must/ have been included in
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_memory.VkExportMemoryAllocateInfoKHR'::@handleTypes@
+--     when @memory@ was created.
+--
+-- -   If the @pNext@ chain of the @VkMemoryAllocateInfo@ used to allocate
+--     @memory@ included a @VkMemoryDedicatedAllocateInfo@ with non-NULL
+--     @image@ member, then that @image@ /must/ already be bound to
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryGetAndroidHardwareBufferInfoANDROID" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryGetAndroidHardwareBufferInfoANDROID" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryGetAndroidHardwareBufferInfoANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryGetAndroidHardwareBufferInfoANDROID <$> peek (ptr `plusPtr` 0)
+                                                         <*> peek (ptr `plusPtr` 8)
+                                                         <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryGetAndroidHardwareBufferInfoANDROID))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryGetAndroidHardwareBufferInfoANDROID))
+                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkMemoryGetAndroidHardwareBufferInfoANDROID))
+-- | VkAndroidHardwareBufferFormatPropertiesANDROID - Structure describing
+-- 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>,
+-- 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.
+--
+-- The @formatFeatures@ member /must/ include
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@ and at least one of
+-- @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@ or
+-- @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@, and /should/ include
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@ and
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT@.
+--
+-- Android hardware buffers with the same external format /must/ have the
+-- same support for @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT@,
+-- @VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT@,
+-- @VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT@,
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT@,
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT@,
+-- and
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT@.
+-- Other format features /may/ differ between Android hardware buffers that
+-- have the same external format. This allows applications to use the same
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversion'
+-- object (and samplers and pipelines created from them) for any Android
+-- hardware buffers that have the same external format.
+--
+-- If @format@ is not @VK_FORMAT_UNDEFINED@, then the value of
+-- @samplerYcbcrConversionComponents@ /must/ be valid when used as the
+-- @components@ member of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrConversionCreateInfo'
+-- with that format. If @format@ is @VK_FORMAT_UNDEFINED@, all members of
+-- @samplerYcbcrConversionComponents@ /must/ be
+-- @VK_COMPONENT_SWIZZLE_IDENTITY@.
+--
+-- Implementations may not always be able to determine the color model,
+-- numerical range, or chroma offsets of the image contents, so the values
+-- in @VkAndroidHardwareBufferFormatPropertiesANDROID@ are only
+-- suggestions. Applications /should/ treat these values as sensible
+-- defaults to use in the absence of more reliable information obtained
+-- through some other means. If the underlying physical device is also
+-- usable via OpenGL ES with the GL_OES_EGL_image_external extension, the
+-- implementation /should/ suggest values that will produce similar sampled
+-- values as would be obtained by sampling the same external image via
+-- @samplerExternalOES@ in OpenGL ES using equivalent sampler parameters.
+--
+-- __Note__
+--
+-- Since GL_OES_EGL_image_external does not require the same sampling and
+-- conversion calculations as Vulkan does, achieving identical results
+-- between APIs /may/ not be possible on some implementations.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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',
+-- 'Graphics.Vulkan.Core10.Core.VkFormat',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkFormatFeatureFlags',
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion.VkSamplerYcbcrModelConversion',
+-- '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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkFormat"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkExternalFormat"
+  vkExternalFormat :: Word64
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkFormatFeatures"
+  vkFormatFeatures :: VkFormatFeatureFlags
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSamplerYcbcrConversionComponents"
+  vkSamplerYcbcrConversionComponents :: VkComponentMapping
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedYcbcrModel"
+  vkSuggestedYcbcrModel :: VkSamplerYcbcrModelConversion
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedYcbcrRange"
+  vkSuggestedYcbcrRange :: VkSamplerYcbcrRange
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedXChromaOffset"
+  vkSuggestedXChromaOffset :: VkChromaLocation
+  , -- No documentation found for Nested "VkAndroidHardwareBufferFormatPropertiesANDROID" "vkSuggestedYChromaOffset"
+  vkSuggestedYChromaOffset :: VkChromaLocation
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAndroidHardwareBufferFormatPropertiesANDROID where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkAndroidHardwareBufferFormatPropertiesANDROID <$> peek (ptr `plusPtr` 0)
+                                                            <*> peek (ptr `plusPtr` 8)
+                                                            <*> peek (ptr `plusPtr` 16)
+                                                            <*> peek (ptr `plusPtr` 24)
+                                                            <*> peek (ptr `plusPtr` 32)
+                                                            <*> peek (ptr `plusPtr` 36)
+                                                            <*> peek (ptr `plusPtr` 52)
+                                                            <*> peek (ptr `plusPtr` 56)
+                                                            <*> peek (ptr `plusPtr` 60)
+                                                            <*> peek (ptr `plusPtr` 64)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 16) (vkFormat (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 24) (vkExternalFormat (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 32) (vkFormatFeatures (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 36) (vkSamplerYcbcrConversionComponents (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 52) (vkSuggestedYcbcrModel (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 56) (vkSuggestedYcbcrRange (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 60) (vkSuggestedXChromaOffset (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+                *> poke (ptr `plusPtr` 64) (vkSuggestedYChromaOffset (poked :: VkAndroidHardwareBufferFormatPropertiesANDROID))
+-- | VkExternalFormatANDROID - Structure containing an Android hardware
+-- buffer external format
+--
+-- = Description
+-- #_description#
+--
+-- If @externalFormat@ is zero, the effect is as if the
+-- @VkExternalFormatANDROID@ structure was not present. Otherwise, the
+-- image will have the specified external format, and
+-- @VkImageCreateInfo@::@format@ /must/ be @VK_FORMAT_UNDEFINED@.
+--
+-- == Valid Usage
+--
+-- -   @externalFormat@ /must/ be @0@ or a value returned in the
+--     @externalFormat@ member of
+--     'VkAndroidHardwareBufferFormatPropertiesANDROID' by an earlier call
+--     to 'vkGetAndroidHardwareBufferPropertiesANDROID'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalFormatANDROID" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalFormatANDROID" "vkExternalFormat"
+  vkExternalFormat :: Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalFormatANDROID where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExternalFormatANDROID <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExternalFormatANDROID))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalFormatANDROID))
+                *> poke (ptr `plusPtr` 16) (vkExternalFormat (poked :: VkExternalFormatANDROID))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_acquire_xlib_display.hs
@@ -0,0 +1,147 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display
+  ( RROutput
+  , pattern VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION
+  , pattern VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME
+  , vkAcquireXlibDisplayEXT
+  , vkGetRandROutputDisplayEXT
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_display
+  ( VkDisplayKHR
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
+  ( Display(..)
+  )
+
+
+-- No documentation found for TopLevel "RROutput"
+type RROutput = Word64
+-- No documentation found for TopLevel "VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION"
+pattern VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_ACQUIRE_XLIB_DISPLAY_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME"
+pattern VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME = "VK_EXT_acquire_xlib_display"
+-- | vkAcquireXlibDisplayEXT - Acquire access to a VkDisplayKHR using Xlib
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ The physical device the display is on.
+--
+-- -   @dpy@ A connection to the X11 server that currently owns @display@.
+--
+-- -   @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
+-- released or the X11 connection specified by @dpy@ is terminated.
+-- Permission to access the display /may/ be temporarily revoked during
+-- periods when the X11 server from which control was acquired itself
+-- looses access to @display@. During such periods, operations which
+-- require access to the display /must/ fail with an approriate error code.
+-- If the X11 server associated with @dpy@ does not own @display@, or if
+-- permission to access it has already been acquired by another entity, the
+-- call /must/ return the error code @VK_ERROR_INITIALIZATION_FAILED@.
+--
+-- __Note__
+--
+-- One example of when an X11 server loses access to a display is when it
+-- loses ownership of its virtual terminal.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @dpy@ /must/ be a valid pointer to a @Display@ value
+--
+-- -   @display@ /must/ be a valid @VkDisplayKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_INITIALIZATION_FAILED@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkAcquireXlibDisplayEXT" vkAcquireXlibDisplayEXT :: ("physicalDevice" ::: VkPhysicalDevice) -> ("dpy" ::: Ptr Display) -> ("display" ::: VkDisplayKHR) -> IO VkResult
+-- | vkGetRandROutputDisplayEXT - Query the VkDisplayKHR corresponding to an
+-- X11 RandR Output
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ The physical device to query the display handle on.
+--
+-- -   @dpy@ A connection to the X11 server from which @rrOutput@ was
+--     queried.
+--
+-- -   @rrOutput@ An X11 RandR output ID.
+--
+-- -   @pDisplay@ The corresponding
+--     'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR' handle will
+--     be returned here.
+--
+-- = Description
+-- #_description#
+--
+-- If there is no 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR'
+-- corresponding to @rrOutput@ on @physicalDevice@,
+-- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' /must/ be returned in
+-- @pDisplay@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @dpy@ /must/ be a valid pointer to a @Display@ value
+--
+-- -   @pDisplay@ /must/ be a valid pointer to a @VkDisplayKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetRandROutputDisplayEXT" vkGetRandROutputDisplayEXT :: ("physicalDevice" ::: VkPhysicalDevice) -> ("dpy" ::: Ptr Display) -> ("rrOutput" ::: RROutput) -> ("pDisplay" ::: Ptr VkDisplayKHR) -> IO VkResult
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_blend_operation_advanced.hs
@@ -0,0 +1,556 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced
+  ( VkBlendOverlapEXT(..)
+  , pattern VK_BLEND_OVERLAP_UNCORRELATED_EXT
+  , pattern VK_BLEND_OVERLAP_DISJOINT_EXT
+  , pattern VK_BLEND_OVERLAP_CONJOINT_EXT
+  , pattern VK_BLEND_OP_ZERO_EXT
+  , pattern VK_BLEND_OP_SRC_EXT
+  , pattern VK_BLEND_OP_DST_EXT
+  , pattern VK_BLEND_OP_SRC_OVER_EXT
+  , pattern VK_BLEND_OP_DST_OVER_EXT
+  , pattern VK_BLEND_OP_SRC_IN_EXT
+  , pattern VK_BLEND_OP_DST_IN_EXT
+  , pattern VK_BLEND_OP_SRC_OUT_EXT
+  , pattern VK_BLEND_OP_DST_OUT_EXT
+  , pattern VK_BLEND_OP_SRC_ATOP_EXT
+  , pattern VK_BLEND_OP_DST_ATOP_EXT
+  , pattern VK_BLEND_OP_XOR_EXT
+  , pattern VK_BLEND_OP_MULTIPLY_EXT
+  , pattern VK_BLEND_OP_SCREEN_EXT
+  , pattern VK_BLEND_OP_OVERLAY_EXT
+  , pattern VK_BLEND_OP_DARKEN_EXT
+  , pattern VK_BLEND_OP_LIGHTEN_EXT
+  , pattern VK_BLEND_OP_COLORDODGE_EXT
+  , pattern VK_BLEND_OP_COLORBURN_EXT
+  , pattern VK_BLEND_OP_HARDLIGHT_EXT
+  , pattern VK_BLEND_OP_SOFTLIGHT_EXT
+  , pattern VK_BLEND_OP_DIFFERENCE_EXT
+  , pattern VK_BLEND_OP_EXCLUSION_EXT
+  , pattern VK_BLEND_OP_INVERT_EXT
+  , pattern VK_BLEND_OP_INVERT_RGB_EXT
+  , pattern VK_BLEND_OP_LINEARDODGE_EXT
+  , pattern VK_BLEND_OP_LINEARBURN_EXT
+  , pattern VK_BLEND_OP_VIVIDLIGHT_EXT
+  , pattern VK_BLEND_OP_LINEARLIGHT_EXT
+  , pattern VK_BLEND_OP_PINLIGHT_EXT
+  , pattern VK_BLEND_OP_HARDMIX_EXT
+  , pattern VK_BLEND_OP_HSL_HUE_EXT
+  , pattern VK_BLEND_OP_HSL_SATURATION_EXT
+  , pattern VK_BLEND_OP_HSL_COLOR_EXT
+  , pattern VK_BLEND_OP_HSL_LUMINOSITY_EXT
+  , pattern VK_BLEND_OP_PLUS_EXT
+  , pattern VK_BLEND_OP_PLUS_CLAMPED_EXT
+  , pattern VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT
+  , pattern VK_BLEND_OP_PLUS_DARKER_EXT
+  , pattern VK_BLEND_OP_MINUS_EXT
+  , pattern VK_BLEND_OP_MINUS_CLAMPED_EXT
+  , pattern VK_BLEND_OP_CONTRAST_EXT
+  , pattern VK_BLEND_OP_INVERT_OVG_EXT
+  , pattern VK_BLEND_OP_RED_EXT
+  , pattern VK_BLEND_OP_GREEN_EXT
+  , pattern VK_BLEND_OP_BLUE_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT
+  , pattern VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT
+  , pattern VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION
+  , pattern VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME
+  , VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(..)
+  , VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(..)
+  , VkPipelineColorBlendAdvancedStateCreateInfoEXT(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkAccessFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkBlendOp(..)
+  )
+
+
+-- ** VkBlendOverlapEXT
+
+-- | 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.
+--
+-- -   @VK_BLEND_OVERLAP_CONJOINT_EXT@ specifies that the source and
+--     destination coverage are considered to have maximal overlap.
+--
+-- -   @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
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineColorBlendAdvancedStateCreateInfoEXT'
+newtype VkBlendOverlapEXT = VkBlendOverlapEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkBlendOverlapEXT where
+  showsPrec _ VK_BLEND_OVERLAP_UNCORRELATED_EXT = showString "VK_BLEND_OVERLAP_UNCORRELATED_EXT"
+  showsPrec _ VK_BLEND_OVERLAP_DISJOINT_EXT = showString "VK_BLEND_OVERLAP_DISJOINT_EXT"
+  showsPrec _ VK_BLEND_OVERLAP_CONJOINT_EXT = showString "VK_BLEND_OVERLAP_CONJOINT_EXT"
+  showsPrec p (VkBlendOverlapEXT x) = showParen (p >= 11) (showString "VkBlendOverlapEXT " . showsPrec 11 x)
+
+instance Read VkBlendOverlapEXT where
+  readPrec = parens ( choose [ ("VK_BLEND_OVERLAP_UNCORRELATED_EXT", pure VK_BLEND_OVERLAP_UNCORRELATED_EXT)
+                             , ("VK_BLEND_OVERLAP_DISJOINT_EXT",     pure VK_BLEND_OVERLAP_DISJOINT_EXT)
+                             , ("VK_BLEND_OVERLAP_CONJOINT_EXT",     pure VK_BLEND_OVERLAP_CONJOINT_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkBlendOverlapEXT")
+                        v <- step readPrec
+                        pure (VkBlendOverlapEXT v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkBlendOverlapEXT" "VK_BLEND_OVERLAP_UNCORRELATED_EXT"
+pattern VK_BLEND_OVERLAP_UNCORRELATED_EXT :: VkBlendOverlapEXT
+pattern VK_BLEND_OVERLAP_UNCORRELATED_EXT = VkBlendOverlapEXT 0
+
+-- No documentation found for Nested "VkBlendOverlapEXT" "VK_BLEND_OVERLAP_DISJOINT_EXT"
+pattern VK_BLEND_OVERLAP_DISJOINT_EXT :: VkBlendOverlapEXT
+pattern VK_BLEND_OVERLAP_DISJOINT_EXT = VkBlendOverlapEXT 1
+
+-- No documentation found for Nested "VkBlendOverlapEXT" "VK_BLEND_OVERLAP_CONJOINT_EXT"
+pattern VK_BLEND_OVERLAP_CONJOINT_EXT :: VkBlendOverlapEXT
+pattern VK_BLEND_OVERLAP_CONJOINT_EXT = VkBlendOverlapEXT 2
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_ZERO_EXT"
+pattern VK_BLEND_OP_ZERO_EXT :: VkBlendOp
+pattern VK_BLEND_OP_ZERO_EXT = VkBlendOp 1000148000
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_EXT"
+pattern VK_BLEND_OP_SRC_EXT :: VkBlendOp
+pattern VK_BLEND_OP_SRC_EXT = VkBlendOp 1000148001
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_EXT"
+pattern VK_BLEND_OP_DST_EXT :: VkBlendOp
+pattern VK_BLEND_OP_DST_EXT = VkBlendOp 1000148002
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_OVER_EXT"
+pattern VK_BLEND_OP_SRC_OVER_EXT :: VkBlendOp
+pattern VK_BLEND_OP_SRC_OVER_EXT = VkBlendOp 1000148003
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_OVER_EXT"
+pattern VK_BLEND_OP_DST_OVER_EXT :: VkBlendOp
+pattern VK_BLEND_OP_DST_OVER_EXT = VkBlendOp 1000148004
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_IN_EXT"
+pattern VK_BLEND_OP_SRC_IN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_SRC_IN_EXT = VkBlendOp 1000148005
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_IN_EXT"
+pattern VK_BLEND_OP_DST_IN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_DST_IN_EXT = VkBlendOp 1000148006
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_OUT_EXT"
+pattern VK_BLEND_OP_SRC_OUT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_SRC_OUT_EXT = VkBlendOp 1000148007
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_OUT_EXT"
+pattern VK_BLEND_OP_DST_OUT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_DST_OUT_EXT = VkBlendOp 1000148008
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SRC_ATOP_EXT"
+pattern VK_BLEND_OP_SRC_ATOP_EXT :: VkBlendOp
+pattern VK_BLEND_OP_SRC_ATOP_EXT = VkBlendOp 1000148009
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DST_ATOP_EXT"
+pattern VK_BLEND_OP_DST_ATOP_EXT :: VkBlendOp
+pattern VK_BLEND_OP_DST_ATOP_EXT = VkBlendOp 1000148010
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_XOR_EXT"
+pattern VK_BLEND_OP_XOR_EXT :: VkBlendOp
+pattern VK_BLEND_OP_XOR_EXT = VkBlendOp 1000148011
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MULTIPLY_EXT"
+pattern VK_BLEND_OP_MULTIPLY_EXT :: VkBlendOp
+pattern VK_BLEND_OP_MULTIPLY_EXT = VkBlendOp 1000148012
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SCREEN_EXT"
+pattern VK_BLEND_OP_SCREEN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_SCREEN_EXT = VkBlendOp 1000148013
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_OVERLAY_EXT"
+pattern VK_BLEND_OP_OVERLAY_EXT :: VkBlendOp
+pattern VK_BLEND_OP_OVERLAY_EXT = VkBlendOp 1000148014
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DARKEN_EXT"
+pattern VK_BLEND_OP_DARKEN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_DARKEN_EXT = VkBlendOp 1000148015
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LIGHTEN_EXT"
+pattern VK_BLEND_OP_LIGHTEN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_LIGHTEN_EXT = VkBlendOp 1000148016
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_COLORDODGE_EXT"
+pattern VK_BLEND_OP_COLORDODGE_EXT :: VkBlendOp
+pattern VK_BLEND_OP_COLORDODGE_EXT = VkBlendOp 1000148017
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_COLORBURN_EXT"
+pattern VK_BLEND_OP_COLORBURN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_COLORBURN_EXT = VkBlendOp 1000148018
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HARDLIGHT_EXT"
+pattern VK_BLEND_OP_HARDLIGHT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_HARDLIGHT_EXT = VkBlendOp 1000148019
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_SOFTLIGHT_EXT"
+pattern VK_BLEND_OP_SOFTLIGHT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_SOFTLIGHT_EXT = VkBlendOp 1000148020
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_DIFFERENCE_EXT"
+pattern VK_BLEND_OP_DIFFERENCE_EXT :: VkBlendOp
+pattern VK_BLEND_OP_DIFFERENCE_EXT = VkBlendOp 1000148021
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_EXCLUSION_EXT"
+pattern VK_BLEND_OP_EXCLUSION_EXT :: VkBlendOp
+pattern VK_BLEND_OP_EXCLUSION_EXT = VkBlendOp 1000148022
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_EXT"
+pattern VK_BLEND_OP_INVERT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_INVERT_EXT = VkBlendOp 1000148023
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_RGB_EXT"
+pattern VK_BLEND_OP_INVERT_RGB_EXT :: VkBlendOp
+pattern VK_BLEND_OP_INVERT_RGB_EXT = VkBlendOp 1000148024
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARDODGE_EXT"
+pattern VK_BLEND_OP_LINEARDODGE_EXT :: VkBlendOp
+pattern VK_BLEND_OP_LINEARDODGE_EXT = VkBlendOp 1000148025
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARBURN_EXT"
+pattern VK_BLEND_OP_LINEARBURN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_LINEARBURN_EXT = VkBlendOp 1000148026
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_VIVIDLIGHT_EXT"
+pattern VK_BLEND_OP_VIVIDLIGHT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_VIVIDLIGHT_EXT = VkBlendOp 1000148027
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_LINEARLIGHT_EXT"
+pattern VK_BLEND_OP_LINEARLIGHT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_LINEARLIGHT_EXT = VkBlendOp 1000148028
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PINLIGHT_EXT"
+pattern VK_BLEND_OP_PINLIGHT_EXT :: VkBlendOp
+pattern VK_BLEND_OP_PINLIGHT_EXT = VkBlendOp 1000148029
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HARDMIX_EXT"
+pattern VK_BLEND_OP_HARDMIX_EXT :: VkBlendOp
+pattern VK_BLEND_OP_HARDMIX_EXT = VkBlendOp 1000148030
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_HUE_EXT"
+pattern VK_BLEND_OP_HSL_HUE_EXT :: VkBlendOp
+pattern VK_BLEND_OP_HSL_HUE_EXT = VkBlendOp 1000148031
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_SATURATION_EXT"
+pattern VK_BLEND_OP_HSL_SATURATION_EXT :: VkBlendOp
+pattern VK_BLEND_OP_HSL_SATURATION_EXT = VkBlendOp 1000148032
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_COLOR_EXT"
+pattern VK_BLEND_OP_HSL_COLOR_EXT :: VkBlendOp
+pattern VK_BLEND_OP_HSL_COLOR_EXT = VkBlendOp 1000148033
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_HSL_LUMINOSITY_EXT"
+pattern VK_BLEND_OP_HSL_LUMINOSITY_EXT :: VkBlendOp
+pattern VK_BLEND_OP_HSL_LUMINOSITY_EXT = VkBlendOp 1000148034
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_EXT"
+pattern VK_BLEND_OP_PLUS_EXT :: VkBlendOp
+pattern VK_BLEND_OP_PLUS_EXT = VkBlendOp 1000148035
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_CLAMPED_EXT"
+pattern VK_BLEND_OP_PLUS_CLAMPED_EXT :: VkBlendOp
+pattern VK_BLEND_OP_PLUS_CLAMPED_EXT = VkBlendOp 1000148036
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT"
+pattern VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT :: VkBlendOp
+pattern VK_BLEND_OP_PLUS_CLAMPED_ALPHA_EXT = VkBlendOp 1000148037
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_PLUS_DARKER_EXT"
+pattern VK_BLEND_OP_PLUS_DARKER_EXT :: VkBlendOp
+pattern VK_BLEND_OP_PLUS_DARKER_EXT = VkBlendOp 1000148038
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MINUS_EXT"
+pattern VK_BLEND_OP_MINUS_EXT :: VkBlendOp
+pattern VK_BLEND_OP_MINUS_EXT = VkBlendOp 1000148039
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_MINUS_CLAMPED_EXT"
+pattern VK_BLEND_OP_MINUS_CLAMPED_EXT :: VkBlendOp
+pattern VK_BLEND_OP_MINUS_CLAMPED_EXT = VkBlendOp 1000148040
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_CONTRAST_EXT"
+pattern VK_BLEND_OP_CONTRAST_EXT :: VkBlendOp
+pattern VK_BLEND_OP_CONTRAST_EXT = VkBlendOp 1000148041
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_INVERT_OVG_EXT"
+pattern VK_BLEND_OP_INVERT_OVG_EXT :: VkBlendOp
+pattern VK_BLEND_OP_INVERT_OVG_EXT = VkBlendOp 1000148042
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_RED_EXT"
+pattern VK_BLEND_OP_RED_EXT :: VkBlendOp
+pattern VK_BLEND_OP_RED_EXT = VkBlendOp 1000148043
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_GREEN_EXT"
+pattern VK_BLEND_OP_GREEN_EXT :: VkBlendOp
+pattern VK_BLEND_OP_GREEN_EXT = VkBlendOp 1000148044
+-- No documentation found for Nested "VkBlendOp" "VK_BLEND_OP_BLUE_EXT"
+pattern VK_BLEND_OP_BLUE_EXT :: VkBlendOp
+pattern VK_BLEND_OP_BLUE_EXT = VkBlendOp 1000148045
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT = VkStructureType 1000148000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT = VkStructureType 1000148001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT = VkStructureType 1000148002
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT"
+pattern VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT :: VkAccessFlagBits
+pattern VK_ACCESS_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = VkAccessFlagBits 0x00080000
+-- No documentation found for TopLevel "VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION"
+pattern VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_BLEND_OPERATION_ADVANCED_SPEC_VERSION = 2
+-- No documentation found for TopLevel "VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME"
+pattern VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_BLEND_OPERATION_ADVANCED_EXTENSION_NAME = "VK_EXT_blend_operation_advanced"
+-- | VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT - Structure describing
+-- 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@,
+--     @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
+--     @VK_FALSE@, then memory dependencies are required to guarantee order
+--     between two advanced blending operations that occur on the same
+--     sample.
+--
+-- If the @VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT@ 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.
+-- @VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT@ /can/ also be used
+-- in @pNext@ chain of 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo'
+-- to enable the features.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT" "vkAdvancedBlendCoherentOperations"
+  vkAdvancedBlendCoherentOperations :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT <$> peek (ptr `plusPtr` 0)
+                                                               <*> peek (ptr `plusPtr` 8)
+                                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT))
+                *> poke (ptr `plusPtr` 16) (vkAdvancedBlendCoherentOperations (poked :: VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT))
+-- | VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT - Structure
+-- describing advanced blending limits that can be supported by an
+-- 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>.
+--
+-- -   @advancedBlendIndependentBlend@ specifies whether advanced blend
+--     operations /can/ vary per-attachment.
+--
+-- -   @advancedBlendNonPremultipliedSrcColor@ specifies whether the source
+--     color /can/ be treated as non-premultiplied. If this is @VK_FALSE@,
+--     then
+--     'VkPipelineColorBlendAdvancedStateCreateInfoEXT'::@srcPremultiplied@
+--     /must/ be @VK_TRUE@.
+--
+-- -   @advancedBlendNonPremultipliedDstColor@ specifies whether the
+--     destination color /can/ be treated as non-premultiplied. If this is
+--     @VK_FALSE@, then
+--     'VkPipelineColorBlendAdvancedStateCreateInfoEXT'::@dstPremultiplied@
+--     /must/ be @VK_TRUE@.
+--
+-- -   @advancedBlendCorrelatedOverlap@ specifies whether the overlap mode
+--     /can/ be treated as correlated. If this is @VK_FALSE@, then
+--     'VkPipelineColorBlendAdvancedStateCreateInfoEXT'::@blendOverlap@
+--     /must/ be @VK_BLEND_OVERLAP_UNCORRELATED_EXT@.
+--
+-- -   @advancedBlendAllOperations@ specifies whether all advanced blend
+--     operation enums are supported. See the valid usage of
+--     'Graphics.Vulkan.Core10.Pipeline.VkPipelineColorBlendAttachmentState'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT@
+--
+-- If the @VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT@ 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
+-- #_see_also#
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT = VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT
+  { -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendMaxColorAttachments"
+  vkAdvancedBlendMaxColorAttachments :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendIndependentBlend"
+  vkAdvancedBlendIndependentBlend :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendNonPremultipliedSrcColor"
+  vkAdvancedBlendNonPremultipliedSrcColor :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendNonPremultipliedDstColor"
+  vkAdvancedBlendNonPremultipliedDstColor :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendCorrelatedOverlap"
+  vkAdvancedBlendCorrelatedOverlap :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT" "vkAdvancedBlendAllOperations"
+  vkAdvancedBlendAllOperations :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkAdvancedBlendMaxColorAttachments (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+                *> poke (ptr `plusPtr` 20) (vkAdvancedBlendIndependentBlend (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+                *> poke (ptr `plusPtr` 24) (vkAdvancedBlendNonPremultipliedSrcColor (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+                *> poke (ptr `plusPtr` 28) (vkAdvancedBlendNonPremultipliedDstColor (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+                *> poke (ptr `plusPtr` 32) (vkAdvancedBlendCorrelatedOverlap (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+                *> poke (ptr `plusPtr` 36) (vkAdvancedBlendAllOperations (poked :: VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT))
+-- | VkPipelineColorBlendAdvancedStateCreateInfoEXT - Structure specifying
+-- 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
+-- @blendOverlap@ is considered to be @VK_BLEND_OVERLAP_UNCORRELATED_EXT@.
+--
+-- == Valid Usage
+--
+-- -   If the
+--     <{html_spec_relative}#features-limits-advancedBlendNonPremultipliedSrcColor non-premultiplied source color>
+--     property is not supported, @srcPremultiplied@ /must/ be @VK_TRUE@
+--
+-- -   If the
+--     <{html_spec_relative}#features-limits-advancedBlendNonPremultipliedDstColor non-premultiplied destination color>
+--     property is not supported, @dstPremultiplied@ /must/ be @VK_TRUE@
+--
+-- -   If the
+--     <{html_spec_relative}#features-limits-advancedBlendCorrelatedOverlap correlated overlap>
+--     property is not supported, @blendOverlap@ /must/ be
+--     @VK_BLEND_OVERLAP_UNCORRELATED_EXT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkSrcPremultiplied"
+  vkSrcPremultiplied :: VkBool32
+  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkDstPremultiplied"
+  vkDstPremultiplied :: VkBool32
+  , -- No documentation found for Nested "VkPipelineColorBlendAdvancedStateCreateInfoEXT" "vkBlendOverlap"
+  vkBlendOverlap :: VkBlendOverlapEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineColorBlendAdvancedStateCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineColorBlendAdvancedStateCreateInfoEXT <$> 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 :: VkPipelineColorBlendAdvancedStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineColorBlendAdvancedStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkSrcPremultiplied (poked :: VkPipelineColorBlendAdvancedStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 20) (vkDstPremultiplied (poked :: VkPipelineColorBlendAdvancedStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkBlendOverlap (poked :: VkPipelineColorBlendAdvancedStateCreateInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_conservative_rasterization.hs
@@ -0,0 +1,352 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
+  ( VkConservativeRasterizationModeEXT(..)
+  , pattern VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT
+  , pattern VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT
+  , pattern VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT
+  , VkPipelineRasterizationConservativeStateCreateFlagsEXT(..)
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT
+  , pattern VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION
+  , pattern VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME
+  , VkPhysicalDeviceConservativeRasterizationPropertiesEXT(..)
+  , VkPipelineRasterizationConservativeStateCreateInfoEXT(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+
+
+-- ** VkConservativeRasterizationModeEXT
+
+-- | VkConservativeRasterizationModeEXT - Specify the conservative
+-- rasterization mode
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineRasterizationConservativeStateCreateInfoEXT'
+newtype VkConservativeRasterizationModeEXT = VkConservativeRasterizationModeEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkConservativeRasterizationModeEXT where
+  showsPrec _ VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = showString "VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT"
+  showsPrec _ VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = showString "VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT"
+  showsPrec _ VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = showString "VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT"
+  showsPrec p (VkConservativeRasterizationModeEXT x) = showParen (p >= 11) (showString "VkConservativeRasterizationModeEXT " . showsPrec 11 x)
+
+instance Read VkConservativeRasterizationModeEXT where
+  readPrec = parens ( choose [ ("VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT",      pure VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT)
+                             , ("VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT",  pure VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT)
+                             , ("VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT", pure VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkConservativeRasterizationModeEXT")
+                        v <- step readPrec
+                        pure (VkConservativeRasterizationModeEXT v)
+                        )
+                    )
+
+-- | @VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT@ specifies that
+-- conservative rasterization is disabled and rasterization proceeds as
+-- normal.
+pattern VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT :: VkConservativeRasterizationModeEXT
+pattern VK_CONSERVATIVE_RASTERIZATION_MODE_DISABLED_EXT = VkConservativeRasterizationModeEXT 0
+
+-- | @VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT@ specifies that
+-- conservative rasterization is enabled in overestimation mode.
+pattern VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT :: VkConservativeRasterizationModeEXT
+pattern VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT = VkConservativeRasterizationModeEXT 1
+
+-- | @VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT@ specifies that
+-- conservative rasterization is enabled in underestimation mode.
+pattern VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT :: VkConservativeRasterizationModeEXT
+pattern VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT = VkConservativeRasterizationModeEXT 2
+-- ** VkPipelineRasterizationConservativeStateCreateFlagsEXT
+
+-- | VkPipelineRasterizationConservativeStateCreateFlagsEXT - Reserved for
+-- 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineRasterizationConservativeStateCreateFlagsEXT where
+  
+  showsPrec p (VkPipelineRasterizationConservativeStateCreateFlagsEXT x) = showParen (p >= 11) (showString "VkPipelineRasterizationConservativeStateCreateFlagsEXT " . showsPrec 11 x)
+
+instance Read VkPipelineRasterizationConservativeStateCreateFlagsEXT where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineRasterizationConservativeStateCreateFlagsEXT")
+                        v <- step readPrec
+                        pure (VkPipelineRasterizationConservativeStateCreateFlagsEXT v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT = VkStructureType 1000101000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT = VkStructureType 1000101001
+-- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION"
+pattern VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_CONSERVATIVE_RASTERIZATION_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME"
+pattern VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_CONSERVATIVE_RASTERIZATION_EXTENSION_NAME = "VK_EXT_conservative_rasterization"
+-- | VkPhysicalDeviceConservativeRasterizationPropertiesEXT - Structure
+-- describing conservative raster properties that can be supported by an
+-- 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
+--     rasterization overestimation mode. Even with a size of 0.0,
+--     conservative rasterization overestimation rules still apply and if
+--     any part of the pixel rectangle is covered by the generating
+--     primitive, fragments are generated for the entire pixel. However
+--     implementations /may/ make the pixel coverage area even more
+--     conservative by increasing the size of the generating primitive.
+--
+-- -   @maxExtraPrimitiveOverestimationSize@ is the maximum size in pixels
+--     of extra overestimation the implementation supports in the pipeline
+--     state. A value of 0.0 means the implementation does not support any
+--     additional overestimation of the generating primitive during
+--     conservative rasterization. A value above 0.0 allows the application
+--     to further increase the size of the generating primitive during
+--     conservative rasterization overestimation.
+--
+-- -   @extraPrimitiveOverestimationSizeGranularity@ is the granularity of
+--     extra overestimation that can be specified in the pipeline state
+--     between 0.0 and @maxExtraPrimitiveOverestimationSize@ inclusive. A
+--     value of 0.0 means the implementation can use the smallest
+--     representable non-zero value in the screen space pixel fixed-point
+--     grid.
+--
+-- -   @primitiveUnderestimation@ is true if the implementation supports
+--     the @VK_CONSERVATIVE_RASTERIZATION_MODE_UNDERESTIMATE_EXT@
+--     conservative rasterization mode in addition to
+--     @VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT@. Otherwise the
+--     implementation only supports
+--     @VK_CONSERVATIVE_RASTERIZATION_MODE_OVERESTIMATE_EXT@.
+--
+-- -   @conservativePointAndLineRasterization@ is true if the
+--     implementation supports conservative rasterization of point and line
+--     primitives as well as triangle primitives. Otherwise the
+--     implementation only supports triangle primitives.
+--
+-- -   @degenerateTrianglesRasterized@ is false if the implementation culls
+--     primitives generated from triangles that become zero area after they
+--     are quantized to the fixed-point rasterization pixel grid.
+--     @degenerateTrianglesRasterized@ is true if these primitives are not
+--     culled and the provoking vertex attributes and depth value are used
+--     for the fragments. The primitive area calculation is done on the
+--     primitive generated from the clipped triangle if applicable. Zero
+--     area primitives are backfacing and the application /can/ enable
+--     backface culling if desired.
+--
+-- -   @degenerateLinesRasterized@ is false if the implementation culls
+--     lines that become zero length after they are quantized to the
+--     fixed-point rasterization pixel grid. @degenerateLinesRasterized@ is
+--     true if zero length lines are not culled and the provoking vertex
+--     attributes and depth value are used for the fragments.
+--
+-- -   @fullyCoveredFragmentShaderInputVariable@ is true if the
+--     implementation supports the SPIR-V builtin fragment shader input
+--     variable FullyCoveredEXT which specifies that conservative
+--     rasterization is enabled and the fragment pixel square is fully
+--     covered by the generating primitive.
+--
+-- -   @conservativeRasterizationPostDepthCoverage@ /must/ be false.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT@
+--
+-- If the @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@
+-- structure is included in the @pNext@ chain of
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2KHR',
+-- 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkPrimitiveOverestimationSize"
+  vkPrimitiveOverestimationSize :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkMaxExtraPrimitiveOverestimationSize"
+  vkMaxExtraPrimitiveOverestimationSize :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkExtraPrimitiveOverestimationSizeGranularity"
+  vkExtraPrimitiveOverestimationSizeGranularity :: CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkPrimitiveUnderestimation"
+  vkPrimitiveUnderestimation :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkConservativePointAndLineRasterization"
+  vkConservativePointAndLineRasterization :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkDegenerateTrianglesRasterized"
+  vkDegenerateTrianglesRasterized :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkDegenerateLinesRasterized"
+  vkDegenerateLinesRasterized :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkFullyCoveredFragmentShaderInputVariable"
+  vkFullyCoveredFragmentShaderInputVariable :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceConservativeRasterizationPropertiesEXT" "vkConservativeRasterizationPostDepthCoverage"
+  vkConservativeRasterizationPostDepthCoverage :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceConservativeRasterizationPropertiesEXT where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceConservativeRasterizationPropertiesEXT <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkPrimitiveOverestimationSize (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 20) (vkMaxExtraPrimitiveOverestimationSize (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 24) (vkExtraPrimitiveOverestimationSizeGranularity (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 28) (vkPrimitiveUnderestimation (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 32) (vkConservativePointAndLineRasterization (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 36) (vkDegenerateTrianglesRasterized (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 40) (vkDegenerateLinesRasterized (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 44) (vkFullyCoveredFragmentShaderInputVariable (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+                *> poke (ptr `plusPtr` 48) (vkConservativeRasterizationPostDepthCoverage (poked :: VkPhysicalDeviceConservativeRasterizationPropertiesEXT))
+-- | VkPipelineRasterizationConservativeStateCreateInfoEXT - Structure
+-- specifying conservative raster state
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @extraPrimitiveOverestimationSize@ /must/ be in the range of @0.0@
+--     to
+--     @VkPhysicalDeviceConservativeRasterizationPropertiesEXT@::@maxExtraPrimitiveOverestimationSize@
+--     inclusive
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @conservativeRasterizationMode@ /must/ be a valid
+--     'VkConservativeRasterizationModeEXT' value
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkConservativeRasterizationModeEXT',
+-- 'VkPipelineRasterizationConservativeStateCreateFlagsEXT',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineRasterizationConservativeStateCreateInfoEXT = VkPipelineRasterizationConservativeStateCreateInfoEXT
+  { -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkFlags"
+  vkFlags :: VkPipelineRasterizationConservativeStateCreateFlagsEXT
+  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkConservativeRasterizationMode"
+  vkConservativeRasterizationMode :: VkConservativeRasterizationModeEXT
+  , -- No documentation found for Nested "VkPipelineRasterizationConservativeStateCreateInfoEXT" "vkExtraPrimitiveOverestimationSize"
+  vkExtraPrimitiveOverestimationSize :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineRasterizationConservativeStateCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineRasterizationConservativeStateCreateInfoEXT <$> 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 :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 20) (vkConservativeRasterizationMode (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkExtraPrimitiveOverestimationSize (poked :: VkPipelineRasterizationConservativeStateCreateInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_marker.hs
@@ -0,0 +1,513 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_debug_marker
+  ( pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT
+  , pattern VK_EXT_DEBUG_MARKER_SPEC_VERSION
+  , pattern VK_EXT_DEBUG_MARKER_EXTENSION_NAME
+  , vkDebugMarkerSetObjectNameEXT
+  , vkDebugMarkerSetObjectTagEXT
+  , vkCmdDebugMarkerBeginEXT
+  , vkCmdDebugMarkerEndEXT
+  , vkCmdDebugMarkerInsertEXT
+  , VkDebugMarkerObjectNameInfoEXT(..)
+  , VkDebugMarkerObjectTagInfoEXT(..)
+  , VkDebugMarkerMarkerInfoEXT(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word64
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  , CChar(..)
+  , CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+import Graphics.Vulkan.Extensions.VK_EXT_debug_report
+  ( VkDebugReportObjectTypeEXT(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT = VkStructureType 1000022000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT = VkStructureType 1000022001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT = VkStructureType 1000022002
+-- No documentation found for TopLevel "VK_EXT_DEBUG_MARKER_SPEC_VERSION"
+pattern VK_EXT_DEBUG_MARKER_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DEBUG_MARKER_SPEC_VERSION = 4
+-- No documentation found for TopLevel "VK_EXT_DEBUG_MARKER_EXTENSION_NAME"
+pattern VK_EXT_DEBUG_MARKER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DEBUG_MARKER_EXTENSION_NAME = "VK_EXT_debug_marker"
+-- | vkDebugMarkerSetObjectNameEXT - Give a user-friendly name to an object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @pNameInfo@ is a pointer to an instance of the
+--     '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
+--
+-- -   @pNameInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugMarkerObjectNameInfoEXT@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pNameInfo.object@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugMarkerObjectNameInfoEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDebugMarkerSetObjectNameEXT" vkDebugMarkerSetObjectNameEXT :: ("device" ::: VkDevice) -> ("pNameInfo" ::: Ptr VkDebugMarkerObjectNameInfoEXT) -> IO VkResult
+-- | vkDebugMarkerSetObjectTagEXT - Attach arbitrary data to an object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @pTagInfo@ is a pointer to an instance of the
+--     '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
+--
+-- -   @pTagInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugMarkerObjectTagInfoEXT@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pTagInfo.object@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugMarkerObjectTagInfoEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkDebugMarkerSetObjectTagEXT" vkDebugMarkerSetObjectTagEXT :: ("device" ::: VkDevice) -> ("pTagInfo" ::: Ptr VkDebugMarkerObjectTagInfoEXT) -> IO VkResult
+-- | vkCmdDebugMarkerBeginEXT - Open a command buffer marker region
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @commandBuffer@ is the command buffer into which the command is
+--     recorded.
+--
+-- -   @pMarkerInfo@ is a pointer to an instance of the
+--     'VkDebugMarkerMarkerInfoEXT' structure specifying the parameters of
+--     the marker region to open.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugMarkerMarkerInfoEXT@ structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <#commandbuffers-lifecycle recording state>
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   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',
+-- 'VkDebugMarkerMarkerInfoEXT'
+foreign import ccall "vkCmdDebugMarkerBeginEXT" vkCmdDebugMarkerBeginEXT :: ("commandBuffer" ::: VkCommandBuffer) -> ("pMarkerInfo" ::: Ptr VkDebugMarkerMarkerInfoEXT) -> IO ()
+-- | 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
+-- command buffers or multiple queue submissions. When viewed from the
+-- linear series of submissions to a single queue, the calls to
+-- @vkCmdDebugMarkerBeginEXT@ and @vkCmdDebugMarkerEndEXT@ /must/ be
+-- matched and balanced.
+--
+-- == Valid Usage
+--
+-- -   There /must/ be an outstanding 'vkCmdDebugMarkerBeginEXT' command
+--     prior to the @vkCmdDebugMarkerEndEXT@ on the queue that
+--     @commandBuffer@ is submitted to
+--
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an
+--     outstanding 'vkCmdDebugMarkerBeginEXT' command recorded to
+--     @commandBuffer@ that has not previously been ended by a call to
+--     'vkCmdDebugMarkerEndEXT'.
+--
+-- == 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, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   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'
+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.
+--
+-- -   @pMarkerInfo@ is a pointer to an instance of the
+--     'VkDebugMarkerMarkerInfoEXT' structure specifying the parameters of
+--     the marker to insert.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pMarkerInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugMarkerMarkerInfoEXT@ structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <#commandbuffers-lifecycle recording state>
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   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',
+-- 'VkDebugMarkerMarkerInfoEXT'
+foreign import ccall "vkCmdDebugMarkerInsertEXT" vkCmdDebugMarkerInsertEXT :: ("commandBuffer" ::: VkCommandBuffer) -> ("pMarkerInfo" ::: Ptr VkDebugMarkerMarkerInfoEXT) -> IO ()
+-- | VkDebugMarkerObjectNameInfoEXT - Specify parameters of a name to give to
+-- an object
+--
+-- = Description
+-- #_description#
+--
+-- Applications /may/ change the name associated with an object simply by
+-- calling @vkDebugMarkerSetObjectNameEXT@ again with a new string. To
+-- remove a previously set name, @pObjectName@ /should/ be set to an empty
+-- string.
+--
+-- == Valid Usage
+--
+-- -   @objectType@ /must/ not be @VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT@
+--
+-- -   @object@ /must/ not be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   @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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_NAME_INFO_EXT@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @objectType@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportObjectTypeEXT'
+--     value
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkObjectType"
+  vkObjectType :: VkDebugReportObjectTypeEXT
+  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkObject"
+  vkObject :: Word64
+  , -- No documentation found for Nested "VkDebugMarkerObjectNameInfoEXT" "vkPObjectName"
+  vkPObjectName :: Ptr CChar
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugMarkerObjectNameInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDebugMarkerObjectNameInfoEXT <$> peek (ptr `plusPtr` 0)
+                                            <*> peek (ptr `plusPtr` 8)
+                                            <*> peek (ptr `plusPtr` 16)
+                                            <*> peek (ptr `plusPtr` 24)
+                                            <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugMarkerObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugMarkerObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkObjectType (poked :: VkDebugMarkerObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkObject (poked :: VkDebugMarkerObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPObjectName (poked :: VkDebugMarkerObjectNameInfoEXT))
+-- | VkDebugMarkerObjectTagInfoEXT - Specify parameters of a tag to attach to
+-- 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
+-- only data that can be used by that implementation.
+--
+-- == Valid Usage
+--
+-- -   @objectType@ /must/ not be @VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT@
+--
+-- -   @object@ /must/ not be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   @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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @objectType@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_EXT_debug_report.VkDebugReportObjectTypeEXT'
+--     value
+--
+-- -   @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkObjectType"
+  vkObjectType :: VkDebugReportObjectTypeEXT
+  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkObject"
+  vkObject :: Word64
+  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkTagName"
+  vkTagName :: Word64
+  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkTagSize"
+  vkTagSize :: CSize
+  , -- No documentation found for Nested "VkDebugMarkerObjectTagInfoEXT" "vkPTag"
+  vkPTag :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugMarkerObjectTagInfoEXT where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkDebugMarkerObjectTagInfoEXT <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugMarkerObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugMarkerObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkObjectType (poked :: VkDebugMarkerObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkObject (poked :: VkDebugMarkerObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkTagName (poked :: VkDebugMarkerObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 40) (vkTagSize (poked :: VkDebugMarkerObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 48) (vkPTag (poked :: VkDebugMarkerObjectTagInfoEXT))
+-- | 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@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugMarkerMarkerInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugMarkerMarkerInfoEXT" "vkPMarkerName"
+  vkPMarkerName :: Ptr CChar
+  , -- No documentation found for Nested "VkDebugMarkerMarkerInfoEXT" "vkColor"
+  vkColor :: Vector 4 CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugMarkerMarkerInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDebugMarkerMarkerInfoEXT <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+                                        <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugMarkerMarkerInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugMarkerMarkerInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkPMarkerName (poked :: VkDebugMarkerMarkerInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkColor (poked :: VkDebugMarkerMarkerInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_report.hs
@@ -0,0 +1,874 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_debug_report
+  ( VkDebugReportObjectTypeEXT(..)
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT
+  , VkDebugReportFlagBitsEXT(..)
+  , pattern VK_DEBUG_REPORT_INFORMATION_BIT_EXT
+  , pattern VK_DEBUG_REPORT_WARNING_BIT_EXT
+  , pattern VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT
+  , pattern VK_DEBUG_REPORT_ERROR_BIT_EXT
+  , pattern VK_DEBUG_REPORT_DEBUG_BIT_EXT
+  , pattern VK_ERROR_VALIDATION_FAILED_EXT
+  , pattern VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
+  , pattern VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT
+  , pattern VK_EXT_DEBUG_REPORT_SPEC_VERSION
+  , pattern VK_EXT_DEBUG_REPORT_EXTENSION_NAME
+  , pattern VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT
+  , PFN_vkDebugReportCallbackEXT
+  , VkDebugReportCallbackEXT
+  , vkCreateDebugReportCallbackEXT
+  , vkDestroyDebugReportCallbackEXT
+  , vkDebugReportMessageEXT
+  , VkDebugReportCallbackCreateInfoEXT(..)
+  , VkDebugReportFlagsEXT
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  )
+import Foreign.C.Types
+  ( CChar(..)
+  , CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkInstance
+  )
+
+
+-- ** VkDebugReportObjectTypeEXT
+
+-- | 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
+--
+-- __Note__
+--
+-- The primary expected use of @VK_ERROR_VALIDATION_FAILED_EXT@ is for
+-- validation layer testing. It is not expected that an application would
+-- 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',
+-- 'vkDebugReportMessageEXT'
+newtype VkDebugReportObjectTypeEXT = VkDebugReportObjectTypeEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDebugReportObjectTypeEXT where
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT"
+  showsPrec _ VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = showString "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkDebugReportObjectTypeEXT 1000156000) = showString "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"
+  showsPrec _ (VkDebugReportObjectTypeEXT 1000085000) = showString "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"
+  showsPrec p (VkDebugReportObjectTypeEXT x) = showParen (p >= 11) (showString "VkDebugReportObjectTypeEXT " . showsPrec 11 x)
+
+instance Read VkDebugReportObjectTypeEXT where
+  readPrec = parens ( choose [ ("VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT",                      pure VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT",                     pure VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT",              pure VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT",                       pure VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT",                        pure VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT",                    pure VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT",               pure VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT",                        pure VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT",                pure VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT",                       pure VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT",                        pure VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT",                        pure VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT",                   pure VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT",                  pure VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT",                   pure VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT",                pure VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT",               pure VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT",              pure VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT",                  pure VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT",                     pure VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT",        pure VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT",                      pure VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT",              pure VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT",               pure VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT",                  pure VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT",                 pure VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT",                  pure VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT",                pure VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT",    pure VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT",                  pure VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT",             pure VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT",             pure VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT", pure VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT)
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT",         pure VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT",   pure (VkDebugReportObjectTypeEXT 1000156000))
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT", pure (VkDebugReportObjectTypeEXT 1000085000))
+                             , ("VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT",   pure (VkDebugReportObjectTypeEXT 1000156000))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDebugReportObjectTypeEXT")
+                        v <- step readPrec
+                        pure (VkDebugReportObjectTypeEXT v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT = VkDebugReportObjectTypeEXT 0
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT = VkDebugReportObjectTypeEXT 1
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT = VkDebugReportObjectTypeEXT 2
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT = VkDebugReportObjectTypeEXT 3
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT = VkDebugReportObjectTypeEXT 4
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT = VkDebugReportObjectTypeEXT 5
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT = VkDebugReportObjectTypeEXT 6
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT = VkDebugReportObjectTypeEXT 7
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT = VkDebugReportObjectTypeEXT 8
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT = VkDebugReportObjectTypeEXT 9
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT = VkDebugReportObjectTypeEXT 10
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT = VkDebugReportObjectTypeEXT 11
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT = VkDebugReportObjectTypeEXT 12
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT = VkDebugReportObjectTypeEXT 13
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT = VkDebugReportObjectTypeEXT 14
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT = VkDebugReportObjectTypeEXT 15
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT = VkDebugReportObjectTypeEXT 16
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT = VkDebugReportObjectTypeEXT 17
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT = VkDebugReportObjectTypeEXT 18
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT = VkDebugReportObjectTypeEXT 19
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT = VkDebugReportObjectTypeEXT 20
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT = VkDebugReportObjectTypeEXT 21
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT = VkDebugReportObjectTypeEXT 22
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT = VkDebugReportObjectTypeEXT 23
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT = VkDebugReportObjectTypeEXT 24
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT = VkDebugReportObjectTypeEXT 25
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT = VkDebugReportObjectTypeEXT 26
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT = VkDebugReportObjectTypeEXT 27
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT = VkDebugReportObjectTypeEXT 28
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT = VkDebugReportObjectTypeEXT 29
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT = VkDebugReportObjectTypeEXT 30
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT = VkDebugReportObjectTypeEXT 31
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT = VkDebugReportObjectTypeEXT 32
+
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT = VkDebugReportObjectTypeEXT 33
+-- ** VkDebugReportFlagBitsEXT
+
+-- | VkDebugReportFlagBitsEXT - Bitmask specifying events which cause a debug
+-- report callback
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugReportFlagsEXT'
+newtype VkDebugReportFlagBitsEXT = VkDebugReportFlagBitsEXT VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDebugReportFlagBitsEXT where
+  showsPrec _ VK_DEBUG_REPORT_INFORMATION_BIT_EXT = showString "VK_DEBUG_REPORT_INFORMATION_BIT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_WARNING_BIT_EXT = showString "VK_DEBUG_REPORT_WARNING_BIT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = showString "VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_ERROR_BIT_EXT = showString "VK_DEBUG_REPORT_ERROR_BIT_EXT"
+  showsPrec _ VK_DEBUG_REPORT_DEBUG_BIT_EXT = showString "VK_DEBUG_REPORT_DEBUG_BIT_EXT"
+  showsPrec p (VkDebugReportFlagBitsEXT x) = showParen (p >= 11) (showString "VkDebugReportFlagBitsEXT " . showsPrec 11 x)
+
+instance Read VkDebugReportFlagBitsEXT where
+  readPrec = parens ( choose [ ("VK_DEBUG_REPORT_INFORMATION_BIT_EXT",         pure VK_DEBUG_REPORT_INFORMATION_BIT_EXT)
+                             , ("VK_DEBUG_REPORT_WARNING_BIT_EXT",             pure VK_DEBUG_REPORT_WARNING_BIT_EXT)
+                             , ("VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT", pure VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT)
+                             , ("VK_DEBUG_REPORT_ERROR_BIT_EXT",               pure VK_DEBUG_REPORT_ERROR_BIT_EXT)
+                             , ("VK_DEBUG_REPORT_DEBUG_BIT_EXT",               pure VK_DEBUG_REPORT_DEBUG_BIT_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDebugReportFlagBitsEXT")
+                        v <- step readPrec
+                        pure (VkDebugReportFlagBitsEXT v)
+                        )
+                    )
+
+-- | @VK_DEBUG_REPORT_INFORMATION_BIT_EXT@ specifies an informational message
+-- such as resource details that may be handy when debugging an
+-- application.
+pattern VK_DEBUG_REPORT_INFORMATION_BIT_EXT :: VkDebugReportFlagBitsEXT
+pattern VK_DEBUG_REPORT_INFORMATION_BIT_EXT = VkDebugReportFlagBitsEXT 0x00000001
+
+-- | @VK_DEBUG_REPORT_WARNING_BIT_EXT@ specifies use of Vulkan that /may/
+-- expose an app bug. Such cases may not be immediately harmful, such as a
+-- fragment shader outputting to a location with no attachment. Other cases
+-- /may/ point to behavior that is almost certainly bad when unintended
+-- such as using an image whose memory has not been filled. In general if
+-- you see a warning but you know that the behavior is intended\/desired,
+-- then simply ignore the warning.
+pattern VK_DEBUG_REPORT_WARNING_BIT_EXT :: VkDebugReportFlagBitsEXT
+pattern VK_DEBUG_REPORT_WARNING_BIT_EXT = VkDebugReportFlagBitsEXT 0x00000002
+
+-- | @VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT@ specifies a potentially
+-- non-optimal use of Vulkan, e.g. using
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage' when
+-- setting 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription'::@loadOp@
+-- to @VK_ATTACHMENT_LOAD_OP_CLEAR@ would have worked.
+pattern VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT :: VkDebugReportFlagBitsEXT
+pattern VK_DEBUG_REPORT_PERFORMANCE_WARNING_BIT_EXT = VkDebugReportFlagBitsEXT 0x00000004
+
+-- | @VK_DEBUG_REPORT_ERROR_BIT_EXT@ specifies that an error that may cause
+-- undefined results, including an application crash.
+pattern VK_DEBUG_REPORT_ERROR_BIT_EXT :: VkDebugReportFlagBitsEXT
+pattern VK_DEBUG_REPORT_ERROR_BIT_EXT = VkDebugReportFlagBitsEXT 0x00000008
+
+-- | @VK_DEBUG_REPORT_DEBUG_BIT_EXT@ specifies diagnostic information from
+-- the implementation and layers.
+pattern VK_DEBUG_REPORT_DEBUG_BIT_EXT :: VkDebugReportFlagBitsEXT
+pattern VK_DEBUG_REPORT_DEBUG_BIT_EXT = VkDebugReportFlagBitsEXT 0x00000010
+-- No documentation found for Nested "VkResult" "VK_ERROR_VALIDATION_FAILED_EXT"
+pattern VK_ERROR_VALIDATION_FAILED_EXT :: VkResult
+pattern VK_ERROR_VALIDATION_FAILED_EXT = VkResult (-1000011001)
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT = VkStructureType 1000011000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT"
+pattern VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT :: VkObjectType
+pattern VK_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT = VkObjectType 1000011000
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT = VkDebugReportObjectTypeEXT 1000156000
+-- No documentation found for Nested "VkDebugReportObjectTypeEXT" "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT = VkDebugReportObjectTypeEXT 1000085000
+-- No documentation found for TopLevel "VK_EXT_DEBUG_REPORT_SPEC_VERSION"
+pattern VK_EXT_DEBUG_REPORT_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DEBUG_REPORT_SPEC_VERSION = 9
+-- No documentation found for TopLevel "VK_EXT_DEBUG_REPORT_EXTENSION_NAME"
+pattern VK_EXT_DEBUG_REPORT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DEBUG_REPORT_EXTENSION_NAME = "VK_EXT_debug_report"
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT
+-- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT
+-- | PFN_vkDebugReportCallbackEXT - Application-defined debug report callback
+-- function
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @flags@ specifies the 'VkDebugReportFlagBitsEXT' that triggered this
+--     callback.
+--
+-- -   @objectType@ is a 'VkDebugReportObjectTypeEXT' value specifying the
+--     type of object being used or created at the time the event was
+--     triggered.
+--
+-- -   @object@ is the object where the issue was detected. If @objectType@
+--     is @VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT@, @object@ is undefined.
+--
+-- -   @location@ is a component (layer, driver, loader) defined value that
+--     specifies the /location/ of the trigger. This is an /optional/
+--     value.
+--
+-- -   @messageCode@ is a layer-defined value indicating what test
+--     triggered this callback.
+--
+-- -   @pLayerPrefix@ is a null-terminated string that is an abbreviation
+--     of the name of the component making the callback. @pLayerPrefix@ is
+--     only valid for the duration of the callback.
+--
+-- -   @pMessage@ is a null-terminated string detailing the trigger
+--     conditions. @pMessage@ is only valid for the duration of the
+--     callback.
+--
+-- -   @pUserData@ is the user data given when the
+--     'VkDebugReportCallbackEXT' was created.
+--
+-- = Description
+-- #_description#
+--
+-- The callback /must/ not call @vkDestroyDebugReportCallbackEXT@.
+--
+-- The callback returns a @VkBool32@, which is interpreted in a
+-- layer-specified manner. The application /should/ always return
+-- @VK_FALSE@. The @VK_TRUE@ value is reserved for use in layer
+-- development.
+--
+-- @object@ /must/ be a Vulkan object or @VK_NULL_HANDLE@. 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>.
+--
+-- = 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)
+-- | Dummy data to tag the 'Ptr' with
+data VkDebugReportCallbackEXT_T
+-- | 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.
+--
+-- -   @pCreateInfo@ points to a 'VkDebugReportCallbackCreateInfoEXT'
+--     structure which defines the conditions under which this callback
+--     will be called.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugReportCallbackCreateInfoEXT@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pCallback@ /must/ be a valid pointer to a
+--     @VkDebugReportCallbackEXT@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDebugReportCallbackCreateInfoEXT', 'VkDebugReportCallbackEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'
+foreign import ccall "vkCreateDebugReportCallbackEXT" vkCreateDebugReportCallbackEXT :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkDebugReportCallbackCreateInfoEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pCallback" ::: Ptr VkDebugReportCallbackEXT) -> IO VkResult
+-- | vkDestroyDebugReportCallbackEXT - Destroy a debug report callback object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ the instance where the callback was created.
+--
+-- -   @callback@ the @VkDebugReportCallbackEXT@ object to destroy.
+--     @callback@ is an externally synchronized object and /must/ not be
+--     used on more than one thread at a time. This means that
+--     @vkDestroyDebugReportCallbackEXT@ /must/ not be called when a
+--     callback is active.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If @VkAllocationCallbacks@ were provided when @callback@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @callback@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @callback@ /must/ be a valid @VkDebugReportCallbackEXT@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @callback@ /must/ have been created, allocated, or retrieved from
+--     @instance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @callback@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDebugReportCallbackEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'
+foreign import ccall "vkDestroyDebugReportCallbackEXT" vkDestroyDebugReportCallbackEXT :: ("instance" ::: VkInstance) -> ("callback" ::: VkDebugReportCallbackEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkDebugReportMessageEXT - Inject a message into a debug stream
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the debug stream’s @VkInstance@.
+--
+-- -   @flags@ specifies the 'VkDebugReportFlagBitsEXT' classification of
+--     this event\/message.
+--
+-- -   @objectType@ is a 'VkDebugReportObjectTypeEXT' specifying the type
+--     of object being used or created at the time the event was triggered.
+--
+-- -   @object@ this is the object where the issue was detected. @object@
+--     /can/ be @VK_NULL_HANDLE@ if there is no object associated with the
+--     event.
+--
+-- -   @location@ is an application defined value.
+--
+-- -   @messageCode@ is an application defined value.
+--
+-- -   @pLayerPrefix@ is the abbreviation of the component making this
+--     event\/message.
+--
+-- -   @pMessage@ is a null-terminated string detailing the trigger
+--     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
+-- callback in addition to the @pUserData@ value that was defined at the
+-- time the callback was registered.
+--
+-- == Valid Usage
+--
+-- -   @object@ /must/ be a Vulkan object or @VK_NULL_HANDLE@
+--
+-- -   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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @flags@ /must/ be a valid combination of 'VkDebugReportFlagBitsEXT'
+--     values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @objectType@ /must/ be a valid 'VkDebugReportObjectTypeEXT' value
+--
+-- -   @pLayerPrefix@ /must/ be a null-terminated UTF-8 string
+--
+-- -   @pMessage@ /must/ be a null-terminated UTF-8 string
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugReportFlagsEXT', 'VkDebugReportObjectTypeEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'
+foreign import ccall "vkDebugReportMessageEXT" vkDebugReportMessageEXT :: ("instance" ::: VkInstance) -> ("flags" ::: VkDebugReportFlagsEXT) -> ("objectType" ::: VkDebugReportObjectTypeEXT) -> ("object" ::: Word64) -> ("location" ::: CSize) -> ("messageCode" ::: Int32) -> ("pLayerPrefix" ::: Ptr CChar) -> ("pMessage" ::: Ptr CChar) -> IO ()
+-- | VkDebugReportCallbackCreateInfoEXT - Structure specifying parameters of
+-- a newly created debug report callback
+--
+-- = Description
+-- #_description#
+--
+-- For each @VkDebugReportCallbackEXT@ that is created the
+-- @VkDebugReportCallbackCreateInfoEXT@::@flags@ determine when that
+-- @VkDebugReportCallbackCreateInfoEXT@::@pfnCallback@ is called. When an
+-- event happens, the implementation will do a bitwise AND of the event’s
+-- 'VkDebugReportFlagBitsEXT' flags to each @VkDebugReportCallbackEXT@
+-- object’s flags. For each non-zero result the corresponding callback will
+-- be called. The callback will come directly from the component that
+-- detected the event, unless some other layer intercepts the calls for its
+-- own purposes (filter them in a different way, log to a system error log,
+-- etc.).
+--
+-- An application /may/ receive multiple callbacks if multiple
+-- @VkDebugReportCallbackEXT@ objects were created. A callback will always
+-- be executed in the same thread as the originating Vulkan call.
+--
+-- A callback may be called from multiple threads simultaneously (if the
+-- application is making Vulkan calls from multiple threads).
+--
+-- == Valid Usage
+--
+-- -   @pfnCallback@ /must/ be a valid 'PFN_vkDebugReportCallbackEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT@
+--
+-- -   @flags@ /must/ be a valid combination of 'VkDebugReportFlagBitsEXT'
+--     values
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'PFN_vkDebugReportCallbackEXT', 'VkDebugReportFlagsEXT',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateDebugReportCallbackEXT'
+data VkDebugReportCallbackCreateInfoEXT = VkDebugReportCallbackCreateInfoEXT
+  { -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkFlags"
+  vkFlags :: VkDebugReportFlagsEXT
+  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkPfnCallback"
+  vkPfnCallback :: PFN_vkDebugReportCallbackEXT
+  , -- No documentation found for Nested "VkDebugReportCallbackCreateInfoEXT" "vkPUserData"
+  vkPUserData :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugReportCallbackCreateInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDebugReportCallbackCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                <*> peek (ptr `plusPtr` 8)
+                                                <*> peek (ptr `plusPtr` 16)
+                                                <*> peek (ptr `plusPtr` 24)
+                                                <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugReportCallbackCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugReportCallbackCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDebugReportCallbackCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkPfnCallback (poked :: VkDebugReportCallbackCreateInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPUserData (poked :: VkDebugReportCallbackCreateInfoEXT))
+-- | 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'
+type VkDebugReportFlagsEXT = VkDebugReportFlagBitsEXT
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_debug_utils.hs
@@ -0,0 +1,1256 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_debug_utils
+  ( VkDebugUtilsMessageSeverityFlagBitsEXT(..)
+  , pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT
+  , pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT
+  , pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT
+  , pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT
+  , VkDebugUtilsMessageTypeFlagBitsEXT(..)
+  , pattern VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT
+  , pattern VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT
+  , pattern VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT
+  , VkDebugUtilsMessengerCreateFlagsEXT(..)
+  , VkDebugUtilsMessengerCallbackDataFlagsEXT(..)
+  , pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT
+  , pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT
+  , pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT
+  , pattern VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT
+  , pattern VK_EXT_DEBUG_UTILS_SPEC_VERSION
+  , pattern VK_EXT_DEBUG_UTILS_EXTENSION_NAME
+  , PFN_vkDebugUtilsMessengerCallbackEXT
+  , VkDebugUtilsMessengerEXT
+  , vkSetDebugUtilsObjectNameEXT
+  , vkSetDebugUtilsObjectTagEXT
+  , vkQueueBeginDebugUtilsLabelEXT
+  , vkQueueEndDebugUtilsLabelEXT
+  , vkQueueInsertDebugUtilsLabelEXT
+  , vkCmdBeginDebugUtilsLabelEXT
+  , vkCmdEndDebugUtilsLabelEXT
+  , vkCmdInsertDebugUtilsLabelEXT
+  , vkCreateDebugUtilsMessengerEXT
+  , vkDestroyDebugUtilsMessengerEXT
+  , vkSubmitDebugUtilsMessageEXT
+  , VkDebugUtilsObjectNameInfoEXT(..)
+  , VkDebugUtilsObjectTagInfoEXT(..)
+  , VkDebugUtilsLabelEXT(..)
+  , VkDebugUtilsMessengerCreateInfoEXT(..)
+  , VkDebugUtilsMessengerCallbackDataEXT(..)
+  , VkDebugUtilsMessageSeverityFlagsEXT
+  , VkDebugUtilsMessageTypeFlagsEXT
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  , Word64
+  )
+import Foreign.C.Types
+  ( CChar(..)
+  , CFloat(..)
+  , CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkBool32(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkInstance
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  , VkQueue
+  )
+
+
+-- ** VkDebugUtilsMessageSeverityFlagBitsEXT
+
+-- | VkDebugUtilsMessageSeverityFlagBitsEXT - Bitmask specifying which
+-- severities of events cause a debug messenger callback
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugUtilsMessageSeverityFlagsEXT', 'vkSubmitDebugUtilsMessageEXT'
+newtype VkDebugUtilsMessageSeverityFlagBitsEXT = VkDebugUtilsMessageSeverityFlagBitsEXT VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDebugUtilsMessageSeverityFlagBitsEXT where
+  showsPrec _ VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = showString "VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT"
+  showsPrec _ VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = showString "VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT"
+  showsPrec _ VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = showString "VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT"
+  showsPrec _ VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = showString "VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT"
+  showsPrec p (VkDebugUtilsMessageSeverityFlagBitsEXT x) = showParen (p >= 11) (showString "VkDebugUtilsMessageSeverityFlagBitsEXT " . showsPrec 11 x)
+
+instance Read VkDebugUtilsMessageSeverityFlagBitsEXT where
+  readPrec = parens ( choose [ ("VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT", pure VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT)
+                             , ("VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT",    pure VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT)
+                             , ("VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT", pure VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT)
+                             , ("VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT",   pure VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDebugUtilsMessageSeverityFlagBitsEXT")
+                        v <- step readPrec
+                        pure (VkDebugUtilsMessageSeverityFlagBitsEXT v)
+                        )
+                    )
+
+-- | @VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT@ specifies the most
+-- verbose output indicating all diagnostic messages from the Vulkan
+-- loader, layers, and drivers should be captured.
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT :: VkDebugUtilsMessageSeverityFlagBitsEXT
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = VkDebugUtilsMessageSeverityFlagBitsEXT 0x00000001
+
+-- | @VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT@ specifies an
+-- informational message such as resource details that may be handy when
+-- debugging an application.
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT :: VkDebugUtilsMessageSeverityFlagBitsEXT
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = VkDebugUtilsMessageSeverityFlagBitsEXT 0x00000010
+
+-- | @VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT@ specifies use of
+-- Vulkan that /may/ expose an app bug. Such cases may not be immediately
+-- harmful, such as a fragment shader outputting to a location with no
+-- attachment. Other cases /may/ point to behavior that is almost certainly
+-- bad when unintended such as using an image whose memory has not been
+-- filled. In general if you see a warning but you know that the behavior
+-- is intended\/desired, then simply ignore the warning.
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT :: VkDebugUtilsMessageSeverityFlagBitsEXT
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = VkDebugUtilsMessageSeverityFlagBitsEXT 0x00000100
+
+-- | @VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT@ specifies that an error
+-- that may cause undefined results, including an application crash.
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT :: VkDebugUtilsMessageSeverityFlagBitsEXT
+pattern VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = VkDebugUtilsMessageSeverityFlagBitsEXT 0x00001000
+-- ** VkDebugUtilsMessageTypeFlagBitsEXT
+
+-- | VkDebugUtilsMessageTypeFlagBitsEXT - Bitmask specifying which types of
+-- events cause a debug messenger callback
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugUtilsMessageTypeFlagsEXT'
+newtype VkDebugUtilsMessageTypeFlagBitsEXT = VkDebugUtilsMessageTypeFlagBitsEXT VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDebugUtilsMessageTypeFlagBitsEXT where
+  showsPrec _ VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = showString "VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT"
+  showsPrec _ VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = showString "VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT"
+  showsPrec _ VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = showString "VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT"
+  showsPrec p (VkDebugUtilsMessageTypeFlagBitsEXT x) = showParen (p >= 11) (showString "VkDebugUtilsMessageTypeFlagBitsEXT " . showsPrec 11 x)
+
+instance Read VkDebugUtilsMessageTypeFlagBitsEXT where
+  readPrec = parens ( choose [ ("VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT",     pure VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT)
+                             , ("VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT",  pure VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT)
+                             , ("VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT", pure VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDebugUtilsMessageTypeFlagBitsEXT")
+                        v <- step readPrec
+                        pure (VkDebugUtilsMessageTypeFlagBitsEXT v)
+                        )
+                    )
+
+-- | @VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT@ specifies that some
+-- general event has occurred. This is typically a non-specification,
+-- non-performance event.
+pattern VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT :: VkDebugUtilsMessageTypeFlagBitsEXT
+pattern VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = VkDebugUtilsMessageTypeFlagBitsEXT 0x00000001
+
+-- | @VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT@ specifies that
+-- something has occurred during validation against the Vulkan
+-- specification that may indicate invalid behavior.
+pattern VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT :: VkDebugUtilsMessageTypeFlagBitsEXT
+pattern VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = VkDebugUtilsMessageTypeFlagBitsEXT 0x00000002
+
+-- | @VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT@ specifies a
+-- potentially non-optimal use of Vulkan, e.g. using
+-- 'Graphics.Vulkan.Core10.CommandBufferBuilding.vkCmdClearColorImage' when
+-- setting 'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription'::@loadOp@
+-- to @VK_ATTACHMENT_LOAD_OP_CLEAR@ would have worked.
+pattern VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT :: VkDebugUtilsMessageTypeFlagBitsEXT
+pattern VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = VkDebugUtilsMessageTypeFlagBitsEXT 0x00000004
+-- ** VkDebugUtilsMessengerCreateFlagsEXT
+
+-- No documentation found for TopLevel "VkDebugUtilsMessengerCreateFlagsEXT"
+newtype VkDebugUtilsMessengerCreateFlagsEXT = VkDebugUtilsMessengerCreateFlagsEXT VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDebugUtilsMessengerCreateFlagsEXT where
+  
+  showsPrec p (VkDebugUtilsMessengerCreateFlagsEXT x) = showParen (p >= 11) (showString "VkDebugUtilsMessengerCreateFlagsEXT " . showsPrec 11 x)
+
+instance Read VkDebugUtilsMessengerCreateFlagsEXT where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDebugUtilsMessengerCreateFlagsEXT")
+                        v <- step readPrec
+                        pure (VkDebugUtilsMessengerCreateFlagsEXT v)
+                        )
+                    )
+
+
+-- ** VkDebugUtilsMessengerCallbackDataFlagsEXT
+
+-- No documentation found for TopLevel "VkDebugUtilsMessengerCallbackDataFlagsEXT"
+newtype VkDebugUtilsMessengerCallbackDataFlagsEXT = VkDebugUtilsMessengerCallbackDataFlagsEXT VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDebugUtilsMessengerCallbackDataFlagsEXT where
+  
+  showsPrec p (VkDebugUtilsMessengerCallbackDataFlagsEXT x) = showParen (p >= 11) (showString "VkDebugUtilsMessengerCallbackDataFlagsEXT " . showsPrec 11 x)
+
+instance Read VkDebugUtilsMessengerCallbackDataFlagsEXT where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDebugUtilsMessengerCallbackDataFlagsEXT")
+                        v <- step readPrec
+                        pure (VkDebugUtilsMessengerCallbackDataFlagsEXT v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = VkStructureType 1000128000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT = VkStructureType 1000128001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_LABEL_EXT = VkStructureType 1000128002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = VkStructureType 1000128003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = VkStructureType 1000128004
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT"
+pattern VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT :: VkObjectType
+pattern VK_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = VkObjectType 1000128000
+-- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_SPEC_VERSION"
+pattern VK_EXT_DEBUG_UTILS_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DEBUG_UTILS_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_DEBUG_UTILS_EXTENSION_NAME"
+pattern VK_EXT_DEBUG_UTILS_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DEBUG_UTILS_EXTENSION_NAME = "VK_EXT_debug_utils"
+-- | PFN_vkDebugUtilsMessengerCallbackEXT - Application-defined debug
+-- messenger callback function
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @messageSeverity@ specifies the
+--     'VkDebugUtilsMessageSeverityFlagBitsEXT' that triggered this
+--     callback.
+--
+-- -   @messageTypes@ specifies the 'VkDebugUtilsMessageTypeFlagBitsEXT'
+--     that triggered this callback.
+--
+-- -   @pCallbackData@ contains all the callback related data in the
+--     'VkDebugUtilsMessengerCallbackDataEXT' structure.
+--
+-- -   @pUserData@ is the user data provided when the
+--     'VkDebugUtilsMessengerEXT' was created.
+--
+-- = Description
+-- #_description#
+--
+-- The callback /must/ not call 'vkDestroyDebugUtilsMessengerEXT'.
+--
+-- The callback returns a @VkBool32@, which is interpreted in a
+-- layer-specified manner. The application /should/ always return
+-- @VK_FALSE@. The @VK_TRUE@ value is reserved for use in layer
+-- development.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugUtilsMessengerCreateInfoEXT'
+type PFN_vkDebugUtilsMessengerCallbackEXT = Ptr (("messageSeverity" ::: VkDebugUtilsMessageSeverityFlagBitsEXT) -> ("messageType" ::: VkDebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr VkDebugUtilsMessengerCallbackDataEXT) -> ("pUserData" ::: Ptr ()) -> IO VkBool32)
+-- | Dummy data to tag the 'Ptr' with
+data VkDebugUtilsMessengerEXT_T
+-- | 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
+-- does occur, the debug messenger will submit a debug message to the debug
+-- callback that was provided during its creation. Additionally, the debug
+-- messenger is responsible with filtering out debug messages that the
+-- callback isn’t interested in and will only provide desired debug
+-- 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.
+--
+-- -   @pNameInfo@ is a pointer to an instance of the
+--     '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
+--
+-- -   @pNameInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsObjectNameInfoEXT@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pNameInfo.objectHandle@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugUtilsObjectNameInfoEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkSetDebugUtilsObjectNameEXT" vkSetDebugUtilsObjectNameEXT :: ("device" ::: VkDevice) -> ("pNameInfo" ::: Ptr VkDebugUtilsObjectNameInfoEXT) -> IO VkResult
+-- | vkSetDebugUtilsObjectTagEXT - Attach arbitrary data to an object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device that created the object.
+--
+-- -   @pTagInfo@ is a pointer to an instance of the
+--     '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
+--
+-- -   @pTagInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsObjectTagInfoEXT@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pTagInfo.objectHandle@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugUtilsObjectTagInfoEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkSetDebugUtilsObjectTagEXT" vkSetDebugUtilsObjectTagEXT :: ("device" ::: VkDevice) -> ("pTagInfo" ::: Ptr VkDebugUtilsObjectTagInfoEXT) -> IO VkResult
+-- | vkQueueBeginDebugUtilsLabelEXT - Open a queue debug label region
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @queue@ is the queue in which to start a debug label region.
+--
+-- -   @pLabelInfo@ is a pointer to an instance of the
+--     'VkDebugUtilsLabelEXT' structure specifying the parameters of the
+--     label region to open.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid @VkQueue@ handle
+--
+-- -   @pLabelInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsLabelEXT@ structure
+--
+-- == 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             | -               |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- = 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.
+--
+-- == Valid Usage
+--
+-- -   There /must/ be an outstanding @vkQueueBeginDebugUtilsLabelEXT@
+--     command prior to the @vkQueueEndDebugUtilsLabelEXT@ on the queue
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid @VkQueue@ handle
+--
+-- == 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             | -               |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- = 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.
+--
+-- -   @pLabelInfo@ is a pointer to an instance of the
+--     'VkDebugUtilsLabelEXT' structure specifying the parameters of the
+--     label to insert.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid @VkQueue@ handle
+--
+-- -   @pLabelInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsLabelEXT@ structure
+--
+-- == 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             | -               |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- = 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.
+--
+-- -   @pLabelInfo@ is a pointer to an instance of the
+--     'VkDebugUtilsLabelEXT' structure specifying the parameters of the
+--     label region to open.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pLabelInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsLabelEXT@ structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <#commandbuffers-lifecycle recording state>
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   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', '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
+-- multiple command buffers or multiple queue submissions. When viewed from
+-- the linear series of submissions to a single queue, the calls to
+-- 'vkCmdBeginDebugUtilsLabelEXT' and 'vkCmdEndDebugUtilsLabelEXT' /must/
+-- be matched and balanced.
+--
+-- == Valid Usage
+--
+-- -   There /must/ be an outstanding @vkCmdBeginDebugUtilsLabelEXT@
+--     command prior to the @vkCmdEndDebugUtilsLabelEXT@ on the queue that
+--     @commandBuffer@ is submitted to
+--
+-- -   If @commandBuffer@ is a secondary command buffer, there /must/ be an
+--     outstanding @vkCmdBeginDebugUtilsLabelEXT@ command recorded to
+--     @commandBuffer@ that has not previously been ended by a call to
+--     @vkCmdEndDebugUtilsLabelEXT@.
+--
+-- == 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, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   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'
+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.
+--
+-- -   @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
+--
+-- -   @pLabelInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsLabelEXT@ structure
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <#commandbuffers-lifecycle recording state>
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics, or compute operations
+--
+-- == Host Synchronization
+--
+-- -   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', '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.
+--
+-- -   @pCreateInfo@ points to a 'VkDebugUtilsMessengerCreateInfoEXT'
+--     structure which contains the callback pointer as well as defines the
+--     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.
+--
+-- -   @pMessenger@ is a pointer to record the @VkDebugUtilsMessengerEXT@
+--     object created.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsMessengerCreateInfoEXT@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pMessenger@ /must/ be a valid pointer to a
+--     @VkDebugUtilsMessengerEXT@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDebugUtilsMessengerCreateInfoEXT', 'VkDebugUtilsMessengerEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'
+foreign import ccall "vkCreateDebugUtilsMessengerEXT" vkCreateDebugUtilsMessengerEXT :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkDebugUtilsMessengerCreateInfoEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pMessenger" ::: Ptr VkDebugUtilsMessengerEXT) -> IO VkResult
+-- | vkDestroyDebugUtilsMessengerEXT - Destroy a debug messenger object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ the instance where the callback was created.
+--
+-- -   @messenger@ the @VkDebugUtilsMessengerEXT@ object to destroy.
+--     @messenger@ is an externally synchronized object and /must/ not be
+--     used on more than one thread at a time. This means that
+--     @vkDestroyDebugUtilsMessengerEXT@ /must/ not be called when a
+--     callback is active.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If @VkAllocationCallbacks@ were provided when @messenger@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @messenger@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @messenger@ /must/ be a valid @VkDebugUtilsMessengerEXT@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @messenger@ /must/ have been created, allocated, or retrieved from
+--     @instance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @messenger@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDebugUtilsMessengerEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'
+foreign import ccall "vkDestroyDebugUtilsMessengerEXT" vkDestroyDebugUtilsMessengerEXT :: ("instance" ::: VkInstance) -> ("messenger" ::: VkDebugUtilsMessengerEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkSubmitDebugUtilsMessageEXT - Inject a message into a debug stream
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the debug stream’s @VkInstance@.
+--
+-- -   @messageSeverity@ is the 'VkDebugUtilsMessageSeverityFlagBitsEXT'
+--     severity of this event\/message.
+--
+-- -   @messageTypes@ is a bitmask of 'VkDebugUtilsMessageTypeFlagBitsEXT'
+--     specifying which type of event(s) to identify with this message.
+--
+-- -   @pCallbackData@ contains all the callback related data in the
+--     '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
+-- callback in addition to the @pUserData@ value that was defined at the
+-- time the messenger was registered.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @messageSeverity@ /must/ be a valid
+--     'VkDebugUtilsMessageSeverityFlagBitsEXT' value
+--
+-- -   @messageTypes@ /must/ be a valid combination of
+--     'VkDebugUtilsMessageTypeFlagBitsEXT' values
+--
+-- -   @messageTypes@ /must/ not be @0@
+--
+-- -   @pCallbackData@ /must/ be a valid pointer to a valid
+--     @VkDebugUtilsMessengerCallbackDataEXT@ structure
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDebugUtilsMessageSeverityFlagBitsEXT',
+-- 'VkDebugUtilsMessageTypeFlagsEXT',
+-- 'VkDebugUtilsMessengerCallbackDataEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance'
+foreign import ccall "vkSubmitDebugUtilsMessageEXT" vkSubmitDebugUtilsMessageEXT :: ("instance" ::: VkInstance) -> ("messageSeverity" ::: VkDebugUtilsMessageSeverityFlagBitsEXT) -> ("messageTypes" ::: VkDebugUtilsMessageTypeFlagsEXT) -> ("pCallbackData" ::: Ptr VkDebugUtilsMessengerCallbackDataEXT) -> IO ()
+-- | VkDebugUtilsObjectNameInfoEXT - Specify parameters of a name to give to
+-- an object
+--
+-- = Description
+-- #_description#
+--
+-- Applications /may/ change the name associated with an object simply by
+-- calling @vkSetDebugUtilsObjectNameEXT@ again with a new string. If
+-- @pObjectName@ is an empty string, then any previously set name is
+-- removed.
+--
+-- == Valid Usage
+--
+-- -   @objectType@ /must/ not be @VK_OBJECT_TYPE_UNKNOWN@
+--
+-- -   @objectHandle@ /must/ not be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   @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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @objectType@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Core.VkObjectType' value
+--
+-- -   If @pObjectName@ is not @NULL@, @pObjectName@ /must/ be a
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkObjectType"
+  vkObjectType :: VkObjectType
+  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkObjectHandle"
+  vkObjectHandle :: Word64
+  , -- No documentation found for Nested "VkDebugUtilsObjectNameInfoEXT" "vkPObjectName"
+  vkPObjectName :: Ptr CChar
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugUtilsObjectNameInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDebugUtilsObjectNameInfoEXT <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+                                           <*> peek (ptr `plusPtr` 24)
+                                           <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugUtilsObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugUtilsObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkObjectType (poked :: VkDebugUtilsObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkObjectHandle (poked :: VkDebugUtilsObjectNameInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPObjectName (poked :: VkDebugUtilsObjectNameInfoEXT))
+-- | VkDebugUtilsObjectTagInfoEXT - Specify parameters of a tag to attach to
+-- 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
+-- only data that can be used by that implementation.
+--
+-- == Valid Usage
+--
+-- -   @objectType@ /must/ not be @VK_OBJECT_TYPE_UNKNOWN@
+--
+-- -   @objectHandle@ /must/ not be
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   @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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEBUG_UTILS_OBJECT_TAG_INFO_EXT@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @objectType@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Core.VkObjectType' value
+--
+-- -   @pTag@ /must/ be a valid pointer to an array of @tagSize@ bytes
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkObjectType"
+  vkObjectType :: VkObjectType
+  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkObjectHandle"
+  vkObjectHandle :: Word64
+  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkTagName"
+  vkTagName :: Word64
+  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkTagSize"
+  vkTagSize :: CSize
+  , -- No documentation found for Nested "VkDebugUtilsObjectTagInfoEXT" "vkPTag"
+  vkPTag :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugUtilsObjectTagInfoEXT where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkDebugUtilsObjectTagInfoEXT <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugUtilsObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugUtilsObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkObjectType (poked :: VkDebugUtilsObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkObjectHandle (poked :: VkDebugUtilsObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkTagName (poked :: VkDebugUtilsObjectTagInfoEXT))
+                *> poke (ptr `plusPtr` 40) (vkTagSize (poked :: VkDebugUtilsObjectTagInfoEXT))
+                *> 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@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugUtilsLabelEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugUtilsLabelEXT" "vkPLabelName"
+  vkPLabelName :: Ptr CChar
+  , -- No documentation found for Nested "VkDebugUtilsLabelEXT" "vkColor"
+  vkColor :: Vector 4 CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugUtilsLabelEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDebugUtilsLabelEXT <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugUtilsLabelEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugUtilsLabelEXT))
+                *> poke (ptr `plusPtr` 16) (vkPLabelName (poked :: VkDebugUtilsLabelEXT))
+                *> poke (ptr `plusPtr` 24) (vkColor (poked :: VkDebugUtilsLabelEXT))
+-- | VkDebugUtilsMessengerCreateInfoEXT - Structure specifying parameters of
+-- a newly created debug messenger
+--
+-- = Description
+-- #_description#
+--
+-- For each @VkDebugUtilsMessengerEXT@ that is created the
+-- @VkDebugUtilsMessengerCreateInfoEXT@::@messageSeverity@ and
+-- @VkDebugUtilsMessengerCreateInfoEXT@::@messageTypes@ determine when that
+-- @VkDebugUtilsMessengerCreateInfoEXT@::@pfnUserCallback@ is called. The
+-- process to determine if the user’s pfnUserCallback is triggered when an
+-- event occurs is as follows:
+--
+-- 1.  The implementation will perform a bitwise AND of the event’s
+--     'VkDebugUtilsMessageSeverityFlagBitsEXT' with the @messageSeverity@
+--     provided during creation of the 'VkDebugUtilsMessengerEXT' object.
+--
+--     1.  If the value is 0, the message is skipped.
+--
+-- 2.  The implementation will perform bitwise AND of the event’s
+--     'VkDebugUtilsMessageTypeFlagBitsEXT' with the @messageType@ provided
+--     during the creation of the 'VkDebugUtilsMessengerEXT' object.
+--
+--     1.  If the value is 0, the message is skipped.
+--
+-- 3.  The callback will trigger a debug message for the current event
+--
+-- The callback will come directly from the component that detected the
+-- event, unless some other layer intercepts the calls for its own purposes
+-- (filter them in a different way, log to a system error log, etc.).
+--
+-- An application /can/ receive multiple callbacks if multiple
+-- @VkDebugUtilsMessengerEXT@ objects are created. A callback will always
+-- be executed in the same thread as the originating Vulkan call.
+--
+-- A callback /can/ be called from multiple threads simultaneously (if the
+-- application is making Vulkan calls from multiple threads).
+--
+-- == Valid Usage
+--
+-- -   @pfnUserCallback@ /must/ be a valid
+--     'PFN_vkDebugUtilsMessengerCallbackEXT'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @messageSeverity@ /must/ be a valid combination of
+--     'VkDebugUtilsMessageSeverityFlagBitsEXT' values
+--
+-- -   @messageSeverity@ /must/ not be @0@
+--
+-- -   @messageType@ /must/ be a valid combination of
+--     'VkDebugUtilsMessageTypeFlagBitsEXT' values
+--
+-- -   @messageType@ /must/ not be @0@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'PFN_vkDebugUtilsMessengerCallbackEXT',
+-- 'VkDebugUtilsMessageSeverityFlagsEXT',
+-- 'VkDebugUtilsMessageTypeFlagsEXT',
+-- 'VkDebugUtilsMessengerCreateFlagsEXT',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateDebugUtilsMessengerEXT'
+data VkDebugUtilsMessengerCreateInfoEXT = VkDebugUtilsMessengerCreateInfoEXT
+  { -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkFlags"
+  vkFlags :: VkDebugUtilsMessengerCreateFlagsEXT
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkMessageSeverity"
+  vkMessageSeverity :: VkDebugUtilsMessageSeverityFlagsEXT
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkMessageType"
+  vkMessageType :: VkDebugUtilsMessageTypeFlagsEXT
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkPfnUserCallback"
+  vkPfnUserCallback :: PFN_vkDebugUtilsMessengerCallbackEXT
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCreateInfoEXT" "vkPUserData"
+  vkPUserData :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugUtilsMessengerCreateInfoEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkDebugUtilsMessengerCreateInfoEXT <$> 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 :: VkDebugUtilsMessengerCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugUtilsMessengerCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDebugUtilsMessengerCreateInfoEXT))
+                *> poke (ptr `plusPtr` 20) (vkMessageSeverity (poked :: VkDebugUtilsMessengerCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkMessageType (poked :: VkDebugUtilsMessengerCreateInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPfnUserCallback (poked :: VkDebugUtilsMessengerCreateInfoEXT))
+                *> poke (ptr `plusPtr` 40) (vkPUserData (poked :: VkDebugUtilsMessengerCreateInfoEXT))
+-- | VkDebugUtilsMessengerCallbackDataEXT - Structure specifying parameters
+-- returned to the callback
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- This structure should only be considered valid during the lifetime of
+-- the triggered callback.
+--
+-- Since adding queue and command buffer labels behaves like pushing and
+-- popping onto a stack, the order of both @pQueueLabels@ and
+-- @pCmdBufLabels@ is based on the order the labels were defined. The
+-- result is that the first label in either @pQueueLabels@ or
+-- @pCmdBufLabels@ will be the first defined (and therefore the oldest)
+-- while the last label in each list will be the most recent.
+--
+-- __Note__
+--
+-- @pQueueLabels@ will only be non-NULL if one of the objects in @pObjects@
+-- can be related directly to a defined @VkQueue@ which has had one or more
+-- labels associated with it.
+--
+-- Likewise, @pCmdBufLabels@ will only be non-NULL if one of the objects in
+-- @pObjects@ can be related directly to a defined @VkCommandBuffer@ which
+-- has had one or more labels associated with it. Additionally, while
+-- command buffer labels allow for beginning and ending across different
+-- command buffers, the debug messaging framework /cannot/ guarantee that
+-- labels in @pCmdBufLables@ will contain those defined outside of the
+-- associated command buffer. This is partially due to the fact that the
+-- association of one command buffer with another may not have been defined
+-- at the time the debug message is triggered.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @pMessageIdName@ is not @NULL@, @pMessageIdName@ /must/ be a
+--     null-terminated UTF-8 string
+--
+-- -   @pMessage@ /must/ be a null-terminated UTF-8 string
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkFlags"
+  vkFlags :: VkDebugUtilsMessengerCallbackDataFlagsEXT
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPMessageIdName"
+  vkPMessageIdName :: Ptr CChar
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkMessageIdNumber"
+  vkMessageIdNumber :: Int32
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPMessage"
+  vkPMessage :: Ptr CChar
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkQueueLabelCount"
+  vkQueueLabelCount :: Word32
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPQueueLabels"
+  vkPQueueLabels :: Ptr VkDebugUtilsLabelEXT
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkCmdBufLabelCount"
+  vkCmdBufLabelCount :: Word32
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPCmdBufLabels"
+  vkPCmdBufLabels :: Ptr VkDebugUtilsLabelEXT
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkObjectCount"
+  vkObjectCount :: Word32
+  , -- No documentation found for Nested "VkDebugUtilsMessengerCallbackDataEXT" "vkPObjects"
+  vkPObjects :: Ptr VkDebugUtilsObjectNameInfoEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDebugUtilsMessengerCallbackDataEXT where
+  sizeOf ~_ = 96
+  alignment ~_ = 8
+  peek ptr = VkDebugUtilsMessengerCallbackDataEXT <$> 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)
+                                                  <*> peek (ptr `plusPtr` 64)
+                                                  <*> peek (ptr `plusPtr` 72)
+                                                  <*> peek (ptr `plusPtr` 80)
+                                                  <*> peek (ptr `plusPtr` 88)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 24) (vkPMessageIdName (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 32) (vkMessageIdNumber (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 40) (vkPMessage (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 48) (vkQueueLabelCount (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 56) (vkPQueueLabels (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 64) (vkCmdBufLabelCount (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 72) (vkPCmdBufLabels (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 80) (vkObjectCount (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+                *> poke (ptr `plusPtr` 88) (vkPObjects (poked :: VkDebugUtilsMessengerCallbackDataEXT))
+-- No documentation found for TopLevel "VkDebugUtilsMessageSeverityFlagsEXT"
+type VkDebugUtilsMessageSeverityFlagsEXT = VkDebugUtilsMessageSeverityFlagBitsEXT
+-- No documentation found for TopLevel "VkDebugUtilsMessageTypeFlagsEXT"
+type VkDebugUtilsMessageTypeFlagsEXT = VkDebugUtilsMessageTypeFlagBitsEXT
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_depth_range_unrestricted.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted
+  ( pattern VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION
+  , pattern VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION"
+pattern VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DEPTH_RANGE_UNRESTRICTED_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME"
+pattern VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DEPTH_RANGE_UNRESTRICTED_EXTENSION_NAME = "VK_EXT_depth_range_unrestricted"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_descriptor_indexing.hs
@@ -0,0 +1,1015 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing
+  ( VkDescriptorBindingFlagBitsEXT(..)
+  , pattern VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT
+  , pattern VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT
+  , pattern VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT
+  , pattern VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT
+  , pattern VK_ERROR_FRAGMENTATION_EXT
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT
+  , pattern VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT
+  , pattern VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT
+  , pattern VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION
+  , pattern VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME
+  , VkPhysicalDeviceDescriptorIndexingFeaturesEXT(..)
+  , VkPhysicalDeviceDescriptorIndexingPropertiesEXT(..)
+  , VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(..)
+  , VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(..)
+  , VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(..)
+  , VkDescriptorBindingFlagsEXT
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorPoolCreateFlagBits(..)
+  , VkDescriptorSetLayoutCreateFlagBits(..)
+  )
+
+
+-- ** VkDescriptorBindingFlagBitsEXT
+
+-- | VkDescriptorBindingFlagBitsEXT - Bitmask specifying descriptor set
+-- 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
+--     set is bound in a command buffer and when that command buffer is
+--     submitted to a queue, then the submission will use the most recently
+--     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'.
+--     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.
+--
+-- -   @VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT@ indicates that
+--     descriptors in this binding that are not /dynamically used/ need not
+--     contain valid descriptors at the time the descriptors are consumed.
+--     A descriptor is dynamically used if any shader invocation executes
+--     an instruction that performs any memory access using the descriptor.
+--
+-- -   @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@
+--     indicates that descriptors in this binding /can/ be updated after a
+--     command buffer has bound this descriptor set, or while a command
+--     buffer that uses this descriptor set is pending execution, as long
+--     as the descriptors that are updated are not used by those command
+--     buffers. If @VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT@ is also
+--     set, then descriptors /can/ be updated as long as they are not
+--     dynamically used by any shader invocations. If
+--     @VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT@ is not set, then
+--     descriptors /can/ be updated as long as they are not statically used
+--     by any shader invocations.
+--
+-- -   @VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT@ indicates
+--     that this descriptor binding has a variable size that will be
+--     specified when a descriptor set is allocated using this layout. The
+--     value of @descriptorCount@ is treated as an upper bound on the size
+--     of the binding. This /must/ only be used for the last binding in the
+--     descriptor set layout (i.e. the binding with the largest value of
+--     @binding@). For the purposes of counting against limits such as
+--     @maxDescriptorSet@* and @maxPerStageDescriptor@*, the full value of
+--     @descriptorCount@ is counted.
+--
+-- __Note__
+--
+-- Note that while @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ and
+-- @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@ both involve
+-- updates to descriptor sets after they are bound,
+-- @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@ is a weaker
+-- requirement since it is only about descriptors that are not used,
+-- whereas @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ requires the
+-- implementation to observe updates to descriptors that are used.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDescriptorBindingFlagsEXT'
+newtype VkDescriptorBindingFlagBitsEXT = VkDescriptorBindingFlagBitsEXT VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDescriptorBindingFlagBitsEXT where
+  showsPrec _ VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = showString "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT"
+  showsPrec _ VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = showString "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT"
+  showsPrec _ VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = showString "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT"
+  showsPrec _ VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = showString "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT"
+  showsPrec p (VkDescriptorBindingFlagBitsEXT x) = showParen (p >= 11) (showString "VkDescriptorBindingFlagBitsEXT " . showsPrec 11 x)
+
+instance Read VkDescriptorBindingFlagBitsEXT where
+  readPrec = parens ( choose [ ("VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT",           pure VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT)
+                             , ("VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT", pure VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT)
+                             , ("VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT",             pure VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT)
+                             , ("VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT",   pure VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDescriptorBindingFlagBitsEXT")
+                        v <- step readPrec
+                        pure (VkDescriptorBindingFlagBitsEXT v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkDescriptorBindingFlagBitsEXT" "VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT"
+pattern VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT :: VkDescriptorBindingFlagBitsEXT
+pattern VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT = VkDescriptorBindingFlagBitsEXT 0x00000001
+
+-- No documentation found for Nested "VkDescriptorBindingFlagBitsEXT" "VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT"
+pattern VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT :: VkDescriptorBindingFlagBitsEXT
+pattern VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT = VkDescriptorBindingFlagBitsEXT 0x00000002
+
+-- No documentation found for Nested "VkDescriptorBindingFlagBitsEXT" "VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT"
+pattern VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT :: VkDescriptorBindingFlagBitsEXT
+pattern VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT = VkDescriptorBindingFlagBitsEXT 0x00000004
+
+-- No documentation found for Nested "VkDescriptorBindingFlagBitsEXT" "VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT"
+pattern VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT :: VkDescriptorBindingFlagBitsEXT
+pattern VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT = VkDescriptorBindingFlagBitsEXT 0x00000008
+-- No documentation found for Nested "VkResult" "VK_ERROR_FRAGMENTATION_EXT"
+pattern VK_ERROR_FRAGMENTATION_EXT :: VkResult
+pattern VK_ERROR_FRAGMENTATION_EXT = VkResult (-1000161000)
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT = VkStructureType 1000161000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT = VkStructureType 1000161001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT = VkStructureType 1000161002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT = VkStructureType 1000161003
+-- 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"
+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"
+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"
+pattern VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DESCRIPTOR_INDEXING_SPEC_VERSION = 2
+-- No documentation found for TopLevel "VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME"
+pattern VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DESCRIPTOR_INDEXING_EXTENSION_NAME = "VK_EXT_descriptor_indexing"
+-- | VkPhysicalDeviceDescriptorIndexingFeaturesEXT - Structure describing
+-- 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
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ /must/ be indexed only by
+--     constant integral expressions when aggregated into arrays in shader
+--     code. This also indicates whether shader modules /can/ declare the
+--     @InputAttachmentArrayDynamicIndexingEXT@ capability.
+--
+-- -   @shaderUniformTexelBufferArrayDynamicIndexing@ indicates whether
+--     arrays of uniform texel buffers /can/ be indexed by dynamically
+--     uniform integer expressions in shader code. If this feature is not
+--     enabled, resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ /must/ be indexed only by
+--     constant integral expressions when aggregated into arrays in shader
+--     code. This also indicates whether shader modules /can/ declare the
+--     @UniformTexelBufferArrayDynamicIndexingEXT@ capability.
+--
+-- -   @shaderStorageTexelBufferArrayDynamicIndexing@ indicates whether
+--     arrays of storage texel buffers /can/ be indexed by dynamically
+--     uniform integer expressions in shader code. If this feature is not
+--     enabled, resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ /must/ be indexed only by
+--     constant integral expressions when aggregated into arrays in shader
+--     code. This also indicates whether shader modules /can/ declare the
+--     @StorageTexelBufferArrayDynamicIndexingEXT@ capability.
+--
+-- -   @shaderUniformBufferArrayNonUniformIndexing@ indicates whether
+--     arrays of uniform buffers /can/ be indexed by non-uniform integer
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ /must/ not be indexed by
+--     non-uniform integer expressions when aggregated into arrays in
+--     shader code. This also indicates whether shader modules /can/
+--     declare the @UniformBufferArrayNonUniformIndexingEXT@ capability.
+--
+-- -   @shaderSampledImageArrayNonUniformIndexing@ indicates whether arrays
+--     of samplers or sampled images /can/ be indexed by non-uniform
+--     integer expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of @VK_DESCRIPTOR_TYPE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, or
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ /must/ not be indexed by
+--     non-uniform integer expressions when aggregated into arrays in
+--     shader code. This also indicates whether shader modules /can/
+--     declare the @SampledImageArrayNonUniformIndexingEXT@ capability.
+--
+-- -   @shaderStorageBufferArrayNonUniformIndexing@ indicates whether
+--     arrays of storage buffers /can/ be indexed by non-uniform integer
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ /must/ not be indexed by
+--     non-uniform integer expressions when aggregated into arrays in
+--     shader code. This also indicates whether shader modules /can/
+--     declare the @StorageBufferArrayNonUniformIndexingEXT@ capability.
+--
+-- -   @shaderStorageImageArrayNonUniformIndexing@ indicates whether arrays
+--     of storage images /can/ be indexed by non-uniform integer
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ /must/ not be indexed by
+--     non-uniform integer expressions when aggregated into arrays in
+--     shader code. This also indicates whether shader modules /can/
+--     declare the @StorageImageArrayNonUniformIndexingEXT@ capability.
+--
+-- -   @shaderInputAttachmentArrayNonUniformIndexing@ indicates whether
+--     arrays of input attachments /can/ be indexed by non-uniform integer
+--     expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@ /must/ not be indexed by
+--     non-uniform integer expressions when aggregated into arrays in
+--     shader code. This also indicates whether shader modules /can/
+--     declare the @InputAttachmentArrayNonUniformIndexingEXT@ capability.
+--
+-- -   @shaderUniformTexelBufferArrayNonUniformIndexing@ indicates whether
+--     arrays of uniform texel buffers /can/ be indexed by non-uniform
+--     integer expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ /must/ not be indexed by
+--     non-uniform integer expressions when aggregated into arrays in
+--     shader code. This also indicates whether shader modules /can/
+--     declare the @UniformTexelBufferArrayNonUniformIndexingEXT@
+--     capability.
+--
+-- -   @shaderStorageTexelBufferArrayNonUniformIndexing@ indicates whether
+--     arrays of storage texel buffers /can/ be indexed by non-uniform
+--     integer expressions in shader code. If this feature is not enabled,
+--     resources with a descriptor type of
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ /must/ not be indexed by
+--     non-uniform integer expressions when aggregated into arrays in
+--     shader code. This also indicates whether shader modules /can/
+--     declare the @StorageTexelBufferArrayNonUniformIndexingEXT@
+--     capability.
+--
+-- -   @descriptorBindingUniformBufferUpdateAfterBind@ indicates whether
+--     the implementation supports updating uniform buffer descriptors
+--     after a set is bound. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ /must/ not be used
+--     with @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@.
+--
+-- -   @descriptorBindingSampledImageUpdateAfterBind@ indicates whether the
+--     implementation supports updating sampled image descriptors after a
+--     set is bound. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ /must/ not be used
+--     with @VK_DESCRIPTOR_TYPE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, or
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@.
+--
+-- -   @descriptorBindingStorageImageUpdateAfterBind@ indicates whether the
+--     implementation supports updating storage image descriptors after a
+--     set is bound. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ /must/ not be used
+--     with @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@.
+--
+-- -   @descriptorBindingStorageBufferUpdateAfterBind@ indicates whether
+--     the implementation supports updating storage buffer descriptors
+--     after a set is bound. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ /must/ not be used
+--     with @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@.
+--
+-- -   @descriptorBindingUniformTexelBufferUpdateAfterBind@ indicates
+--     whether the implementation supports updating uniform texel buffer
+--     descriptors after a set is bound. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ /must/ not be used
+--     with @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@.
+--
+-- -   @descriptorBindingStorageTexelBufferUpdateAfterBind@ indicates
+--     whether the implementation supports updating storage texel buffer
+--     descriptors after a set is bound. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@ /must/ not be used
+--     with @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@.
+--
+-- -   @descriptorBindingUpdateUnusedWhilePending@ indicates whether the
+--     implementation supports updating descriptors while the set is in
+--     use. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@ /must/
+--     not be used.
+--
+-- -   @descriptorBindingPartiallyBound@ indicates whether the
+--     implementation supports statically using a descriptor set binding in
+--     which some descriptors are not valid. If this feature is not
+--     enabled, @VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT@ /must/ not
+--     be used.
+--
+-- -   @descriptorBindingVariableDescriptorCount@ indicates whether the
+--     implementation supports descriptor sets with a variable-sized last
+--     binding. If this feature is not enabled,
+--     @VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT@ /must/ not
+--     be used.
+--
+-- -   @runtimeDescriptorArray@ indicates whether the implementation
+--     supports the SPIR-V RuntimeDescriptorArrayEXT capability. If this
+--     feature is not enabled, descriptors /must/ not be declared in
+--     runtime arrays.
+--
+-- If the @VkPhysicalDeviceDescriptorIndexingFeaturesEXT@ structure is
+-- included in the @pNext@ chain of
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.VkPhysicalDeviceFeatures2KHR',
+-- it is filled with values indicating whether each feature is supported.
+-- @VkPhysicalDeviceDescriptorIndexingFeaturesEXT@ /can/ also be used in
+-- the @pNext@ chain of 'Graphics.Vulkan.Core10.Device.VkDeviceCreateInfo'
+-- to enable features.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderInputAttachmentArrayDynamicIndexing"
+  vkShaderInputAttachmentArrayDynamicIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderUniformTexelBufferArrayDynamicIndexing"
+  vkShaderUniformTexelBufferArrayDynamicIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageTexelBufferArrayDynamicIndexing"
+  vkShaderStorageTexelBufferArrayDynamicIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderUniformBufferArrayNonUniformIndexing"
+  vkShaderUniformBufferArrayNonUniformIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderSampledImageArrayNonUniformIndexing"
+  vkShaderSampledImageArrayNonUniformIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageBufferArrayNonUniformIndexing"
+  vkShaderStorageBufferArrayNonUniformIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageImageArrayNonUniformIndexing"
+  vkShaderStorageImageArrayNonUniformIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderInputAttachmentArrayNonUniformIndexing"
+  vkShaderInputAttachmentArrayNonUniformIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderUniformTexelBufferArrayNonUniformIndexing"
+  vkShaderUniformTexelBufferArrayNonUniformIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkShaderStorageTexelBufferArrayNonUniformIndexing"
+  vkShaderStorageTexelBufferArrayNonUniformIndexing :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingUniformBufferUpdateAfterBind"
+  vkDescriptorBindingUniformBufferUpdateAfterBind :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingSampledImageUpdateAfterBind"
+  vkDescriptorBindingSampledImageUpdateAfterBind :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingStorageImageUpdateAfterBind"
+  vkDescriptorBindingStorageImageUpdateAfterBind :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingStorageBufferUpdateAfterBind"
+  vkDescriptorBindingStorageBufferUpdateAfterBind :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingUniformTexelBufferUpdateAfterBind"
+  vkDescriptorBindingUniformTexelBufferUpdateAfterBind :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingStorageTexelBufferUpdateAfterBind"
+  vkDescriptorBindingStorageTexelBufferUpdateAfterBind :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingUpdateUnusedWhilePending"
+  vkDescriptorBindingUpdateUnusedWhilePending :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingPartiallyBound"
+  vkDescriptorBindingPartiallyBound :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkDescriptorBindingVariableDescriptorCount"
+  vkDescriptorBindingVariableDescriptorCount :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingFeaturesEXT" "vkRuntimeDescriptorArray"
+  vkRuntimeDescriptorArray :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceDescriptorIndexingFeaturesEXT where
+  sizeOf ~_ = 96
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceDescriptorIndexingFeaturesEXT <$> 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)
+                                                           <*> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 16) (vkShaderInputAttachmentArrayDynamicIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 20) (vkShaderUniformTexelBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 24) (vkShaderStorageTexelBufferArrayDynamicIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 28) (vkShaderUniformBufferArrayNonUniformIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 32) (vkShaderSampledImageArrayNonUniformIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 36) (vkShaderStorageBufferArrayNonUniformIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 40) (vkShaderStorageImageArrayNonUniformIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 44) (vkShaderInputAttachmentArrayNonUniformIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 48) (vkShaderUniformTexelBufferArrayNonUniformIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 52) (vkShaderStorageTexelBufferArrayNonUniformIndexing (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 56) (vkDescriptorBindingUniformBufferUpdateAfterBind (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 60) (vkDescriptorBindingSampledImageUpdateAfterBind (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 64) (vkDescriptorBindingStorageImageUpdateAfterBind (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 68) (vkDescriptorBindingStorageBufferUpdateAfterBind (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 72) (vkDescriptorBindingUniformTexelBufferUpdateAfterBind (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 76) (vkDescriptorBindingStorageTexelBufferUpdateAfterBind (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 80) (vkDescriptorBindingUpdateUnusedWhilePending (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 84) (vkDescriptorBindingPartiallyBound (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 88) (vkDescriptorBindingVariableDescriptorCount (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+                *> poke (ptr `plusPtr` 92) (vkRuntimeDescriptorArray (poked :: VkPhysicalDeviceDescriptorIndexingFeaturesEXT))
+-- | VkPhysicalDeviceDescriptorIndexingPropertiesEXT - Structure describing
+-- descriptor indexing properties that can be supported by an
+-- 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
+--     across all pools that are created with the
+--     @VK_DESCRIPTOR_POOL_CREATE_UPDATE_AFTER_BIND_BIT_EXT@ bit set. Pool
+--     creation /may/ fail when this limit is exceeded, or when the space
+--     this limit represents can’t satisfy a pool creation due to
+--     fragmentation.
+--
+-- -   @shaderUniformBufferArrayNonUniformIndexingNative@ is a boolean
+--     value indicating whether uniform buffer descriptors natively support
+--     nonuniform indexing. If this is @VK_FALSE@, then a single dynamic
+--     instance of an instruction that nonuniformly indexes an array of
+--     uniform buffers /may/ execute multiple times in order to access all
+--     the descriptors.
+--
+-- -   @shaderSampledImageArrayNonUniformIndexingNative@ is a boolean value
+--     indicating whether sampler and image descriptors natively support
+--     nonuniform indexing. If this is @VK_FALSE@, then a single dynamic
+--     instance of an instruction that nonuniformly indexes an array of
+--     samplers or images /may/ execute multiple times in order to access
+--     all the descriptors.
+--
+-- -   @shaderStorageBufferArrayNonUniformIndexingNative@ is a boolean
+--     value indicating whether storage buffer descriptors natively support
+--     nonuniform indexing. If this is @VK_FALSE@, then a single dynamic
+--     instance of an instruction that nonuniformly indexes an array of
+--     storage buffers /may/ execute multiple times in order to access all
+--     the descriptors.
+--
+-- -   @shaderStorageImageArrayNonUniformIndexingNative@ is a boolean value
+--     indicating whether storage image descriptors natively support
+--     nonuniform indexing. If this is @VK_FALSE@, then a single dynamic
+--     instance of an instruction that nonuniformly indexes an array of
+--     storage images /may/ execute multiple times in order to access all
+--     the descriptors.
+--
+-- -   @shaderInputAttachmentArrayNonUniformIndexingNative@ is a boolean
+--     value indicating whether input attachment descriptors natively
+--     support nonuniform indexing. If this is @VK_FALSE@, then a single
+--     dynamic instance of an instruction that nonuniformly indexes an
+--     array of input attachments /may/ execute multiple times in order to
+--     access all the descriptors.
+--
+-- -   @robustBufferAccessUpdateAfterBind@ is a boolean value indicating
+--     whether
+--     <{html_spec_relative}#features-features-robustBufferAccess robustBufferAccess>
+--     /can/ be enabled in a device simultaneously with
+--     @descriptorBindingUniformBufferUpdateAfterBind@,
+--     @descriptorBindingStorageBufferUpdateAfterBind@,
+--     @descriptorBindingUniformTexelBufferUpdateAfterBind@, and\/or
+--     @descriptorBindingStorageTexelBufferUpdateAfterBind@. If this is
+--     @VK_FALSE@, then either @robustBufferAccess@ /must/ be disabled or
+--     all of these update-after-bind features /must/ be disabled.
+--
+-- -   @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>.
+--
+-- -   @maxPerStageDescriptorUpdateAfterBindSamplers@ is similar to
+--     @maxPerStageDescriptorSamplers@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxPerStageDescriptorUpdateAfterBindUniformBuffers@ is similar to
+--     @maxPerStageDescriptorUniformBuffers@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxPerStageDescriptorUpdateAfterBindStorageBuffers@ is similar to
+--     @maxPerStageDescriptorStorageBuffers@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxPerStageDescriptorUpdateAfterBindSampledImages@ is similar to
+--     @maxPerStageDescriptorSampledImages@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxPerStageDescriptorUpdateAfterBindStorageImages@ is similar to
+--     @maxPerStageDescriptorStorageImages@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxPerStageDescriptorUpdateAfterBindInputAttachments@ is similar to
+--     @maxPerStageDescriptorInputAttachments@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxPerStageUpdateAfterBindResources@ is similar to
+--     @maxPerStageResources@ but counts descriptors from descriptor sets
+--     created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindSamplers@ is similar to
+--     @maxDescriptorSetSamplers@ but counts descriptors from descriptor
+--     sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindUniformBuffers@ is similar to
+--     @maxDescriptorSetUniformBuffers@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindUniformBuffersDynamic@ is similar to
+--     @maxDescriptorSetUniformBuffersDynamic@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindStorageBuffers@ is similar to
+--     @maxDescriptorSetStorageBuffers@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindStorageBuffersDynamic@ is similar to
+--     @maxDescriptorSetStorageBuffersDynamic@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindSampledImages@ is similar to
+--     @maxDescriptorSetSampledImages@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindStorageImages@ is similar to
+--     @maxDescriptorSetStorageImages@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- -   @maxDescriptorSetUpdateAfterBindInputAttachments@ is similar to
+--     @maxDescriptorSetInputAttachments@ but counts descriptors from
+--     descriptor sets created with or without the
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_UPDATE_AFTER_BIND_POOL_BIT_EXT@ bit
+--     set.
+--
+-- If the @VkPhysicalDeviceDescriptorIndexingPropertiesEXT@ structure is
+-- included in the @pNext@ chain of
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2KHR',
+-- it is filled with the implementation-dependent limits.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxUpdateAfterBindDescriptorsInAllPools"
+  vkMaxUpdateAfterBindDescriptorsInAllPools :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderUniformBufferArrayNonUniformIndexingNative"
+  vkShaderUniformBufferArrayNonUniformIndexingNative :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderSampledImageArrayNonUniformIndexingNative"
+  vkShaderSampledImageArrayNonUniformIndexingNative :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderStorageBufferArrayNonUniformIndexingNative"
+  vkShaderStorageBufferArrayNonUniformIndexingNative :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderStorageImageArrayNonUniformIndexingNative"
+  vkShaderStorageImageArrayNonUniformIndexingNative :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkShaderInputAttachmentArrayNonUniformIndexingNative"
+  vkShaderInputAttachmentArrayNonUniformIndexingNative :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkRobustBufferAccessUpdateAfterBind"
+  vkRobustBufferAccessUpdateAfterBind :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkQuadDivergentImplicitLod"
+  vkQuadDivergentImplicitLod :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindSamplers"
+  vkMaxPerStageDescriptorUpdateAfterBindSamplers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindUniformBuffers"
+  vkMaxPerStageDescriptorUpdateAfterBindUniformBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindStorageBuffers"
+  vkMaxPerStageDescriptorUpdateAfterBindStorageBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindSampledImages"
+  vkMaxPerStageDescriptorUpdateAfterBindSampledImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindStorageImages"
+  vkMaxPerStageDescriptorUpdateAfterBindStorageImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageDescriptorUpdateAfterBindInputAttachments"
+  vkMaxPerStageDescriptorUpdateAfterBindInputAttachments :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxPerStageUpdateAfterBindResources"
+  vkMaxPerStageUpdateAfterBindResources :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindSamplers"
+  vkMaxDescriptorSetUpdateAfterBindSamplers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindUniformBuffers"
+  vkMaxDescriptorSetUpdateAfterBindUniformBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindUniformBuffersDynamic"
+  vkMaxDescriptorSetUpdateAfterBindUniformBuffersDynamic :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindStorageBuffers"
+  vkMaxDescriptorSetUpdateAfterBindStorageBuffers :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindStorageBuffersDynamic"
+  vkMaxDescriptorSetUpdateAfterBindStorageBuffersDynamic :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindSampledImages"
+  vkMaxDescriptorSetUpdateAfterBindSampledImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindStorageImages"
+  vkMaxDescriptorSetUpdateAfterBindStorageImages :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceDescriptorIndexingPropertiesEXT" "vkMaxDescriptorSetUpdateAfterBindInputAttachments"
+  vkMaxDescriptorSetUpdateAfterBindInputAttachments :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceDescriptorIndexingPropertiesEXT where
+  sizeOf ~_ = 112
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceDescriptorIndexingPropertiesEXT <$> 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)
+                                                             <*> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkMaxUpdateAfterBindDescriptorsInAllPools (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 20) (vkShaderUniformBufferArrayNonUniformIndexingNative (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 24) (vkShaderSampledImageArrayNonUniformIndexingNative (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 28) (vkShaderStorageBufferArrayNonUniformIndexingNative (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 32) (vkShaderStorageImageArrayNonUniformIndexingNative (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 36) (vkShaderInputAttachmentArrayNonUniformIndexingNative (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 40) (vkRobustBufferAccessUpdateAfterBind (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 44) (vkQuadDivergentImplicitLod (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 48) (vkMaxPerStageDescriptorUpdateAfterBindSamplers (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 52) (vkMaxPerStageDescriptorUpdateAfterBindUniformBuffers (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 56) (vkMaxPerStageDescriptorUpdateAfterBindStorageBuffers (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 60) (vkMaxPerStageDescriptorUpdateAfterBindSampledImages (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 64) (vkMaxPerStageDescriptorUpdateAfterBindStorageImages (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 68) (vkMaxPerStageDescriptorUpdateAfterBindInputAttachments (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 72) (vkMaxPerStageUpdateAfterBindResources (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 76) (vkMaxDescriptorSetUpdateAfterBindSamplers (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 80) (vkMaxDescriptorSetUpdateAfterBindUniformBuffers (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 84) (vkMaxDescriptorSetUpdateAfterBindUniformBuffersDynamic (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 88) (vkMaxDescriptorSetUpdateAfterBindStorageBuffers (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 92) (vkMaxDescriptorSetUpdateAfterBindStorageBuffersDynamic (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 96) (vkMaxDescriptorSetUpdateAfterBindSampledImages (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 100) (vkMaxDescriptorSetUpdateAfterBindStorageImages (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+                *> poke (ptr `plusPtr` 104) (vkMaxDescriptorSetUpdateAfterBindInputAttachments (poked :: VkPhysicalDeviceDescriptorIndexingPropertiesEXT))
+-- | VkDescriptorSetLayoutBindingFlagsCreateInfoEXT - Structure specifying
+-- 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
+-- binding is considered to be zero. Otherwise, the descriptor set layout
+-- binding at
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo'::@pBindings@[i]
+-- uses the flags in @pBindingFlags@[i].
+--
+-- == Valid Usage
+--
+-- -   If @bindingCount@ is not zero, @bindingCount@ /must/ equal
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo'::@bindingCount@
+--
+-- -   If an element of @pBindingFlags@ includes
+--     @VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT@, then all
+--     other elements of
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetLayoutCreateInfo'::@pBindings@
+--     /must/ have a smaller value of @binding@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingUniformBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER@ /must/ not use
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingSampledImageUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     @VK_DESCRIPTOR_TYPE_SAMPLER@,
+--     @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, or
+--     @VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE@ /must/ not use
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingStorageImageUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     @VK_DESCRIPTOR_TYPE_STORAGE_IMAGE@ /must/ not use
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingStorageBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER@ /must/ not use
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingUniformTexelBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER@ /must/ not use
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingStorageTexelBufferUpdateAfterBind@
+--     is not enabled, all bindings with descriptor type
+--     @VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER@ /must/ not use
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@
+--
+-- -   All bindings with descriptor type
+--     @VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT@,
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@, or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@ /must/ not use
+--     @VK_DESCRIPTOR_BINDING_UPDATE_AFTER_BIND_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingUpdateUnusedWhilePending@
+--     is not enabled, all elements of @pBindingFlags@ /must/ not include
+--     @VK_DESCRIPTOR_BINDING_UPDATE_UNUSED_WHILE_PENDING_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingPartiallyBound@
+--     is not enabled, all elements of @pBindingFlags@ /must/ not include
+--     @VK_DESCRIPTOR_BINDING_PARTIALLY_BOUND_BIT_EXT@
+--
+-- -   If
+--     'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingVariableDescriptorCount@
+--     is not enabled, all elements of @pBindingFlags@ /must/ not include
+--     @VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT@
+--
+-- -   If an element of @pBindingFlags@ includes
+--     @VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT_EXT@, that
+--     element’s @descriptorType@ /must/ not be
+--     @VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC@ or
+--     @VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT@
+--
+-- -   If @bindingCount@ is not @0@, @pBindingFlags@ /must/ be a valid
+--     pointer to an array of @bindingCount@ valid combinations of
+--     'VkDescriptorBindingFlagBitsEXT' values
+--
+-- -   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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" "vkBindingCount"
+  vkBindingCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorSetLayoutBindingFlagsCreateInfoEXT" "vkPBindingFlags"
+  vkPBindingFlags :: Ptr VkDescriptorBindingFlagsEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorSetLayoutBindingFlagsCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDescriptorSetLayoutBindingFlagsCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                            <*> peek (ptr `plusPtr` 8)
+                                                            <*> peek (ptr `plusPtr` 16)
+                                                            <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetLayoutBindingFlagsCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetLayoutBindingFlagsCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkBindingCount (poked :: VkDescriptorSetLayoutBindingFlagsCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkPBindingFlags (poked :: VkDescriptorSetLayoutBindingFlagsCreateInfoEXT))
+-- | VkDescriptorSetVariableDescriptorCountAllocateInfoEXT - Structure
+-- 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.
+-- Otherwise, @pDescriptorCounts@[i] is the number of descriptors in the
+-- variable count descriptor binding in the corresponding descriptor set
+-- layout. If
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetAllocateInfo'::@pSetLayouts@[i]
+-- does not include a variable count descriptor binding, then
+-- @pDescriptorCounts@[i] is ignored.
+--
+-- == Valid Usage
+--
+-- -   If @descriptorSetCount@ is not zero, @descriptorSetCount@ /must/
+--     equal
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetAllocateInfo'::@descriptorSetCount@
+--
+-- -   If
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorSetAllocateInfo'::@pSetLayouts@[i]
+--     has a variable descriptor count binding, then @pDescriptorCounts@[i]
+--     /must/ be less than or equal to the descriptor count specified for
+--     that binding when the descriptor set layout was created.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT@
+--
+-- -   If @descriptorSetCount@ is not @0@, @pDescriptorCounts@ /must/ be a
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" "vkDescriptorSetCount"
+  vkDescriptorSetCount :: Word32
+  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountAllocateInfoEXT" "vkPDescriptorCounts"
+  vkPDescriptorCounts :: Ptr Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorSetVariableDescriptorCountAllocateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDescriptorSetVariableDescriptorCountAllocateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                                   <*> peek (ptr `plusPtr` 8)
+                                                                   <*> peek (ptr `plusPtr` 16)
+                                                                   <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetVariableDescriptorCountAllocateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetVariableDescriptorCountAllocateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkDescriptorSetCount (poked :: VkDescriptorSetVariableDescriptorCountAllocateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkPDescriptorCounts (poked :: VkDescriptorSetVariableDescriptorCountAllocateInfoEXT))
+-- | VkDescriptorSetVariableDescriptorCountLayoutSupportEXT - Structure
+-- returning information about whether a descriptor set layout can be
+-- supported
+--
+-- = Description
+-- #_description#
+--
+-- If the create info includes a variable-sized descriptor, then
+-- @supported@ is determined assuming the requested size of the
+-- variable-sized descriptor, and @maxVariableDescriptorCount@ is set to
+-- the maximum size of that descriptor that /can/ be successfully created
+-- (which is greater than or equal to the requested size passed in). If the
+-- create info does not include a variable-sized descriptor or if the
+-- 'VkPhysicalDeviceDescriptorIndexingFeaturesEXT'::@descriptorBindingVariableDescriptorCount@
+-- feature is not enabled, then @maxVariableDescriptorCount@ is set to
+-- zero. For the purposes of this command, a variable-sized descriptor
+-- binding with a @descriptorCount@ of zero is treated as if the
+-- @descriptorCount@ is one, and thus the binding is not ignored and the
+-- maximum descriptor count will be returned. If the layout is not
+-- supported, then the value written to @maxVariableDescriptorCount@ is
+-- undefined.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDescriptorSetVariableDescriptorCountLayoutSupportEXT" "vkMaxVariableDescriptorCount"
+  vkMaxVariableDescriptorCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDescriptorSetVariableDescriptorCountLayoutSupportEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDescriptorSetVariableDescriptorCountLayoutSupportEXT <$> peek (ptr `plusPtr` 0)
+                                                                    <*> peek (ptr `plusPtr` 8)
+                                                                    <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDescriptorSetVariableDescriptorCountLayoutSupportEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDescriptorSetVariableDescriptorCountLayoutSupportEXT))
+                *> poke (ptr `plusPtr` 16) (vkMaxVariableDescriptorCount (poked :: VkDescriptorSetVariableDescriptorCountLayoutSupportEXT))
+-- No documentation found for TopLevel "VkDescriptorBindingFlagsEXT"
+type VkDescriptorBindingFlagsEXT = VkDescriptorBindingFlagBitsEXT
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_direct_mode_display.hs
@@ -0,0 +1,67 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display
+  ( pattern VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION
+  , pattern VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME
+  , vkReleaseDisplayEXT
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_display
+  ( VkDisplayKHR
+  )
+
+
+-- No documentation found for TopLevel "VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION"
+pattern VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DIRECT_MODE_DISPLAY_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME"
+pattern VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DIRECT_MODE_DISPLAY_EXTENSION_NAME = "VK_EXT_direct_mode_display"
+-- | 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
+--
+-- -   @display@ /must/ be a valid @VkDisplayKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkReleaseDisplayEXT" vkReleaseDisplayEXT :: ("physicalDevice" ::: VkPhysicalDevice) -> ("display" ::: VkDisplayKHR) -> IO VkResult
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_discard_rectangles.hs
@@ -0,0 +1,358 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles
+  ( VkDiscardRectangleModeEXT(..)
+  , pattern VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT
+  , pattern VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT
+  , VkPipelineDiscardRectangleStateCreateFlagsEXT(..)
+  , pattern VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT
+  , pattern VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION
+  , pattern VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME
+  , vkCmdSetDiscardRectangleEXT
+  , VkPhysicalDeviceDiscardRectanglePropertiesEXT(..)
+  , VkPipelineDiscardRectangleStateCreateInfoEXT(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkRect2D(..)
+  , VkDynamicState(..)
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+
+
+-- ** VkDiscardRectangleModeEXT
+
+-- | VkDiscardRectangleModeEXT - Specify the discard rectangle mode
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineDiscardRectangleStateCreateInfoEXT'
+newtype VkDiscardRectangleModeEXT = VkDiscardRectangleModeEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDiscardRectangleModeEXT where
+  showsPrec _ VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = showString "VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT"
+  showsPrec _ VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = showString "VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT"
+  showsPrec p (VkDiscardRectangleModeEXT x) = showParen (p >= 11) (showString "VkDiscardRectangleModeEXT " . showsPrec 11 x)
+
+instance Read VkDiscardRectangleModeEXT where
+  readPrec = parens ( choose [ ("VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT", pure VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT)
+                             , ("VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT", pure VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDiscardRectangleModeEXT")
+                        v <- step readPrec
+                        pure (VkDiscardRectangleModeEXT v)
+                        )
+                    )
+
+-- | @VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT@ specifies that a fragment
+-- within any discard rectangle satisfies the test.
+pattern VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT :: VkDiscardRectangleModeEXT
+pattern VK_DISCARD_RECTANGLE_MODE_INCLUSIVE_EXT = VkDiscardRectangleModeEXT 0
+
+-- | @VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT@ specifies that a fragment not
+-- within any of the discard rectangles satisfies the test.
+pattern VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT :: VkDiscardRectangleModeEXT
+pattern VK_DISCARD_RECTANGLE_MODE_EXCLUSIVE_EXT = VkDiscardRectangleModeEXT 1
+-- ** VkPipelineDiscardRectangleStateCreateFlagsEXT
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineDiscardRectangleStateCreateFlagsEXT where
+  
+  showsPrec p (VkPipelineDiscardRectangleStateCreateFlagsEXT x) = showParen (p >= 11) (showString "VkPipelineDiscardRectangleStateCreateFlagsEXT " . showsPrec 11 x)
+
+instance Read VkPipelineDiscardRectangleStateCreateFlagsEXT where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineDiscardRectangleStateCreateFlagsEXT")
+                        v <- step readPrec
+                        pure (VkPipelineDiscardRectangleStateCreateFlagsEXT v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkDynamicState" "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT"
+pattern VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT :: VkDynamicState
+pattern VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = VkDynamicState 1000099000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT = VkStructureType 1000099000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT = VkStructureType 1000099001
+-- No documentation found for TopLevel "VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION"
+pattern VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DISCARD_RECTANGLES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME"
+pattern VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DISCARD_RECTANGLES_EXTENSION_NAME = "VK_EXT_discard_rectangles"
+-- | vkCmdSetDiscardRectangleEXT - Set discard rectangles dynamically
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @commandBuffer@ is the command buffer into which the command will be
+--     recorded.
+--
+-- -   @firstDiscardRectangle@ is the index of the first discard rectangle
+--     whose state is updated by the command.
+--
+-- -   @discardRectangleCount@ is the number of discard rectangles whose
+--     state are updated by the command.
+--
+-- -   @pDiscardRectangles@ is a pointer to an array of
+--     'Graphics.Vulkan.Core10.Pipeline.VkRect2D' structures specifying
+--     discard rectangles.
+--
+-- = Description
+-- #_description#
+--
+-- The discard rectangle taken from element i of @pDiscardRectangles@
+-- replace the current state for the discard rectangle index
+-- @firstDiscardRectangle@ + i, for i in [0, @discardRectangleCount@).
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT@ dynamic state enabled
+--
+-- -   The sum of @firstDiscardRectangle@ and @discardRectangleCount@
+--     /must/ be less than or equal to
+--     'VkPhysicalDeviceDiscardRectanglePropertiesEXT'::@maxDiscardRectangles@
+--
+-- -   The @x@ and @y@ member of @offset@ in each
+--     'Graphics.Vulkan.Core10.Pipeline.VkRect2D' element of
+--     @pDiscardRectangles@ /must/ be greater than or equal to @0@
+--
+-- -   Evaluation of (@offset.x@ + @extent.width@) in each
+--     'Graphics.Vulkan.Core10.Pipeline.VkRect2D' element of
+--     @pDiscardRectangles@ /must/ not cause a signed integer addition
+--     overflow
+--
+-- -   Evaluation of (@offset.y@ + @extent.height@) in each
+--     'Graphics.Vulkan.Core10.Pipeline.VkRect2D' element of
+--     @pDiscardRectangles@ /must/ not cause a signed integer addition
+--     overflow
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pDiscardRectangles@ /must/ be a valid pointer to an array of
+--     @discardRectangleCount@ @VkRect2D@ structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <#commandbuffers-lifecycle recording state>
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics operations
+--
+-- -   @discardRectangleCount@ /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 "vkCmdSetDiscardRectangleEXT" vkCmdSetDiscardRectangleEXT :: ("commandBuffer" ::: VkCommandBuffer) -> ("firstDiscardRectangle" ::: Word32) -> ("discardRectangleCount" ::: Word32) -> ("pDiscardRectangles" ::: Ptr VkRect2D) -> IO ()
+-- | VkPhysicalDeviceDiscardRectanglePropertiesEXT - Structure describing
+-- 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.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT@
+--
+-- If the @VkPhysicalDeviceDiscardRectanglePropertiesEXT@ 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
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPhysicalDeviceDiscardRectanglePropertiesEXT = VkPhysicalDeviceDiscardRectanglePropertiesEXT
+  { -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceDiscardRectanglePropertiesEXT" "vkMaxDiscardRectangles"
+  vkMaxDiscardRectangles :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceDiscardRectanglePropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceDiscardRectanglePropertiesEXT <$> peek (ptr `plusPtr` 0)
+                                                           <*> peek (ptr `plusPtr` 8)
+                                                           <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceDiscardRectanglePropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceDiscardRectanglePropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkMaxDiscardRectangles (poked :: VkPhysicalDeviceDiscardRectanglePropertiesEXT))
+-- | VkPipelineDiscardRectangleStateCreateInfoEXT - Structure specifying
+-- discard rectangle
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @discardRectangleCount@ /must/ be between @0@ and
+--     @VkPhysicalDeviceDiscardRectanglePropertiesEXT@::@maxDiscardRectangles@,
+--     inclusive
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @discardRectangleMode@ /must/ be a valid 'VkDiscardRectangleModeEXT'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkFlags"
+  vkFlags :: VkPipelineDiscardRectangleStateCreateFlagsEXT
+  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkDiscardRectangleMode"
+  vkDiscardRectangleMode :: VkDiscardRectangleModeEXT
+  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkDiscardRectangleCount"
+  vkDiscardRectangleCount :: Word32
+  , -- No documentation found for Nested "VkPipelineDiscardRectangleStateCreateInfoEXT" "vkPDiscardRectangles"
+  vkPDiscardRectangles :: Ptr VkRect2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineDiscardRectangleStateCreateInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkPipelineDiscardRectangleStateCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                          <*> peek (ptr `plusPtr` 8)
+                                                          <*> peek (ptr `plusPtr` 16)
+                                                          <*> peek (ptr `plusPtr` 20)
+                                                          <*> peek (ptr `plusPtr` 24)
+                                                          <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineDiscardRectangleStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineDiscardRectangleStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineDiscardRectangleStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 20) (vkDiscardRectangleMode (poked :: VkPipelineDiscardRectangleStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkDiscardRectangleCount (poked :: VkPipelineDiscardRectangleStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPDiscardRectangles (poked :: VkPipelineDiscardRectangleStateCreateInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_display_control.hs
@@ -0,0 +1,562 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_display_control
+  ( VkDisplayPowerStateEXT(..)
+  , pattern VK_DISPLAY_POWER_STATE_OFF_EXT
+  , pattern VK_DISPLAY_POWER_STATE_SUSPEND_EXT
+  , pattern VK_DISPLAY_POWER_STATE_ON_EXT
+  , VkDeviceEventTypeEXT(..)
+  , pattern VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT
+  , VkDisplayEventTypeEXT(..)
+  , pattern VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT
+  , pattern VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT
+  , pattern VK_EXT_DISPLAY_CONTROL_SPEC_VERSION
+  , pattern VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME
+  , vkDisplayPowerControlEXT
+  , vkRegisterDeviceEventEXT
+  , vkRegisterDisplayEventEXT
+  , vkGetSwapchainCounterEXT
+  , VkDisplayPowerInfoEXT(..)
+  , VkDeviceEventInfoEXT(..)
+  , VkDisplayEventInfoEXT(..)
+  , VkSwapchainCounterCreateInfoEXT(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkFence
+  )
+import Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
+  ( VkSurfaceCounterFlagsEXT
+  , VkSurfaceCounterFlagBitsEXT(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_display
+  ( VkDisplayKHR
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_swapchain
+  ( VkSwapchainKHR
+  )
+
+
+-- ** VkDisplayPowerStateEXT
+
+-- | VkDisplayPowerStateEXT - Possible power states for a display
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayPowerInfoEXT'
+newtype VkDisplayPowerStateEXT = VkDisplayPowerStateEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDisplayPowerStateEXT where
+  showsPrec _ VK_DISPLAY_POWER_STATE_OFF_EXT = showString "VK_DISPLAY_POWER_STATE_OFF_EXT"
+  showsPrec _ VK_DISPLAY_POWER_STATE_SUSPEND_EXT = showString "VK_DISPLAY_POWER_STATE_SUSPEND_EXT"
+  showsPrec _ VK_DISPLAY_POWER_STATE_ON_EXT = showString "VK_DISPLAY_POWER_STATE_ON_EXT"
+  showsPrec p (VkDisplayPowerStateEXT x) = showParen (p >= 11) (showString "VkDisplayPowerStateEXT " . showsPrec 11 x)
+
+instance Read VkDisplayPowerStateEXT where
+  readPrec = parens ( choose [ ("VK_DISPLAY_POWER_STATE_OFF_EXT",     pure VK_DISPLAY_POWER_STATE_OFF_EXT)
+                             , ("VK_DISPLAY_POWER_STATE_SUSPEND_EXT", pure VK_DISPLAY_POWER_STATE_SUSPEND_EXT)
+                             , ("VK_DISPLAY_POWER_STATE_ON_EXT",      pure VK_DISPLAY_POWER_STATE_ON_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDisplayPowerStateEXT")
+                        v <- step readPrec
+                        pure (VkDisplayPowerStateEXT v)
+                        )
+                    )
+
+-- | @VK_DISPLAY_POWER_STATE_OFF_EXT@ specifies that the display is powered
+-- down.
+pattern VK_DISPLAY_POWER_STATE_OFF_EXT :: VkDisplayPowerStateEXT
+pattern VK_DISPLAY_POWER_STATE_OFF_EXT = VkDisplayPowerStateEXT 0
+
+-- | @VK_DISPLAY_POWER_STATE_SUSPEND_EXT@ specifies that the display is put
+-- into a low power mode, from which it /may/ be able to transition back to
+-- @VK_DISPLAY_POWER_STATE_ON_EXT@ more quickly than if it were in
+-- @VK_DISPLAY_POWER_STATE_OFF_EXT@. This state /may/ be the same as
+-- @VK_DISPLAY_POWER_STATE_OFF_EXT@.
+pattern VK_DISPLAY_POWER_STATE_SUSPEND_EXT :: VkDisplayPowerStateEXT
+pattern VK_DISPLAY_POWER_STATE_SUSPEND_EXT = VkDisplayPowerStateEXT 1
+
+-- | @VK_DISPLAY_POWER_STATE_ON_EXT@ specifies that the display is powered
+-- on.
+pattern VK_DISPLAY_POWER_STATE_ON_EXT :: VkDisplayPowerStateEXT
+pattern VK_DISPLAY_POWER_STATE_ON_EXT = VkDisplayPowerStateEXT 2
+-- ** VkDeviceEventTypeEXT
+
+-- | VkDeviceEventTypeEXT - Events that can occur on a device object
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDeviceEventInfoEXT'
+newtype VkDeviceEventTypeEXT = VkDeviceEventTypeEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDeviceEventTypeEXT where
+  showsPrec _ VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = showString "VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT"
+  showsPrec p (VkDeviceEventTypeEXT x) = showParen (p >= 11) (showString "VkDeviceEventTypeEXT " . showsPrec 11 x)
+
+instance Read VkDeviceEventTypeEXT where
+  readPrec = parens ( choose [ ("VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT", pure VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDeviceEventTypeEXT")
+                        v <- step readPrec
+                        pure (VkDeviceEventTypeEXT v)
+                        )
+                    )
+
+-- | @VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT@ specifies that the fence is
+-- signaled when a display is plugged into or unplugged from the specified
+-- device. Applications /can/ use this notification to determine when they
+-- need to re-enumerate the available displays on a device.
+pattern VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT :: VkDeviceEventTypeEXT
+pattern VK_DEVICE_EVENT_TYPE_DISPLAY_HOTPLUG_EXT = VkDeviceEventTypeEXT 0
+-- ** VkDisplayEventTypeEXT
+
+-- | VkDisplayEventTypeEXT - Events that can occur on a display object
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayEventInfoEXT'
+newtype VkDisplayEventTypeEXT = VkDisplayEventTypeEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkDisplayEventTypeEXT where
+  showsPrec _ VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = showString "VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT"
+  showsPrec p (VkDisplayEventTypeEXT x) = showParen (p >= 11) (showString "VkDisplayEventTypeEXT " . showsPrec 11 x)
+
+instance Read VkDisplayEventTypeEXT where
+  readPrec = parens ( choose [ ("VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT", pure VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDisplayEventTypeEXT")
+                        v <- step readPrec
+                        pure (VkDisplayEventTypeEXT v)
+                        )
+                    )
+
+-- | @VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT@ specifies that the fence is
+-- signaled when the first pixel of the next display refresh cycle leaves
+-- the display engine for the display.
+pattern VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT :: VkDisplayEventTypeEXT
+pattern VK_DISPLAY_EVENT_TYPE_FIRST_PIXEL_OUT_EXT = VkDisplayEventTypeEXT 0
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DISPLAY_POWER_INFO_EXT = VkStructureType 1000091000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_EVENT_INFO_EXT = VkStructureType 1000091001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DISPLAY_EVENT_INFO_EXT = VkStructureType 1000091002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT = VkStructureType 1000091003
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_CONTROL_SPEC_VERSION"
+pattern VK_EXT_DISPLAY_CONTROL_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DISPLAY_CONTROL_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME"
+pattern VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DISPLAY_CONTROL_EXTENSION_NAME = "VK_EXT_display_control"
+-- | vkDisplayPowerControlEXT - Set the power state of a display
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is a logical device associated with @display@.
+--
+-- -   @display@ is the display whose power state is modified.
+--
+-- -   @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
+--
+-- -   @display@ /must/ be a valid @VkDisplayKHR@ handle
+--
+-- -   @pDisplayPowerInfo@ /must/ be a valid pointer to a valid
+--     @VkDisplayPowerInfoEXT@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
+-- 'VkDisplayPowerInfoEXT'
+foreign import ccall "vkDisplayPowerControlEXT" vkDisplayPowerControlEXT :: ("device" ::: VkDevice) -> ("display" ::: VkDisplayKHR) -> ("pDisplayPowerInfo" ::: Ptr VkDisplayPowerInfoEXT) -> IO VkResult
+-- | vkRegisterDeviceEventEXT - Signal a fence when a device event occurs
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is a logical device on which the event /may/ occur.
+--
+-- -   @pDeviceEventInfo@ is a pointer to an instance of the
+--     'VkDeviceEventInfoEXT' structure describing the event of interest to
+--     the application.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pDeviceEventInfo@ /must/ be a valid pointer to a valid
+--     @VkDeviceEventInfoEXT@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pFence@ /must/ be a valid pointer to a @VkFence@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDeviceEventInfoEXT', 'Graphics.Vulkan.Core10.Queue.VkFence'
+foreign import ccall "vkRegisterDeviceEventEXT" vkRegisterDeviceEventEXT :: ("device" ::: VkDevice) -> ("pDeviceEventInfo" ::: Ptr VkDeviceEventInfoEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pFence" ::: Ptr VkFence) -> IO VkResult
+-- | vkRegisterDisplayEventEXT - Signal a fence when a display event occurs
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is a logical device associated with @display@
+--
+-- -   @display@ is the display on which the event /may/ occur.
+--
+-- -   @pDisplayEventInfo@ is a pointer to an instance of the
+--     'VkDisplayEventInfoEXT' structure describing the event of interest
+--     to the application.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @display@ /must/ be a valid @VkDisplayKHR@ handle
+--
+-- -   @pDisplayEventInfo@ /must/ be a valid pointer to a valid
+--     @VkDisplayEventInfoEXT@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pFence@ /must/ be a valid pointer to a @VkFence@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDisplayEventInfoEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplayKHR',
+-- 'Graphics.Vulkan.Core10.Queue.VkFence'
+foreign import ccall "vkRegisterDisplayEventEXT" vkRegisterDisplayEventEXT :: ("device" ::: VkDevice) -> ("display" ::: VkDisplayKHR) -> ("pDisplayEventInfo" ::: Ptr VkDisplayEventInfoEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pFence" ::: Ptr VkFence) -> IO VkResult
+-- | vkGetSwapchainCounterEXT - Query the current value of a surface counter
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the @VkDevice@ associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain from which to query the counter value.
+--
+-- -   @counter@ is the counter to query.
+--
+-- -   @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@.
+--
+-- == Valid Usage
+--
+-- -   One or more present commands on @swapchain@ /must/ have been
+--     processed by the presentation engine.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   @counter@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCounterFlagBitsEXT'
+--     value
+--
+-- -   @pCounterValue@ /must/ be a valid pointer to a @uint64_t@ value
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'
+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@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDisplayPowerInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDisplayPowerInfoEXT" "vkPowerState"
+  vkPowerState :: VkDisplayPowerStateEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayPowerInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDisplayPowerInfoEXT <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplayPowerInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayPowerInfoEXT))
+                *> 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@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceEventInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceEventInfoEXT" "vkDeviceEvent"
+  vkDeviceEvent :: VkDeviceEventTypeEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceEventInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDeviceEventInfoEXT <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceEventInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceEventInfoEXT))
+                *> 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@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDisplayEventInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDisplayEventInfoEXT" "vkDisplayEvent"
+  vkDisplayEvent :: VkDisplayEventTypeEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayEventInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDisplayEventInfoEXT <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 8)
+                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplayEventInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayEventInfoEXT))
+                *> 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
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'::@surface@,
+--     as reported by
+--     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.vkGetPhysicalDeviceSurfaceCapabilities2EXT'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT@
+--
+-- -   @surfaceCounters@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCounterFlagBitsEXT'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSwapchainCounterCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSwapchainCounterCreateInfoEXT" "vkSurfaceCounters"
+  vkSurfaceCounters :: VkSurfaceCounterFlagsEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSwapchainCounterCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSwapchainCounterCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSwapchainCounterCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSwapchainCounterCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkSurfaceCounters (poked :: VkSwapchainCounterCreateInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_display_surface_counter.hs
@@ -0,0 +1,295 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
+  ( VkSurfaceCounterFlagBitsEXT(..)
+  , pattern VK_SURFACE_COUNTER_VBLANK_EXT
+  , pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
+  , pattern VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION
+  , pattern VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME
+  , pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT
+  , vkGetPhysicalDeviceSurfaceCapabilities2EXT
+  , VkSurfaceCapabilities2EXT(..)
+  , VkSurfaceCounterFlagsEXT
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageUsageFlags
+  , VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkExtent2D(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkCompositeAlphaFlagsKHR
+  , VkSurfaceTransformFlagBitsKHR(..)
+  , VkSurfaceTransformFlagsKHR
+  , VkSurfaceKHR
+  )
+
+
+-- ** VkSurfaceCounterFlagBitsEXT
+
+-- | VkSurfaceCounterFlagBitsEXT - Surface-relative counter types
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSurfaceCounterFlagsEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkGetSwapchainCounterEXT'
+newtype VkSurfaceCounterFlagBitsEXT = VkSurfaceCounterFlagBitsEXT VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSurfaceCounterFlagBitsEXT where
+  showsPrec _ VK_SURFACE_COUNTER_VBLANK_EXT = showString "VK_SURFACE_COUNTER_VBLANK_EXT"
+  showsPrec p (VkSurfaceCounterFlagBitsEXT x) = showParen (p >= 11) (showString "VkSurfaceCounterFlagBitsEXT " . showsPrec 11 x)
+
+instance Read VkSurfaceCounterFlagBitsEXT where
+  readPrec = parens ( choose [ ("VK_SURFACE_COUNTER_VBLANK_EXT", pure VK_SURFACE_COUNTER_VBLANK_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSurfaceCounterFlagBitsEXT")
+                        v <- step readPrec
+                        pure (VkSurfaceCounterFlagBitsEXT v)
+                        )
+                    )
+
+-- | @VK_SURFACE_COUNTER_VBLANK_EXT@ specifies a counter incrementing once
+-- every time a vertical blanking period occurs on the display associated
+-- with the surface.
+pattern VK_SURFACE_COUNTER_VBLANK_EXT :: VkSurfaceCounterFlagBitsEXT
+pattern VK_SURFACE_COUNTER_VBLANK_EXT = VkSurfaceCounterFlagBitsEXT 0x00000001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT"
+pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT = VkStructureType 1000090000
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION"
+pattern VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_DISPLAY_SURFACE_COUNTER_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME"
+pattern VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_DISPLAY_SURFACE_COUNTER_EXTENSION_NAME = "VK_EXT_display_surface_counter"
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT"
+pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES2_EXT = VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT
+-- | vkGetPhysicalDeviceSurfaceCapabilities2EXT - Query surface capabilities
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @surface@ is the surface that will be associated with the swapchain.
+--
+-- -   @pSurfaceCapabilities@ is a pointer to an instance of the
+--     'VkSurfaceCapabilities2EXT' structure in which the capabilities are
+--     returned.
+--
+-- = Description
+-- #_description#
+--
+-- @vkGetPhysicalDeviceSurfaceCapabilities2EXT@ behaves similarly to
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
+-- with the ability to return extended information by adding extension
+-- structures to the @pNext@ chain of its @pSurfaceCapabilities@ parameter.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
+--     @VkSurfaceCapabilities2EXT@ structure
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkSurfaceCapabilities2EXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkGetPhysicalDeviceSurfaceCapabilities2EXT" vkGetPhysicalDeviceSurfaceCapabilities2EXT :: ("physicalDevice" ::: VkPhysicalDevice) -> ("surface" ::: VkSurfaceKHR) -> ("pSurfaceCapabilities" ::: Ptr VkSurfaceCapabilities2EXT) -> IO VkResult
+-- | VkSurfaceCapabilities2EXT - Structure describing capabilities of a
+-- surface
+--
+-- = Members
+-- #_members#
+--
+-- All members of @VkSurfaceCapabilities2EXT@ are identical to the
+-- corresponding members of
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR'
+-- where one exists. The remaining members are:
+--
+-- = Description
+-- #_description#
+--
+-- -   @sType@ is the type of this structure.
+--
+-- -   @pNext@ is @NULL@ or a pointer to an extension-specific structure.
+--
+-- -   @supportedSurfaceCounters@ is a bitmask of
+--     'VkSurfaceCounterFlagBitsEXT' indicating the supported surface
+--     counter types.
+--
+-- == Valid Usage
+--
+-- -   @supportedSurfaceCounters@ /must/ not include
+--     @VK_SURFACE_COUNTER_VBLANK_EXT@ unless the surface queried is a
+--     <{html_spec_relative}#wsi-display-surfaces display surface>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkCompositeAlphaFlagsKHR',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'VkSurfaceCounterFlagsEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagsKHR',
+-- 'vkGetPhysicalDeviceSurfaceCapabilities2EXT'
+data VkSurfaceCapabilities2EXT = VkSurfaceCapabilities2EXT
+  { -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMinImageCount"
+  vkMinImageCount :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMaxImageCount"
+  vkMaxImageCount :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkCurrentExtent"
+  vkCurrentExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMinImageExtent"
+  vkMinImageExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMaxImageExtent"
+  vkMaxImageExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkMaxImageArrayLayers"
+  vkMaxImageArrayLayers :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedTransforms"
+  vkSupportedTransforms :: VkSurfaceTransformFlagsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkCurrentTransform"
+  vkCurrentTransform :: VkSurfaceTransformFlagBitsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedCompositeAlpha"
+  vkSupportedCompositeAlpha :: VkCompositeAlphaFlagsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedUsageFlags"
+  vkSupportedUsageFlags :: VkImageUsageFlags
+  , -- No documentation found for Nested "VkSurfaceCapabilities2EXT" "vkSupportedSurfaceCounters"
+  vkSupportedSurfaceCounters :: VkSurfaceCounterFlagsEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSurfaceCapabilities2EXT where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkSurfaceCapabilities2EXT <$> 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` 52)
+                                       <*> peek (ptr `plusPtr` 56)
+                                       <*> peek (ptr `plusPtr` 60)
+                                       <*> peek (ptr `plusPtr` 64)
+                                       <*> peek (ptr `plusPtr` 68)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 16) (vkMinImageCount (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 20) (vkMaxImageCount (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 24) (vkCurrentExtent (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 32) (vkMinImageExtent (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 40) (vkMaxImageExtent (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 48) (vkMaxImageArrayLayers (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 52) (vkSupportedTransforms (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 56) (vkCurrentTransform (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 60) (vkSupportedCompositeAlpha (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 64) (vkSupportedUsageFlags (poked :: VkSurfaceCapabilities2EXT))
+                *> poke (ptr `plusPtr` 68) (vkSupportedSurfaceCounters (poked :: VkSurfaceCapabilities2EXT))
+-- | 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'
+type VkSurfaceCounterFlagsEXT = VkSurfaceCounterFlagBitsEXT
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_dma_buf.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_dma_buf.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_dma_buf.hs
@@ -0,0 +1,30 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf
+  ( pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT
+  , pattern VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION
+  , pattern VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT = VkExternalMemoryHandleTypeFlagBits 0x00000200
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION"
+pattern VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_EXTERNAL_MEMORY_DMA_BUF_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME"
+pattern VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_EXTERNAL_MEMORY_DMA_BUF_EXTENSION_NAME = "VK_EXT_external_memory_dma_buf"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_external_memory_host.hs
@@ -0,0 +1,293 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_external_memory_host
+  ( pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT
+  , pattern VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION
+  , pattern VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME
+  , vkGetMemoryHostPointerPropertiesEXT
+  , VkImportMemoryHostPointerInfoEXT(..)
+  , VkMemoryHostPointerPropertiesEXT(..)
+  , VkPhysicalDeviceExternalMemoryHostPropertiesEXT(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkDevice
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = VkStructureType 1000178000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = VkStructureType 1000178001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = VkStructureType 1000178002
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT = VkExternalMemoryHandleTypeFlagBits 0x00000080
+-- No documentation found for Nested "VkExternalMemoryHandleTypeFlagBits" "VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT = VkExternalMemoryHandleTypeFlagBits 0x00000100
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION"
+pattern VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_EXTERNAL_MEMORY_HOST_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME"
+pattern VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_EXTERNAL_MEMORY_HOST_EXTENSION_NAME = "VK_EXT_external_memory_host"
+-- | vkGetMemoryHostPointerPropertiesEXT - Get properties of external memory
+-- host pointer
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that will be importing
+--     @pHostPointer@.
+--
+-- -   @handleType@ is the type of the handle @pHostPointer@.
+--
+-- -   @pHostPointer@ is the host pointer to import from.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT@ or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT@
+--
+-- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of
+--     @VkPhysicalDeviceExternalMemoryHostPropertiesEXT@::@minImportedHostPointerAlignment@
+--
+-- -   If @handleType@ is
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT@,
+--     @pHostPointer@ /must/ be a pointer to host memory
+--
+-- -   If @handleType@ is
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT@,
+--     @pHostPointer@ /must/ be a pointer to host mapped foreign memory
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- -   @pMemoryHostPointerProperties@ /must/ be a valid pointer to a
+--     @VkMemoryHostPointerPropertiesEXT@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkMemoryHostPointerPropertiesEXT'
+foreign import ccall "vkGetMemoryHostPointerPropertiesEXT" vkGetMemoryHostPointerPropertiesEXT :: ("device" ::: VkDevice) -> ("handleType" ::: VkExternalMemoryHandleTypeFlagBits) -> ("pHostPointer" ::: Ptr ()) -> ("pMemoryHostPointerProperties" ::: Ptr VkMemoryHostPointerPropertiesEXT) -> IO VkResult
+-- | 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>.
+--
+-- Applications /can/ import the same underlying memory into multiple
+-- instances of Vulkan and multiple times into a given Vulkan instance.
+-- However, implementations /may/ fail to import the same underlying memory
+-- multiple times into a given physical device due to platform constraints.
+--
+-- Importing memory from a particular host pointer /may/ not be possible
+-- due to additional platform-specific restrictions beyond the scope of
+-- this specification in which case the implementation /must/ fail the
+-- memory import operation with the error code
+-- @VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR@.
+--
+-- The application /must/ ensure that the imported memory range remains
+-- valid and accessible for the lifetime of the imported memory object.
+--
+-- == Valid Usage
+--
+-- -   If @handleType@ is not @0@, it /must/ be supported for import, as
+--     reported in
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities.VkExternalMemoryPropertiesKHR'
+--
+-- -   If @handleType@ is not @0@, it /must/ be
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT@ or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT@
+--
+-- -   @pHostPointer@ /must/ be a pointer aligned to an integer multiple of
+--     @VkPhysicalDeviceExternalMemoryHostPropertiesEXT@::@minImportedHostPointerAlignment@
+--
+-- -   If @handleType@ is
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_ALLOCATION_BIT_EXT@,
+--     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of
+--     bytes of host memory, where @allocationSize@ is the member of the
+--     @VkMemoryAllocateInfo@ structure this structure is chained to
+--
+-- -   If @handleType@ is
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_HOST_MAPPED_FOREIGN_MEMORY_BIT_EXT@,
+--     @pHostPointer@ /must/ be a pointer to @allocationSize@ number of
+--     bytes of host mapped foreign memory, where @allocationSize@ is the
+--     member of the @VkMemoryAllocateInfo@ structure this structure is
+--     chained to
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT@
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportMemoryHostPointerInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportMemoryHostPointerInfoEXT" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagBits
+  , -- No documentation found for Nested "VkImportMemoryHostPointerInfoEXT" "vkPHostPointer"
+  vkPHostPointer :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportMemoryHostPointerInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkImportMemoryHostPointerInfoEXT <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+                                              <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImportMemoryHostPointerInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportMemoryHostPointerInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkImportMemoryHostPointerInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkPHostPointer (poked :: VkImportMemoryHostPointerInfoEXT))
+-- No documentation found for TopLevel "VkMemoryHostPointerPropertiesEXT"
+data VkMemoryHostPointerPropertiesEXT = VkMemoryHostPointerPropertiesEXT
+  { -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryHostPointerPropertiesEXT" "vkMemoryTypeBits"
+  vkMemoryTypeBits :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryHostPointerPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryHostPointerPropertiesEXT <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryHostPointerPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryHostPointerPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryHostPointerPropertiesEXT))
+-- | VkPhysicalDeviceExternalMemoryHostPropertiesEXT - Structure describing
+-- external memory host pointer limits that can be supported by an
+-- 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
+--     that /can/ be imported to a Vulkan memory object.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT@
+--
+-- If the @VkPhysicalDeviceExternalMemoryHostPropertiesEXT@ structure is
+-- included in the @pNext@ chain of
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2.VkPhysicalDeviceProperties2KHR',
+-- 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceExternalMemoryHostPropertiesEXT" "vkMinImportedHostPointerAlignment"
+  vkMinImportedHostPointerAlignment :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceExternalMemoryHostPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceExternalMemoryHostPropertiesEXT <$> peek (ptr `plusPtr` 0)
+                                                             <*> peek (ptr `plusPtr` 8)
+                                                             <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceExternalMemoryHostPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceExternalMemoryHostPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkMinImportedHostPointerAlignment (poked :: VkPhysicalDeviceExternalMemoryHostPropertiesEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_global_priority.hs
@@ -0,0 +1,175 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_global_priority
+  ( VkQueueGlobalPriorityEXT(..)
+  , pattern VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT
+  , pattern VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT
+  , pattern VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT
+  , pattern VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT
+  , pattern VK_ERROR_NOT_PERMITTED_EXT
+  , pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT
+  , pattern VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION
+  , pattern VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME
+  , VkDeviceQueueGlobalPriorityCreateInfoEXT(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  )
+
+
+-- ** VkQueueGlobalPriorityEXT
+
+-- | VkQueueGlobalPriorityEXT - Values specifying a system-wide queue
+-- 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.
+--
+-- -   @VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT@ is below the system default.
+--     Useful for non-interactive tasks.
+--
+-- -   @VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT@ is the system default
+--     priority.
+--
+-- -   @VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT@ is above the system default.
+--
+-- -   @VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT@ is the highest priority.
+--     Useful for critical tasks.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDeviceQueueGlobalPriorityCreateInfoEXT'
+newtype VkQueueGlobalPriorityEXT = VkQueueGlobalPriorityEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkQueueGlobalPriorityEXT where
+  showsPrec _ VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = showString "VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT"
+  showsPrec _ VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = showString "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT"
+  showsPrec _ VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = showString "VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT"
+  showsPrec _ VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = showString "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT"
+  showsPrec p (VkQueueGlobalPriorityEXT x) = showParen (p >= 11) (showString "VkQueueGlobalPriorityEXT " . showsPrec 11 x)
+
+instance Read VkQueueGlobalPriorityEXT where
+  readPrec = parens ( choose [ ("VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT",      pure VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT)
+                             , ("VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT",   pure VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT)
+                             , ("VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT",     pure VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT)
+                             , ("VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT", pure VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkQueueGlobalPriorityEXT")
+                        v <- step readPrec
+                        pure (VkQueueGlobalPriorityEXT v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkQueueGlobalPriorityEXT" "VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT"
+pattern VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT :: VkQueueGlobalPriorityEXT
+pattern VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VkQueueGlobalPriorityEXT 128
+
+-- No documentation found for Nested "VkQueueGlobalPriorityEXT" "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT"
+pattern VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT :: VkQueueGlobalPriorityEXT
+pattern VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VkQueueGlobalPriorityEXT 256
+
+-- No documentation found for Nested "VkQueueGlobalPriorityEXT" "VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT"
+pattern VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT :: VkQueueGlobalPriorityEXT
+pattern VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VkQueueGlobalPriorityEXT 512
+
+-- No documentation found for Nested "VkQueueGlobalPriorityEXT" "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT"
+pattern VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT :: VkQueueGlobalPriorityEXT
+pattern VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VkQueueGlobalPriorityEXT 1024
+-- No documentation found for Nested "VkResult" "VK_ERROR_NOT_PERMITTED_EXT"
+pattern VK_ERROR_NOT_PERMITTED_EXT :: VkResult
+pattern VK_ERROR_NOT_PERMITTED_EXT = VkResult (-1000174001)
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VkStructureType 1000174000
+-- No documentation found for TopLevel "VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION"
+pattern VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION = 2
+-- No documentation found for TopLevel "VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME"
+pattern VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME = "VK_EXT_global_priority"
+-- | VkDeviceQueueGlobalPriorityCreateInfoEXT - Specify a system wide
+-- priority
+--
+-- = Description
+-- #_description#
+--
+-- A queue created without specifying
+-- @VkDeviceQueueGlobalPriorityCreateInfoEXT@ will default to
+-- @VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceQueueGlobalPriorityCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceQueueGlobalPriorityCreateInfoEXT" "vkGlobalPriority"
+  vkGlobalPriority :: VkQueueGlobalPriorityEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceQueueGlobalPriorityCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDeviceQueueGlobalPriorityCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                      <*> peek (ptr `plusPtr` 8)
+                                                      <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceQueueGlobalPriorityCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceQueueGlobalPriorityCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkGlobalPriority (poked :: VkDeviceQueueGlobalPriorityCreateInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_hdr_metadata.hs
@@ -0,0 +1,189 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata
+  ( pattern VK_STRUCTURE_TYPE_HDR_METADATA_EXT
+  , pattern VK_EXT_HDR_METADATA_SPEC_VERSION
+  , pattern VK_EXT_HDR_METADATA_EXTENSION_NAME
+  , vkSetHdrMetadataEXT
+  , VkXYColorEXT(..)
+  , VkHdrMetadataEXT(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_swapchain
+  ( VkSwapchainKHR
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_HDR_METADATA_EXT"
+pattern VK_STRUCTURE_TYPE_HDR_METADATA_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_HDR_METADATA_EXT = VkStructureType 1000105000
+-- No documentation found for TopLevel "VK_EXT_HDR_METADATA_SPEC_VERSION"
+pattern VK_EXT_HDR_METADATA_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_HDR_METADATA_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_HDR_METADATA_EXTENSION_NAME"
+pattern VK_EXT_HDR_METADATA_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_HDR_METADATA_EXTENSION_NAME = "VK_EXT_hdr_metadata"
+-- | vkSetHdrMetadataEXT - function to set Hdr metadata
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device where the swapchain(s) were created.
+--
+-- -   @swapchainCount@ is the number of swapchains included in
+--     @pSwapchains@.
+--
+-- -   @pSwapchains@ is a pointer to the array of @swapchainCount@
+--     @VkSwapchainKHR@ handles.
+--
+-- -   @pMetadata@ is a pointer to the array of @swapchainCount@
+--     @VkHdrMetadataEXT@ structures.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pSwapchains@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid @VkSwapchainKHR@ handles
+--
+-- -   @pMetadata@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid @VkHdrMetadataEXT@ structures
+--
+-- -   @swapchainCount@ /must/ be greater than @0@
+--
+-- -   Both of @device@, and the elements of @pSwapchains@ /must/ have been
+--     created, allocated, or retrieved from the same @VkInstance@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkHdrMetadataEXT',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'
+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"
+  vkX :: CFloat
+  , -- No documentation found for Nested "VkXYColorEXT" "vkY"
+  vkY :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkXYColorEXT where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkXYColorEXT <$> peek (ptr `plusPtr` 0)
+                          <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkXYColorEXT))
+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkXYColorEXT))
+-- | VkHdrMetadataEXT - structure to specify Hdr metadata
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- The validity and use of this data is outside the scope of Vulkan and
+-- 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkDisplayPrimaryRed"
+  vkDisplayPrimaryRed :: VkXYColorEXT
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkDisplayPrimaryGreen"
+  vkDisplayPrimaryGreen :: VkXYColorEXT
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkDisplayPrimaryBlue"
+  vkDisplayPrimaryBlue :: VkXYColorEXT
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkWhitePoint"
+  vkWhitePoint :: VkXYColorEXT
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMaxLuminance"
+  vkMaxLuminance :: CFloat
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMinLuminance"
+  vkMinLuminance :: CFloat
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMaxContentLightLevel"
+  vkMaxContentLightLevel :: CFloat
+  , -- No documentation found for Nested "VkHdrMetadataEXT" "vkMaxFrameAverageLightLevel"
+  vkMaxFrameAverageLightLevel :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkHdrMetadataEXT where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkHdrMetadataEXT <$> 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` 52)
+                              <*> peek (ptr `plusPtr` 56)
+                              <*> peek (ptr `plusPtr` 60)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 16) (vkDisplayPrimaryRed (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 24) (vkDisplayPrimaryGreen (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 32) (vkDisplayPrimaryBlue (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 40) (vkWhitePoint (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 48) (vkMaxLuminance (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 52) (vkMinLuminance (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 56) (vkMaxContentLightLevel (poked :: VkHdrMetadataEXT))
+                *> poke (ptr `plusPtr` 60) (vkMaxFrameAverageLightLevel (poked :: VkHdrMetadataEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_post_depth_coverage.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage
+  ( pattern VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION
+  , pattern VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION"
+pattern VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_POST_DEPTH_COVERAGE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME"
+pattern VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_POST_DEPTH_COVERAGE_EXTENSION_NAME = "VK_EXT_post_depth_coverage"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_queue_family_foreign.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_queue_family_foreign.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_queue_family_foreign.hs
@@ -0,0 +1,31 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign
+  ( pattern VK_QUEUE_FAMILY_FOREIGN_EXT
+  , pattern VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION
+  , pattern VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+
+
+
+
+
+-- No documentation found for Nested "Word32" "VK_QUEUE_FAMILY_FOREIGN_EXT"
+pattern VK_QUEUE_FAMILY_FOREIGN_EXT :: Word32
+pattern VK_QUEUE_FAMILY_FOREIGN_EXT = 0xfffffffd
+-- No documentation found for TopLevel "VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION"
+pattern VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_QUEUE_FAMILY_FOREIGN_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME"
+pattern VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_QUEUE_FAMILY_FOREIGN_EXTENSION_NAME = "VK_EXT_queue_family_foreign"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_sample_locations.hs
@@ -0,0 +1,636 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_sample_locations
+  ( pattern VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT
+  , pattern VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT
+  , pattern VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT
+  , pattern VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION
+  , pattern VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME
+  , vkCmdSetSampleLocationsEXT
+  , vkGetPhysicalDeviceMultisamplePropertiesEXT
+  , VkSampleLocationEXT(..)
+  , VkSampleLocationsInfoEXT(..)
+  , VkAttachmentSampleLocationsEXT(..)
+  , VkSubpassSampleLocationsEXT(..)
+  , VkRenderPassSampleLocationsBeginInfoEXT(..)
+  , VkPipelineSampleLocationsStateCreateInfoEXT(..)
+  , VkPhysicalDeviceSampleLocationsPropertiesEXT(..)
+  , VkMultisamplePropertiesEXT(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkSampleCountFlags
+  , VkSampleCountFlagBits(..)
+  , VkPhysicalDevice
+  , VkImageCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkExtent2D(..)
+  , VkDynamicState(..)
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+
+
+-- No documentation found for Nested "VkDynamicState" "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT"
+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"
+pattern VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = VkStructureType 1000143000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = VkStructureType 1000143001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = VkStructureType 1000143002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT = VkStructureType 1000143003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT = VkStructureType 1000143004
+-- No documentation found for Nested "VkImageCreateFlagBits" "VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT"
+pattern VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = VkImageCreateFlagBits 0x00001000
+-- No documentation found for TopLevel "VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION"
+pattern VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_SAMPLE_LOCATIONS_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME"
+pattern VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_SAMPLE_LOCATIONS_EXTENSION_NAME = "VK_EXT_sample_locations"
+-- | 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
+--     @VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT@ dynamic state enabled
+--
+-- -   The @sampleLocationsPerPixel@ member of @pSampleLocationsInfo@
+--     /must/ equal the @rasterizationSamples@ member of the
+--     'Graphics.Vulkan.Core10.Pipeline.VkPipelineMultisampleStateCreateInfo'
+--     structure the bound graphics pipeline has been created with
+--
+-- -   If
+--     'VkPhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+--     is @VK_FALSE@ then the current render pass /must/ have been begun by
+--     specifying a '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 sample
+--     locations state pointed to by @pSampleLocationsInfo@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pSampleLocationsInfo@ /must/ be a valid pointer to a valid
+--     @VkSampleLocationsInfoEXT@ structure
+--
+-- -   @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',
+-- 'VkSampleLocationsInfoEXT'
+foreign import ccall "vkCmdSetSampleLocationsEXT" vkCmdSetSampleLocationsEXT :: ("commandBuffer" ::: VkCommandBuffer) -> ("pSampleLocationsInfo" ::: Ptr VkSampleLocationsInfoEXT) -> IO ()
+-- | vkGetPhysicalDeviceMultisamplePropertiesEXT - Report sample count
+-- specific multisampling capabilities of a physical device
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     additional multisampling capabilities.
+--
+-- -   @samples@ is the sample count to query the capabilities for.
+--
+-- -   @pMultisampleProperties@ is a pointer to a structure of type
+--     'VkMultisamplePropertiesEXT', in which information about the
+--     additional multisampling capabilities specific to the sample count
+--     is returned.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @samples@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+--     value
+--
+-- -   @pMultisampleProperties@ /must/ be a valid pointer to a
+--     @VkMultisamplePropertiesEXT@ structure
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkMultisamplePropertiesEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+foreign import ccall "vkGetPhysicalDeviceMultisamplePropertiesEXT" vkGetPhysicalDeviceMultisamplePropertiesEXT :: ("physicalDevice" ::: VkPhysicalDevice) -> ("samples" ::: VkSampleCountFlagBits) -> ("pMultisampleProperties" ::: Ptr VkMultisamplePropertiesEXT) -> IO ()
+-- | VkSampleLocationEXT - Structure specifying the coordinates of a sample
+-- location
+--
+-- = Description
+-- #_description#
+--
+-- The domain space of the sample location coordinates has an upper-left
+-- origin within the pixel in framebuffer space.
+--
+-- The values specified in a @VkSampleLocationEXT@ structure are always
+-- clamped to the implementation-dependent sample location coordinate range
+-- [@sampleLocationCoordinateRange@[0],@sampleLocationCoordinateRange@[1]]
+-- that /can/ be queried by chaining the
+-- 'VkPhysicalDeviceSampleLocationsPropertiesEXT' structure to the @pNext@
+-- chain of
+-- '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"
+  vkX :: CFloat
+  , -- No documentation found for Nested "VkSampleLocationEXT" "vkY"
+  vkY :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSampleLocationEXT where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkSampleLocationEXT <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkSampleLocationEXT))
+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkSampleLocationEXT))
+-- | VkSampleLocationsInfoEXT - Structure specifying a set of sample
+-- 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
+-- subresource has been last rendered with for the purposes of layout
+-- transitions of depth\/stencil images created with
+-- @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@.
+--
+-- The sample locations in @pSampleLocations@ specify
+-- @sampleLocationsPerPixel@ number of sample locations for each pixel in
+-- the grid of the size specified in @sampleLocationGridSize@. The sample
+-- location for sample i at the pixel grid location (x,y) is taken from
+-- @pSampleLocations@[(x + y * @sampleLocationGridSize.width@) *
+-- @sampleLocationsPerPixel@ + i].
+--
+-- == Valid Usage
+--
+-- -   @sampleLocationsPerPixel@ /must/ be a bit value that is set in
+--     'VkPhysicalDeviceSampleLocationsPropertiesEXT'::@sampleLocationSampleCounts@
+--
+-- -   @sampleLocationsCount@ /must/ equal @sampleLocationsPerPixel@ ×
+--     @sampleLocationGridSize.width@ × @sampleLocationGridSize.height@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT@
+--
+-- -   @sampleLocationsPerPixel@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits'
+--     value
+--
+-- -   @pSampleLocations@ /must/ be a valid pointer to an array of
+--     @sampleLocationsCount@ @VkSampleLocationEXT@ structures
+--
+-- -   @sampleLocationsCount@ /must/ be greater than @0@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAttachmentSampleLocationsEXT',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
+-- 'VkPipelineSampleLocationsStateCreateInfoEXT',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkSampleCountFlagBits',
+-- 'VkSampleLocationEXT', 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'VkSubpassSampleLocationsEXT', 'vkCmdSetSampleLocationsEXT'
+data VkSampleLocationsInfoEXT = VkSampleLocationsInfoEXT
+  { -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSampleLocationsPerPixel"
+  vkSampleLocationsPerPixel :: VkSampleCountFlagBits
+  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSampleLocationGridSize"
+  vkSampleLocationGridSize :: VkExtent2D
+  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkSampleLocationsCount"
+  vkSampleLocationsCount :: Word32
+  , -- No documentation found for Nested "VkSampleLocationsInfoEXT" "vkPSampleLocations"
+  vkPSampleLocations :: Ptr VkSampleLocationEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSampleLocationsInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkSampleLocationsInfoEXT <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 20)
+                                      <*> peek (ptr `plusPtr` 28)
+                                      <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSampleLocationsInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSampleLocationsInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkSampleLocationsPerPixel (poked :: VkSampleLocationsInfoEXT))
+                *> poke (ptr `plusPtr` 20) (vkSampleLocationGridSize (poked :: VkSampleLocationsInfoEXT))
+                *> poke (ptr `plusPtr` 28) (vkSampleLocationsCount (poked :: VkSampleLocationsInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPSampleLocations (poked :: VkSampleLocationsInfoEXT))
+-- | VkAttachmentSampleLocationsEXT - Structure specifying the sample
+-- 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
+-- @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ then the
+-- values specified in @sampleLocationsInfo@ are ignored.
+--
+-- == Valid Usage
+--
+-- -   @attachmentIndex@ /must/ be less than the @attachmentCount@
+--     specified in 'Graphics.Vulkan.Core10.Pass.VkRenderPassCreateInfo'
+--     the render pass specified by
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo'::@renderPass@
+--     was created with
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sampleLocationsInfo@ /must/ be a valid @VkSampleLocationsInfoEXT@
+--     structure
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkRenderPassSampleLocationsBeginInfoEXT', 'VkSampleLocationsInfoEXT'
+data VkAttachmentSampleLocationsEXT = VkAttachmentSampleLocationsEXT
+  { -- No documentation found for Nested "VkAttachmentSampleLocationsEXT" "vkAttachmentIndex"
+  vkAttachmentIndex :: Word32
+  , -- No documentation found for Nested "VkAttachmentSampleLocationsEXT" "vkSampleLocationsInfo"
+  vkSampleLocationsInfo :: VkSampleLocationsInfoEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAttachmentSampleLocationsEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkAttachmentSampleLocationsEXT <$> peek (ptr `plusPtr` 0)
+                                            <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkAttachmentIndex (poked :: VkAttachmentSampleLocationsEXT))
+                *> poke (ptr `plusPtr` 8) (vkSampleLocationsInfo (poked :: VkAttachmentSampleLocationsEXT))
+-- | VkSubpassSampleLocationsEXT - Structure specifying the sample locations
+-- state to use for layout transitions of attachments performed after a
+-- given subpass
+--
+-- = Description
+-- #_description#
+--
+-- If the image referenced by the depth\/stencil attachment used in the
+-- subpass identified by @subpassIndex@ was not created with
+-- @VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT@ or if the
+-- subpass does not use a depth\/stencil attachment, and
+-- 'VkPhysicalDeviceSampleLocationsPropertiesEXT'::@variableSampleLocations@
+-- is @VK_TRUE@ then the values specified in @sampleLocationsInfo@ are
+-- ignored.
+--
+-- == Valid Usage
+--
+-- -   @subpassIndex@ /must/ be less than the @subpassCount@ specified in
+--     'Graphics.Vulkan.Core10.Pass.VkRenderPassCreateInfo' the render pass
+--     specified by
+--     'Graphics.Vulkan.Core10.CommandBufferBuilding.VkRenderPassBeginInfo'::@renderPass@
+--     was created with
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sampleLocationsInfo@ /must/ be a valid @VkSampleLocationsInfoEXT@
+--     structure
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkRenderPassSampleLocationsBeginInfoEXT', 'VkSampleLocationsInfoEXT'
+data VkSubpassSampleLocationsEXT = VkSubpassSampleLocationsEXT
+  { -- No documentation found for Nested "VkSubpassSampleLocationsEXT" "vkSubpassIndex"
+  vkSubpassIndex :: Word32
+  , -- No documentation found for Nested "VkSubpassSampleLocationsEXT" "vkSampleLocationsInfo"
+  vkSampleLocationsInfo :: VkSampleLocationsInfoEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSubpassSampleLocationsEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkSubpassSampleLocationsEXT <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSubpassIndex (poked :: VkSubpassSampleLocationsEXT))
+                *> poke (ptr `plusPtr` 8) (vkSampleLocationsInfo (poked :: VkSubpassSampleLocationsEXT))
+-- | VkRenderPassSampleLocationsBeginInfoEXT - Structure specifying sample
+-- locations to use for the layout transition of custom sample locations
+-- compatible depth\/stencil attachments
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT@
+--
+-- -   If @attachmentInitialSampleLocationsCount@ is not @0@,
+--     @pAttachmentInitialSampleLocations@ /must/ be a valid pointer to an
+--     array of @attachmentInitialSampleLocationsCount@ valid
+--     @VkAttachmentSampleLocationsEXT@ structures
+--
+-- -   If @postSubpassSampleLocationsCount@ is not @0@,
+--     @pPostSubpassSampleLocations@ /must/ be a valid pointer to an array
+--     of @postSubpassSampleLocationsCount@ valid
+--     @VkSubpassSampleLocationsEXT@ structures
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAttachmentSampleLocationsEXT',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'VkSubpassSampleLocationsEXT'
+data VkRenderPassSampleLocationsBeginInfoEXT = VkRenderPassSampleLocationsBeginInfoEXT
+  { -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkAttachmentInitialSampleLocationsCount"
+  vkAttachmentInitialSampleLocationsCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPAttachmentInitialSampleLocations"
+  vkPAttachmentInitialSampleLocations :: Ptr VkAttachmentSampleLocationsEXT
+  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPostSubpassSampleLocationsCount"
+  vkPostSubpassSampleLocationsCount :: Word32
+  , -- No documentation found for Nested "VkRenderPassSampleLocationsBeginInfoEXT" "vkPPostSubpassSampleLocations"
+  vkPPostSubpassSampleLocations :: Ptr VkSubpassSampleLocationsEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRenderPassSampleLocationsBeginInfoEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkRenderPassSampleLocationsBeginInfoEXT <$> 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) (vkSType (poked :: VkRenderPassSampleLocationsBeginInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassSampleLocationsBeginInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkAttachmentInitialSampleLocationsCount (poked :: VkRenderPassSampleLocationsBeginInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkPAttachmentInitialSampleLocations (poked :: VkRenderPassSampleLocationsBeginInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPostSubpassSampleLocationsCount (poked :: VkRenderPassSampleLocationsBeginInfoEXT))
+                *> poke (ptr `plusPtr` 40) (vkPPostSubpassSampleLocations (poked :: VkRenderPassSampleLocationsBeginInfoEXT))
+-- | VkPipelineSampleLocationsStateCreateInfoEXT - Structure specifying
+-- sample locations for a pipeline
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT@
+--
+-- -   @sampleLocationsInfo@ /must/ be a valid @VkSampleLocationsInfoEXT@
+--     structure
+--
+-- = See Also
+-- #_see_also#
+--
+-- @VkBool32@, 'VkSampleLocationsInfoEXT',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPipelineSampleLocationsStateCreateInfoEXT = VkPipelineSampleLocationsStateCreateInfoEXT
+  { -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkSampleLocationsEnable"
+  vkSampleLocationsEnable :: VkBool32
+  , -- No documentation found for Nested "VkPipelineSampleLocationsStateCreateInfoEXT" "vkSampleLocationsInfo"
+  vkSampleLocationsInfo :: VkSampleLocationsInfoEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineSampleLocationsStateCreateInfoEXT where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkPipelineSampleLocationsStateCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                         <*> peek (ptr `plusPtr` 8)
+                                                         <*> peek (ptr `plusPtr` 16)
+                                                         <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineSampleLocationsStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineSampleLocationsStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkSampleLocationsEnable (poked :: VkPipelineSampleLocationsStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkSampleLocationsInfo (poked :: VkPipelineSampleLocationsStateCreateInfoEXT))
+-- | VkPhysicalDeviceSampleLocationsPropertiesEXT - Structure describing
+-- 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'
+--     indicating the sample counts supporting custom sample locations.
+--
+-- -   @maxSampleLocationGridSize@ is the maximum size of the pixel grid in
+--     which sample locations /can/ vary that is supported for all sample
+--     counts in @sampleLocationSampleCounts@.
+--
+-- -   @sampleLocationCoordinateRange@[2] is the range of supported sample
+--     location coordinates.
+--
+-- -   @sampleLocationSubPixelBits@ is the number of bits of subpixel
+--     precision for sample locations.
+--
+-- -   @variableSampleLocations@ specifies whether the sample locations
+--     used by all pipelines that will be bound to a command buffer during
+--     a subpass /must/ match. If set to @VK_TRUE@, the implementation
+--     supports variable sample locations in a subpass. If set to
+--     @VK_FALSE@, then the sample locations /must/ stay constant in each
+--     subpass.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT@
+--
+-- If the @VkPhysicalDeviceSampleLocationsPropertiesEXT@ 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
+-- #_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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkSampleLocationSampleCounts"
+  vkSampleLocationSampleCounts :: VkSampleCountFlags
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkMaxSampleLocationGridSize"
+  vkMaxSampleLocationGridSize :: VkExtent2D
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkSampleLocationCoordinateRange"
+  vkSampleLocationCoordinateRange :: Vector 2 CFloat
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkSampleLocationSubPixelBits"
+  vkSampleLocationSubPixelBits :: Word32
+  , -- No documentation found for Nested "VkPhysicalDeviceSampleLocationsPropertiesEXT" "vkVariableSampleLocations"
+  vkVariableSampleLocations :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceSampleLocationsPropertiesEXT where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceSampleLocationsPropertiesEXT <$> peek (ptr `plusPtr` 0)
+                                                          <*> peek (ptr `plusPtr` 8)
+                                                          <*> peek (ptr `plusPtr` 16)
+                                                          <*> peek (ptr `plusPtr` 20)
+                                                          <*> peek (ptr `plusPtr` 28)
+                                                          <*> peek (ptr `plusPtr` 36)
+                                                          <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceSampleLocationsPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceSampleLocationsPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkSampleLocationSampleCounts (poked :: VkPhysicalDeviceSampleLocationsPropertiesEXT))
+                *> poke (ptr `plusPtr` 20) (vkMaxSampleLocationGridSize (poked :: VkPhysicalDeviceSampleLocationsPropertiesEXT))
+                *> poke (ptr `plusPtr` 28) (vkSampleLocationCoordinateRange (poked :: VkPhysicalDeviceSampleLocationsPropertiesEXT))
+                *> poke (ptr `plusPtr` 36) (vkSampleLocationSubPixelBits (poked :: VkPhysicalDeviceSampleLocationsPropertiesEXT))
+                *> poke (ptr `plusPtr` 40) (vkVariableSampleLocations (poked :: VkPhysicalDeviceSampleLocationsPropertiesEXT))
+-- | 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@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMultisamplePropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMultisamplePropertiesEXT" "vkMaxSampleLocationGridSize"
+  vkMaxSampleLocationGridSize :: VkExtent2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMultisamplePropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMultisamplePropertiesEXT <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMultisamplePropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMultisamplePropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkMaxSampleLocationGridSize (poked :: VkMultisamplePropertiesEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_sampler_filter_minmax.hs
@@ -0,0 +1,264 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax
+  ( VkSamplerReductionModeEXT(..)
+  , pattern VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT
+  , pattern VK_SAMPLER_REDUCTION_MODE_MIN_EXT
+  , pattern VK_SAMPLER_REDUCTION_MODE_MAX_EXT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT
+  , pattern VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION
+  , pattern VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME
+  , VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(..)
+  , VkSamplerReductionModeCreateInfoEXT(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkFormatFeatureFlagBits(..)
+  )
+
+
+-- ** VkSamplerReductionModeEXT
+
+-- | VkSamplerReductionModeEXT - Specify reduction mode for texture filtering
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSamplerReductionModeCreateInfoEXT'
+newtype VkSamplerReductionModeEXT = VkSamplerReductionModeEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkSamplerReductionModeEXT where
+  showsPrec _ VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = showString "VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT"
+  showsPrec _ VK_SAMPLER_REDUCTION_MODE_MIN_EXT = showString "VK_SAMPLER_REDUCTION_MODE_MIN_EXT"
+  showsPrec _ VK_SAMPLER_REDUCTION_MODE_MAX_EXT = showString "VK_SAMPLER_REDUCTION_MODE_MAX_EXT"
+  showsPrec p (VkSamplerReductionModeEXT x) = showParen (p >= 11) (showString "VkSamplerReductionModeEXT " . showsPrec 11 x)
+
+instance Read VkSamplerReductionModeEXT where
+  readPrec = parens ( choose [ ("VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT", pure VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT)
+                             , ("VK_SAMPLER_REDUCTION_MODE_MIN_EXT",              pure VK_SAMPLER_REDUCTION_MODE_MIN_EXT)
+                             , ("VK_SAMPLER_REDUCTION_MODE_MAX_EXT",              pure VK_SAMPLER_REDUCTION_MODE_MAX_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSamplerReductionModeEXT")
+                        v <- step readPrec
+                        pure (VkSamplerReductionModeEXT v)
+                        )
+                    )
+
+-- | @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>.
+pattern VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT :: VkSamplerReductionModeEXT
+pattern VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT = VkSamplerReductionModeEXT 0
+
+-- | @VK_SAMPLER_REDUCTION_MODE_MIN_EXT@ specifies that texel values are
+-- combined by taking the component-wise minimum of values in the footprint
+-- with non-zero weights.
+pattern VK_SAMPLER_REDUCTION_MODE_MIN_EXT :: VkSamplerReductionModeEXT
+pattern VK_SAMPLER_REDUCTION_MODE_MIN_EXT = VkSamplerReductionModeEXT 1
+
+-- | @VK_SAMPLER_REDUCTION_MODE_MAX_EXT@ specifies that texel values are
+-- combined by taking the component-wise maximum of values in the footprint
+-- with non-zero weights.
+pattern VK_SAMPLER_REDUCTION_MODE_MAX_EXT :: VkSamplerReductionModeEXT
+pattern VK_SAMPLER_REDUCTION_MODE_MAX_EXT = VkSamplerReductionModeEXT 2
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VkStructureType 1000130000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VkStructureType 1000130001
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT = VkFormatFeatureFlagBits 0x00010000
+-- No documentation found for TopLevel "VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION"
+pattern VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_SAMPLER_FILTER_MINMAX_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME"
+pattern VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_SAMPLER_FILTER_MINMAX_EXTENSION_NAME = "VK_EXT_sampler_filter_minmax"
+-- | VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT - Structure describing
+-- 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
+--     filtering.
+--
+-- -   @filterMinmaxImageComponentMapping@ is a boolean value indicating
+--     whether the implementation supports non-identity component mapping
+--     of the image when doing min\/max filtering.
+--
+-- If the @VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT@ 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.
+--
+-- If @filterMinmaxSingleComponentFormats@ is @VK_TRUE@, the following
+-- formats /must/ support the
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT_EXT@ feature with
+-- @VK_IMAGE_TILING_OPTIMAL@, if they support
+-- @VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT@.
+--
+-- -   @VK_FORMAT_R8_UNORM@
+--
+-- -   @VK_FORMAT_R8_SNORM@
+--
+-- -   @VK_FORMAT_R16_UNORM@
+--
+-- -   @VK_FORMAT_R16_SNORM@
+--
+-- -   @VK_FORMAT_R16_SFLOAT@
+--
+-- -   @VK_FORMAT_R32_SFLOAT@
+--
+-- -   @VK_FORMAT_D16_UNORM@
+--
+-- -   @VK_FORMAT_X8_D24_UNORM_PACK32@
+--
+-- -   @VK_FORMAT_D32_SFLOAT@
+--
+-- -   @VK_FORMAT_D16_UNORM_S8_UINT@
+--
+-- -   @VK_FORMAT_D24_UNORM_S8_UINT@
+--
+-- -   @VK_FORMAT_D32_SFLOAT_S8_UINT@
+--
+-- If the format is a depth\/stencil format, this bit only specifies that
+-- the depth aspect (not the stencil aspect) of an image of this format
+-- supports min\/max filtering, and that min\/max filtering of the depth
+-- aspect is supported when depth compare is disabled in the sampler.
+--
+-- If @filterMinmaxImageComponentMapping@ is @VK_FALSE@ the component
+-- mapping of the image view used with min\/max filtering /must/ have been
+-- created with the @r@ component set to @VK_COMPONENT_SWIZZLE_IDENTITY@.
+-- Only the @r@ component of the sampled image value is defined and the
+-- other component values are undefined. If
+-- @filterMinmaxImageComponentMapping@ is @VK_TRUE@ this restriction does
+-- not apply and image component mapping works as normal.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "vkFilterMinmaxSingleComponentFormats"
+  vkFilterMinmaxSingleComponentFormats :: VkBool32
+  , -- No documentation found for Nested "VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT" "vkFilterMinmaxImageComponentMapping"
+  vkFilterMinmaxImageComponentMapping :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT <$> 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 :: VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkFilterMinmaxSingleComponentFormats (poked :: VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT))
+                *> poke (ptr `plusPtr` 20) (vkFilterMinmaxImageComponentMapping (poked :: VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT))
+-- | VkSamplerReductionModeCreateInfoEXT - Structure specifying sampler
+-- reduction mode
+--
+-- = Description
+-- #_description#
+--
+-- If this structure is not present, @reductionMode@ is considered to be
+-- @VK_SAMPLER_REDUCTION_MODE_WEIGHTED_AVERAGE_EXT@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSamplerReductionModeCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSamplerReductionModeCreateInfoEXT" "vkReductionMode"
+  vkReductionMode :: VkSamplerReductionModeEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSamplerReductionModeCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSamplerReductionModeCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerReductionModeCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerReductionModeCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkReductionMode (poked :: VkSamplerReductionModeCreateInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_stencil_export.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export
+  ( pattern VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION
+  , pattern VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION"
+pattern VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_SHADER_STENCIL_EXPORT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME"
+pattern VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_SHADER_STENCIL_EXPORT_EXTENSION_NAME = "VK_EXT_shader_stencil_export"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_ballot.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_ballot.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_ballot.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
+  ( pattern VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION
+  , pattern VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION"
+pattern VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_SHADER_SUBGROUP_BALLOT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME"
+pattern VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_SHADER_SUBGROUP_BALLOT_EXTENSION_NAME = "VK_EXT_shader_subgroup_ballot"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_vote.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_vote.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_subgroup_vote.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote
+  ( pattern VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION
+  , pattern VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION"
+pattern VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_SHADER_SUBGROUP_VOTE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME"
+pattern VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_SHADER_SUBGROUP_VOTE_EXTENSION_NAME = "VK_EXT_shader_subgroup_vote"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_shader_viewport_index_layer.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_viewport_index_layer.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_shader_viewport_index_layer.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
+  ( pattern VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION
+  , pattern VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION"
+pattern VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME"
+pattern VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_SHADER_VIEWPORT_INDEX_LAYER_EXTENSION_NAME = "VK_EXT_shader_viewport_index_layer"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_swapchain_colorspace.hs
@@ -0,0 +1,82 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace
+  ( pattern VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT
+  , pattern VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT
+  , pattern VK_COLOR_SPACE_DCI_P3_LINEAR_EXT
+  , pattern VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT
+  , pattern VK_COLOR_SPACE_BT709_LINEAR_EXT
+  , pattern VK_COLOR_SPACE_BT709_NONLINEAR_EXT
+  , pattern VK_COLOR_SPACE_BT2020_LINEAR_EXT
+  , pattern VK_COLOR_SPACE_HDR10_ST2084_EXT
+  , pattern VK_COLOR_SPACE_DOLBYVISION_EXT
+  , pattern VK_COLOR_SPACE_HDR10_HLG_EXT
+  , pattern VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT
+  , pattern VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT
+  , pattern VK_COLOR_SPACE_PASS_THROUGH_EXT
+  , pattern VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT
+  , pattern VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION
+  , pattern VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkColorSpaceKHR(..)
+  )
+
+
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"
+pattern VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT = VkColorSpaceKHR 1000104001
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"
+pattern VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT = VkColorSpaceKHR 1000104002
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_DCI_P3_LINEAR_EXT"
+pattern VK_COLOR_SPACE_DCI_P3_LINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_DCI_P3_LINEAR_EXT = VkColorSpaceKHR 1000104003
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT"
+pattern VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT = VkColorSpaceKHR 1000104004
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_BT709_LINEAR_EXT"
+pattern VK_COLOR_SPACE_BT709_LINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_BT709_LINEAR_EXT = VkColorSpaceKHR 1000104005
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_BT709_NONLINEAR_EXT"
+pattern VK_COLOR_SPACE_BT709_NONLINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_BT709_NONLINEAR_EXT = VkColorSpaceKHR 1000104006
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_BT2020_LINEAR_EXT"
+pattern VK_COLOR_SPACE_BT2020_LINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_BT2020_LINEAR_EXT = VkColorSpaceKHR 1000104007
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_HDR10_ST2084_EXT"
+pattern VK_COLOR_SPACE_HDR10_ST2084_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_HDR10_ST2084_EXT = VkColorSpaceKHR 1000104008
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_DOLBYVISION_EXT"
+pattern VK_COLOR_SPACE_DOLBYVISION_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_DOLBYVISION_EXT = VkColorSpaceKHR 1000104009
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_HDR10_HLG_EXT"
+pattern VK_COLOR_SPACE_HDR10_HLG_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_HDR10_HLG_EXT = VkColorSpaceKHR 1000104010
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT"
+pattern VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT = VkColorSpaceKHR 1000104011
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"
+pattern VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT = VkColorSpaceKHR 1000104012
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_PASS_THROUGH_EXT"
+pattern VK_COLOR_SPACE_PASS_THROUGH_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_PASS_THROUGH_EXT = VkColorSpaceKHR 1000104013
+-- No documentation found for Nested "VkColorSpaceKHR" "VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT"
+pattern VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT = VkColorSpaceKHR 1000104014
+-- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION"
+pattern VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_SWAPCHAIN_COLOR_SPACE_SPEC_VERSION = 3
+-- No documentation found for TopLevel "VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME"
+pattern VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_SWAPCHAIN_COLOR_SPACE_EXTENSION_NAME = "VK_EXT_swapchain_colorspace"
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_cache.hs
@@ -0,0 +1,582 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_validation_cache
+  ( VkValidationCacheHeaderVersionEXT(..)
+  , pattern VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT
+  , VkValidationCacheCreateFlagsEXT(..)
+  , pattern VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT
+  , pattern VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT
+  , pattern VK_OBJECT_TYPE_VALIDATION_CACHE_EXT
+  , pattern VK_EXT_VALIDATION_CACHE_SPEC_VERSION
+  , pattern VK_EXT_VALIDATION_CACHE_EXTENSION_NAME
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT
+  , VkValidationCacheEXT
+  , vkCreateValidationCacheEXT
+  , vkDestroyValidationCacheEXT
+  , vkGetValidationCacheDataEXT
+  , vkMergeValidationCachesEXT
+  , VkValidationCacheCreateInfoEXT(..)
+  , VkShaderModuleValidationCacheCreateInfoEXT(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CSize(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Extensions.VK_EXT_debug_report
+  ( VkDebugReportObjectTypeEXT(..)
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT
+  )
+
+
+-- ** VkValidationCacheHeaderVersionEXT
+
+-- | VkValidationCacheHeaderVersionEXT - Encode validation cache version
+--
+-- = See Also
+-- #_see_also#
+--
+-- UNKNOWN:vkCreateValdiationCacheEXT, 'vkGetValidationCacheDataEXT'
+newtype VkValidationCacheHeaderVersionEXT = VkValidationCacheHeaderVersionEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkValidationCacheHeaderVersionEXT where
+  showsPrec _ VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = showString "VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT"
+  showsPrec p (VkValidationCacheHeaderVersionEXT x) = showParen (p >= 11) (showString "VkValidationCacheHeaderVersionEXT " . showsPrec 11 x)
+
+instance Read VkValidationCacheHeaderVersionEXT where
+  readPrec = parens ( choose [ ("VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT", pure VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkValidationCacheHeaderVersionEXT")
+                        v <- step readPrec
+                        pure (VkValidationCacheHeaderVersionEXT v)
+                        )
+                    )
+
+-- | @VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT@ specifies version one of
+-- the validation cache.
+pattern VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT :: VkValidationCacheHeaderVersionEXT
+pattern VK_VALIDATION_CACHE_HEADER_VERSION_ONE_EXT = VkValidationCacheHeaderVersionEXT 1
+-- ** VkValidationCacheCreateFlagsEXT
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkValidationCacheCreateFlagsEXT where
+  
+  showsPrec p (VkValidationCacheCreateFlagsEXT x) = showParen (p >= 11) (showString "VkValidationCacheCreateFlagsEXT " . showsPrec 11 x)
+
+instance Read VkValidationCacheCreateFlagsEXT where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkValidationCacheCreateFlagsEXT")
+                        v <- step readPrec
+                        pure (VkValidationCacheCreateFlagsEXT v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = VkStructureType 1000160000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = VkStructureType 1000160001
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_VALIDATION_CACHE_EXT"
+pattern VK_OBJECT_TYPE_VALIDATION_CACHE_EXT :: VkObjectType
+pattern VK_OBJECT_TYPE_VALIDATION_CACHE_EXT = VkObjectType 1000160000
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_CACHE_SPEC_VERSION"
+pattern VK_EXT_VALIDATION_CACHE_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_VALIDATION_CACHE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_CACHE_EXTENSION_NAME"
+pattern VK_EXT_VALIDATION_CACHE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_VALIDATION_CACHE_EXTENSION_NAME = "VK_EXT_validation_cache"
+-- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT
+-- | Dummy data to tag the 'Ptr' with
+data VkValidationCacheEXT_T
+-- | VkValidationCacheEXT - Opaque handle to a validation cache object
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkShaderModuleValidationCacheCreateInfoEXT',
+-- 'vkCreateValidationCacheEXT', 'vkDestroyValidationCacheEXT',
+-- 'vkGetValidationCacheDataEXT', 'vkMergeValidationCachesEXT'
+type VkValidationCacheEXT = Ptr VkValidationCacheEXT_T
+-- | vkCreateValidationCacheEXT - Creates a new validation cache
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the validation cache
+--     object.
+--
+-- -   @pCreateInfo@ is a pointer to a @VkValidationCacheCreateInfoEXT@
+--     structure that contains the initial parameters for the validation
+--     cache object.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation Memory Allocation> chapter.
+--
+-- -   @pValidationCache@ is a pointer to a @VkValidationCacheEXT@ handle
+--     in which the resulting validation cache object is returned.
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- Applications /can/ track and manage the total host memory size of a
+-- validation cache object using the @pAllocator@. Applications /can/ limit
+-- the amount of data retrieved from a validation cache object in
+-- @vkGetValidationCacheDataEXT@. Implementations /should/ not internally
+-- limit the total number of entries added to a validation cache object or
+-- the total host memory consumed.
+--
+-- Once created, a validation cache /can/ be passed to the
+-- @vkCreateShaderModule@ command as part of the @VkShaderModuleCreateInfo@
+-- @pNext@ chain. If a @VkShaderModuleValidationCacheCreateInfoEXT@ object
+-- is part of the @VkShaderModuleCreateInfo@::@pNext@ chain, and its
+-- @validationCache@ field is not
+-- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', the implementation
+-- will query it for possible reuse opportunities and update it with new
+-- content. The use of the validation cache object in these commands is
+-- internally synchronized, and the same validation cache object /can/ be
+-- used in multiple threads simultaneously.
+--
+-- __Note__
+--
+-- Implementations /should/ make every effort to limit any critical
+-- sections to the actual accesses to the cache, which is expected to be
+-- significantly shorter than the duration of the @vkCreateShaderModule@
+-- command.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkValidationCacheCreateInfoEXT@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pValidationCache@ /must/ be a valid pointer to a
+--     @VkValidationCacheEXT@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkValidationCacheCreateInfoEXT', 'VkValidationCacheEXT'
+foreign import ccall "vkCreateValidationCacheEXT" vkCreateValidationCacheEXT :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkValidationCacheCreateInfoEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pValidationCache" ::: Ptr VkValidationCacheEXT) -> IO VkResult
+-- | vkDestroyValidationCacheEXT - Destroy a validation cache object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that destroys the validation cache
+--     object.
+--
+-- -   @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#
+--
+-- == Valid Usage
+--
+-- -   If @VkAllocationCallbacks@ were provided when @validationCache@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @validationCache@
+--     was created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @validationCache@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @validationCache@
+--     /must/ be a valid @VkValidationCacheEXT@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @validationCache@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @validationCache@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkValidationCacheEXT'
+foreign import ccall "vkDestroyValidationCacheEXT" vkDestroyValidationCacheEXT :: ("device" ::: VkDevice) -> ("validationCache" ::: VkValidationCacheEXT) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkGetValidationCacheDataEXT - Get the data store from a validation cache
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the validation cache.
+--
+-- -   @validationCache@ is the validation cache to retrieve data from.
+--
+-- -   @pDataSize@ is a pointer to a value related to the amount of data in
+--     the validation cache, as described below.
+--
+-- -   @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
+-- @pDataSize@. Otherwise, @pDataSize@ /must/ point to a variable set by
+-- the user to the size of the buffer, in bytes, pointed to by @pData@, and
+-- on return the variable is overwritten with the amount of data actually
+-- written to @pData@.
+--
+-- If @pDataSize@ is less than the maximum size that /can/ be retrieved by
+-- the validation cache, at most @pDataSize@ bytes will be written to
+-- @pData@, and @vkGetValidationCacheDataEXT@ will return @VK_INCOMPLETE@.
+-- Any data written to @pData@ is valid and /can/ be provided as the
+-- @pInitialData@ member of the @VkValidationCacheCreateInfoEXT@ structure
+-- passed to @vkCreateValidationCacheEXT@.
+--
+-- Two calls to @vkGetValidationCacheDataEXT@ with the same parameters
+-- /must/ retrieve the same data unless a command that modifies the
+-- contents of the cache is called between them.
+--
+-- Applications /can/ store the data retrieved from the validation cache,
+-- and use these data, possibly in a future run of the application, to
+-- populate new validation cache objects. The results of validation,
+-- however, /may/ depend on the vendor ID, device ID, driver version, and
+-- other details of the device. To enable applications to detect when
+-- previously retrieved data is incompatible with the device, the initial
+-- 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@
+--
+-- 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.
+--
+-- The next four bytes encode the validation cache version, as described
+-- for 'VkValidationCacheHeaderVersionEXT'. A consumer of the validation
+-- cache /should/ use the cache version to interpret the remainder of the
+-- cache header.
+--
+-- If @pDataSize@ is less than what is necessary to store this header,
+-- nothing will be written to @pData@ and zero will be written to
+-- @pDataSize@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @validationCache@ /must/ be a valid @VkValidationCacheEXT@ handle
+--
+-- -   @pDataSize@ /must/ be a valid pointer to a @size_t@ value
+--
+-- -   If the value referenced by @pDataSize@ is not @0@, and @pData@ is
+--     not @NULL@, @pData@ /must/ be a valid pointer to an array of
+--     @pDataSize@ bytes
+--
+-- -   @validationCache@ /must/ have been created, allocated, or retrieved
+--     from @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkValidationCacheEXT'
+foreign import ccall "vkGetValidationCacheDataEXT" vkGetValidationCacheDataEXT :: ("device" ::: VkDevice) -> ("validationCache" ::: VkValidationCacheEXT) -> ("pDataSize" ::: Ptr CSize) -> ("pData" ::: Ptr ()) -> IO VkResult
+-- | vkMergeValidationCachesEXT - Combine the data stores of validation
+-- caches
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the validation cache
+--     objects.
+--
+-- -   @dstCache@ is the handle of the validation cache to merge results
+--     into.
+--
+-- -   @srcCacheCount@ is the length of the @pSrcCaches@ array.
+--
+-- -   @pSrcCaches@ is an array of validation cache handles, which will be
+--     merged into @dstCache@. The previous contents of @dstCache@ are
+--     included after the merge.
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- The details of the merge operation are implementation dependent, but
+-- implementations /should/ merge the contents of the specified validation
+-- caches and prune duplicate entries.
+--
+-- == Valid Usage
+--
+-- -   @dstCache@ /must/ not appear in the list of source caches
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @dstCache@ /must/ be a valid @VkValidationCacheEXT@ handle
+--
+-- -   @pSrcCaches@ /must/ be a valid pointer to an array of
+--     @srcCacheCount@ valid @VkValidationCacheEXT@ handles
+--
+-- -   @srcCacheCount@ /must/ be greater than @0@
+--
+-- -   @dstCache@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- -   Each element of @pSrcCaches@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @dstCache@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkValidationCacheEXT'
+foreign import ccall "vkMergeValidationCachesEXT" vkMergeValidationCachesEXT :: ("device" ::: VkDevice) -> ("dstCache" ::: VkValidationCacheEXT) -> ("srcCacheCount" ::: Word32) -> ("pSrcCaches" ::: Ptr VkValidationCacheEXT) -> IO VkResult
+-- | 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
+--     @pInitialData@, as returned by @vkGetValidationCacheDataEXT@ when
+--     @pInitialData@ was originally retrieved
+--
+-- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ have been
+--     retrieved from a previous call to @vkGetValidationCacheDataEXT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   If @initialDataSize@ is not @0@, @pInitialData@ /must/ be a valid
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkFlags"
+  vkFlags :: VkValidationCacheCreateFlagsEXT
+  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkInitialDataSize"
+  vkInitialDataSize :: CSize
+  , -- No documentation found for Nested "VkValidationCacheCreateInfoEXT" "vkPInitialData"
+  vkPInitialData :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkValidationCacheCreateInfoEXT where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkValidationCacheCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                            <*> peek (ptr `plusPtr` 8)
+                                            <*> peek (ptr `plusPtr` 16)
+                                            <*> peek (ptr `plusPtr` 24)
+                                            <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkValidationCacheCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkValidationCacheCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkValidationCacheCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkInitialDataSize (poked :: VkValidationCacheCreateInfoEXT))
+                *> poke (ptr `plusPtr` 32) (vkPInitialData (poked :: VkValidationCacheCreateInfoEXT))
+-- | VkShaderModuleValidationCacheCreateInfoEXT - Specify validation cache to
+-- use during shader module creation
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkShaderModuleValidationCacheCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkShaderModuleValidationCacheCreateInfoEXT" "vkValidationCache"
+  vkValidationCache :: VkValidationCacheEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkShaderModuleValidationCacheCreateInfoEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkShaderModuleValidationCacheCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                        <*> peek (ptr `plusPtr` 8)
+                                                        <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkShaderModuleValidationCacheCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkShaderModuleValidationCacheCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkValidationCache (poked :: VkShaderModuleValidationCacheCreateInfoEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_validation_flags.hs
@@ -0,0 +1,144 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_validation_flags
+  ( VkValidationCheckEXT(..)
+  , pattern VK_VALIDATION_CHECK_ALL_EXT
+  , pattern VK_VALIDATION_CHECK_SHADERS_EXT
+  , pattern VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT
+  , pattern VK_EXT_VALIDATION_FLAGS_SPEC_VERSION
+  , pattern VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME
+  , VkValidationFlagsEXT(..)
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+
+
+-- ** VkValidationCheckEXT
+
+-- | VkValidationCheckEXT - Specify validation checks to disable
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkValidationFlagsEXT'
+newtype VkValidationCheckEXT = VkValidationCheckEXT Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkValidationCheckEXT where
+  showsPrec _ VK_VALIDATION_CHECK_ALL_EXT = showString "VK_VALIDATION_CHECK_ALL_EXT"
+  showsPrec _ VK_VALIDATION_CHECK_SHADERS_EXT = showString "VK_VALIDATION_CHECK_SHADERS_EXT"
+  showsPrec p (VkValidationCheckEXT x) = showParen (p >= 11) (showString "VkValidationCheckEXT " . showsPrec 11 x)
+
+instance Read VkValidationCheckEXT where
+  readPrec = parens ( choose [ ("VK_VALIDATION_CHECK_ALL_EXT",     pure VK_VALIDATION_CHECK_ALL_EXT)
+                             , ("VK_VALIDATION_CHECK_SHADERS_EXT", pure VK_VALIDATION_CHECK_SHADERS_EXT)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkValidationCheckEXT")
+                        v <- step readPrec
+                        pure (VkValidationCheckEXT v)
+                        )
+                    )
+
+-- | @VK_VALIDATION_CHECK_ALL_EXT@ specifies that all validation checks are
+-- disabled.
+pattern VK_VALIDATION_CHECK_ALL_EXT :: VkValidationCheckEXT
+pattern VK_VALIDATION_CHECK_ALL_EXT = VkValidationCheckEXT 0
+
+-- | @VK_VALIDATION_CHECK_SHADERS_EXT@ specifies that shader validation is
+-- disabled.
+pattern VK_VALIDATION_CHECK_SHADERS_EXT :: VkValidationCheckEXT
+pattern VK_VALIDATION_CHECK_SHADERS_EXT = VkValidationCheckEXT 1
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT"
+pattern VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = VkStructureType 1000061000
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_FLAGS_SPEC_VERSION"
+pattern VK_EXT_VALIDATION_FLAGS_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_VALIDATION_FLAGS_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME"
+pattern VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_VALIDATION_FLAGS_EXTENSION_NAME = "VK_EXT_validation_flags"
+-- | VkValidationFlagsEXT - Specify validation checks to disable for a Vulkan
+-- instance
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT@
+--
+-- -   @pDisabledValidationChecks@ /must/ be a valid pointer to an array of
+--     @disabledValidationCheckCount@ 'VkValidationCheckEXT' values
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkValidationFlagsEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkValidationFlagsEXT" "vkDisabledValidationCheckCount"
+  vkDisabledValidationCheckCount :: Word32
+  , -- No documentation found for Nested "VkValidationFlagsEXT" "vkPDisabledValidationChecks"
+  vkPDisabledValidationChecks :: Ptr VkValidationCheckEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkValidationFlagsEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkValidationFlagsEXT <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkValidationFlagsEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkValidationFlagsEXT))
+                *> poke (ptr `plusPtr` 16) (vkDisabledValidationCheckCount (poked :: VkValidationFlagsEXT))
+                *> poke (ptr `plusPtr` 24) (vkPDisabledValidationChecks (poked :: VkValidationFlagsEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs b/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_EXT_vertex_attribute_divisor.hs
@@ -0,0 +1,180 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT
+  , pattern VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION
+  , pattern VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME
+  , VkVertexInputBindingDivisorDescriptionEXT(..)
+  , VkPipelineVertexInputDivisorStateCreateInfoEXT(..)
+  , VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = VkStructureType 1000190000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT"
+pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = VkStructureType 1000190001
+-- No documentation found for TopLevel "VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION"
+pattern VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION :: Integral a => a
+pattern VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME"
+pattern VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_EXT_VERTEX_ATTRIBUTE_DIVISOR_EXTENSION_NAME = "VK_EXT_vertex_attribute_divisor"
+-- | VkVertexInputBindingDivisorDescriptionEXT - Structure specifying a
+-- 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.
+--
+-- == Valid Usage
+--
+-- -   @binding@ /must/ be less than
+--     @VkPhysicalDeviceLimits@::@maxVertexInputBindings@
+--
+-- -   @divisor@ /must/ be a value between @0@ and
+--     @VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT@::@maxVertexAttribDivisor@,
+--     inclusive.
+--
+-- -   'Graphics.Vulkan.Core10.Pipeline.VkVertexInputBindingDescription'::@inputRate@
+--     /must/ be of type @VK_VERTEX_INPUT_RATE_INSTANCE@ for this
+--     @binding@.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineVertexInputDivisorStateCreateInfoEXT'
+data VkVertexInputBindingDivisorDescriptionEXT = VkVertexInputBindingDivisorDescriptionEXT
+  { -- No documentation found for Nested "VkVertexInputBindingDivisorDescriptionEXT" "vkBinding"
+  vkBinding :: Word32
+  , -- No documentation found for Nested "VkVertexInputBindingDivisorDescriptionEXT" "vkDivisor"
+  vkDivisor :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkVertexInputBindingDivisorDescriptionEXT where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkVertexInputBindingDivisorDescriptionEXT <$> peek (ptr `plusPtr` 0)
+                                                       <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkBinding (poked :: VkVertexInputBindingDivisorDescriptionEXT))
+                *> poke (ptr `plusPtr` 4) (vkDivisor (poked :: VkVertexInputBindingDivisorDescriptionEXT))
+-- | VkPipelineVertexInputDivisorStateCreateInfoEXT - Structure specifying
+-- vertex attributes assignment during instanced rendering
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT@
+--
+-- -   @pVertexBindingDivisors@ /must/ be a valid pointer to an array of
+--     @vertexBindingDivisorCount@
+--     @VkVertexInputBindingDivisorDescriptionEXT@ structures
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineVertexInputDivisorStateCreateInfoEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineVertexInputDivisorStateCreateInfoEXT" "vkVertexBindingDivisorCount"
+  vkVertexBindingDivisorCount :: Word32
+  , -- No documentation found for Nested "VkPipelineVertexInputDivisorStateCreateInfoEXT" "vkPVertexBindingDivisors"
+  vkPVertexBindingDivisors :: Ptr VkVertexInputBindingDivisorDescriptionEXT
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineVertexInputDivisorStateCreateInfoEXT where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineVertexInputDivisorStateCreateInfoEXT <$> peek (ptr `plusPtr` 0)
+                                                            <*> peek (ptr `plusPtr` 8)
+                                                            <*> peek (ptr `plusPtr` 16)
+                                                            <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineVertexInputDivisorStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineVertexInputDivisorStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 16) (vkVertexBindingDivisorCount (poked :: VkPipelineVertexInputDivisorStateCreateInfoEXT))
+                *> poke (ptr `plusPtr` 24) (vkPVertexBindingDivisors (poked :: VkPipelineVertexInputDivisorStateCreateInfoEXT))
+-- | VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT - Structure
+-- describing max value of vertex attribute divisor that can be supported
+-- 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
+--     instanced rendering is enabled.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT" "vkMaxVertexAttribDivisor"
+  vkMaxVertexAttribDivisor :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT <$> peek (ptr `plusPtr` 0)
+                                                                 <*> peek (ptr `plusPtr` 8)
+                                                                 <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT))
+                *> poke (ptr `plusPtr` 16) (vkMaxVertexAttribDivisor (poked :: VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT))
diff --git a/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_GOOGLE_display_timing.hs
@@ -0,0 +1,338 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing
+  ( pattern VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE
+  , pattern VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION
+  , pattern VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME
+  , vkGetRefreshCycleDurationGOOGLE
+  , vkGetPastPresentationTimingGOOGLE
+  , VkRefreshCycleDurationGOOGLE(..)
+  , VkPastPresentationTimingGOOGLE(..)
+  , VkPresentTimesInfoGOOGLE(..)
+  , VkPresentTimeGOOGLE(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  , Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_swapchain
+  ( VkSwapchainKHR
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE"
+pattern VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE = VkStructureType 1000092000
+-- No documentation found for TopLevel "VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION"
+pattern VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION :: Integral a => a
+pattern VK_GOOGLE_DISPLAY_TIMING_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME"
+pattern VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_GOOGLE_DISPLAY_TIMING_EXTENSION_NAME = "VK_GOOGLE_display_timing"
+-- | vkGetRefreshCycleDurationGOOGLE - Obtain the RC duration of the PE’s
+-- display
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to obtain the refresh duration for.
+--
+-- -   @pDisplayTimingProperties@ is a pointer to an instance of the
+--     @VkRefreshCycleDurationGOOGLE@ structure.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   @pDisplayTimingProperties@ /must/ be a valid pointer to a
+--     @VkRefreshCycleDurationGOOGLE@ structure
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkRefreshCycleDurationGOOGLE',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'
+foreign import ccall "vkGetRefreshCycleDurationGOOGLE" vkGetRefreshCycleDurationGOOGLE :: ("device" ::: VkDevice) -> ("swapchain" ::: VkSwapchainKHR) -> ("pDisplayTimingProperties" ::: Ptr VkRefreshCycleDurationGOOGLE) -> IO VkResult
+-- | vkGetPastPresentationTimingGOOGLE - Obtain timing of a
+-- previously-presented image
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to obtain presentation timing
+--     information duration for.
+--
+-- -   @pPresentationTimingCount@ is a pointer to an integer related to the
+--     number of @VkPastPresentationTimingGOOGLE@ structures to query, as
+--     described below.
+--
+-- -   @pPresentationTimings@ is either @NULL@ or a pointer to an an array
+--     of @VkPastPresentationTimingGOOGLE@ structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pPresentationTimings@ is @NULL@, then the number of newly-available
+-- timing records for the given @swapchain@ is returned in
+-- @pPresentationTimingCount@. Otherwise, @pPresentationTimingCount@ /must/
+-- point to a variable set by the user to the number of elements in the
+-- @pPresentationTimings@ array, and on return the variable is overwritten
+-- with the number of structures actually written to
+-- @pPresentationTimings@. If the value of @pPresentationTimingCount@ is
+-- less than the number of newly-available timing records, at most
+-- @pPresentationTimingCount@ structures will be written. If
+-- @pPresentationTimingCount@ is smaller than the number of newly-available
+-- timing records for the given @swapchain@, @VK_INCOMPLETE@ will be
+-- returned instead of @VK_SUCCESS@ to indicate that not all the available
+-- values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   @pPresentationTimingCount@ /must/ be a valid pointer to a @uint32_t@
+--     value
+--
+-- -   If the value referenced by @pPresentationTimingCount@ is not @0@,
+--     and @pPresentationTimings@ is not @NULL@, @pPresentationTimings@
+--     /must/ be a valid pointer to an array of @pPresentationTimingCount@
+--     @VkPastPresentationTimingGOOGLE@ structures
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_OUT_OF_DATE_KHR@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkPastPresentationTimingGOOGLE',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'
+foreign import ccall "vkGetPastPresentationTimingGOOGLE" vkGetPastPresentationTimingGOOGLE :: ("device" ::: VkDevice) -> ("swapchain" ::: VkSwapchainKHR) -> ("pPresentationTimingCount" ::: Ptr Word32) -> ("pPresentationTimings" ::: Ptr VkPastPresentationTimingGOOGLE) -> IO VkResult
+-- | 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"
+  vkRefreshDuration :: Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRefreshCycleDurationGOOGLE where
+  sizeOf ~_ = 8
+  alignment ~_ = 8
+  peek ptr = VkRefreshCycleDurationGOOGLE <$> peek (ptr `plusPtr` 0)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkRefreshDuration (poked :: VkRefreshCycleDurationGOOGLE))
+-- | VkPastPresentationTimingGOOGLE - Structure containing timing information
+-- about a previously-presented image
+--
+-- = Description
+-- #_description#
+--
+-- The results for a given @swapchain@ and @presentID@ are only returned
+-- once from @vkGetPastPresentationTimingGOOGLE@.
+--
+-- The application /can/ use the @VkPastPresentationTimingGOOGLE@ values to
+-- occasionally adjust its timing. For example, if @actualPresentTime@ is
+-- later than expected (e.g. one @refreshDuration@ late), the application
+-- may increase its target IPD to a higher multiple of @refreshDuration@
+-- (e.g. decrease its frame rate from 60Hz to 30Hz). If @actualPresentTime@
+-- and @earliestPresentTime@ are consistently different, and if
+-- @presentMargin@ is consistently large enough, the application may
+-- decrease its target IPD to a smaller multiple of @refreshDuration@ (e.g.
+-- increase its frame rate from 30Hz to 60Hz). If @actualPresentTime@ and
+-- @earliestPresentTime@ are same, and if @presentMargin@ is consistently
+-- high, the application may delay the start of its input-render-present
+-- loop in order to decrease the latency between user input and the
+-- corresponding present (always leaving some margin in case a new image
+-- takes longer to render than the previous image). An application that
+-- desires its target IPD to always be the same as @refreshDuration@, can
+-- also adjust features until @actualPresentTime@ is never late and
+-- @presentMargin@ is satisfactory.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'vkGetPastPresentationTimingGOOGLE'
+data VkPastPresentationTimingGOOGLE = VkPastPresentationTimingGOOGLE
+  { -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkPresentID"
+  vkPresentID :: Word32
+  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkDesiredPresentTime"
+  vkDesiredPresentTime :: Word64
+  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkActualPresentTime"
+  vkActualPresentTime :: Word64
+  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkEarliestPresentTime"
+  vkEarliestPresentTime :: Word64
+  , -- No documentation found for Nested "VkPastPresentationTimingGOOGLE" "vkPresentMargin"
+  vkPresentMargin :: Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPastPresentationTimingGOOGLE where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkPastPresentationTimingGOOGLE <$> peek (ptr `plusPtr` 0)
+                                            <*> peek (ptr `plusPtr` 8)
+                                            <*> peek (ptr `plusPtr` 16)
+                                            <*> peek (ptr `plusPtr` 24)
+                                            <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkPresentID (poked :: VkPastPresentationTimingGOOGLE))
+                *> poke (ptr `plusPtr` 8) (vkDesiredPresentTime (poked :: VkPastPresentationTimingGOOGLE))
+                *> poke (ptr `plusPtr` 16) (vkActualPresentTime (poked :: VkPastPresentationTimingGOOGLE))
+                *> poke (ptr `plusPtr` 24) (vkEarliestPresentTime (poked :: VkPastPresentationTimingGOOGLE))
+                *> poke (ptr `plusPtr` 32) (vkPresentMargin (poked :: VkPastPresentationTimingGOOGLE))
+-- | VkPresentTimesInfoGOOGLE - The earliest time each image should be
+-- presented
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @swapchainCount@ /must/ be the same value as
+--     @VkPresentInfoKHR@::@swapchainCount@, where @VkPresentInfoKHR@ is in
+--     the @pNext@ chain of this @VkPresentTimesInfoGOOGLE@ structure.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE@
+--
+-- -   If @pTimes@ is not @NULL@, @pTimes@ /must/ be a valid pointer to an
+--     array of @swapchainCount@ @VkPresentTimeGOOGLE@ structures
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPresentTimesInfoGOOGLE" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPresentTimesInfoGOOGLE" "vkSwapchainCount"
+  vkSwapchainCount :: Word32
+  , -- No documentation found for Nested "VkPresentTimesInfoGOOGLE" "vkPTimes"
+  vkPTimes :: Ptr VkPresentTimeGOOGLE
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPresentTimesInfoGOOGLE where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPresentTimesInfoGOOGLE <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPresentTimesInfoGOOGLE))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPresentTimesInfoGOOGLE))
+                *> poke (ptr `plusPtr` 16) (vkSwapchainCount (poked :: VkPresentTimesInfoGOOGLE))
+                *> 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"
+  vkPresentID :: Word32
+  , -- No documentation found for Nested "VkPresentTimeGOOGLE" "vkDesiredPresentTime"
+  vkDesiredPresentTime :: Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPresentTimeGOOGLE where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek ptr = VkPresentTimeGOOGLE <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkPresentID (poked :: VkPresentTimeGOOGLE))
+                *> poke (ptr `plusPtr` 8) (vkDesiredPresentTime (poked :: VkPresentTimeGOOGLE))
diff --git a/src/Graphics/Vulkan/Extensions/VK_IMG_filter_cubic.hs b/src/Graphics/Vulkan/Extensions/VK_IMG_filter_cubic.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_IMG_filter_cubic.hs
@@ -0,0 +1,37 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_IMG_filter_cubic
+  ( pattern VK_FILTER_CUBIC_IMG
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG
+  , pattern VK_IMG_FILTER_CUBIC_SPEC_VERSION
+  , pattern VK_IMG_FILTER_CUBIC_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkFormatFeatureFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Sampler
+  ( VkFilter(..)
+  )
+
+
+-- No documentation found for Nested "VkFilter" "VK_FILTER_CUBIC_IMG"
+pattern VK_FILTER_CUBIC_IMG :: VkFilter
+pattern VK_FILTER_CUBIC_IMG = VkFilter 1000015000
+-- No documentation found for Nested "VkFormatFeatureFlagBits" "VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_IMG = VkFormatFeatureFlagBits 0x00002000
+-- No documentation found for TopLevel "VK_IMG_FILTER_CUBIC_SPEC_VERSION"
+pattern VK_IMG_FILTER_CUBIC_SPEC_VERSION :: Integral a => a
+pattern VK_IMG_FILTER_CUBIC_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_IMG_FILTER_CUBIC_EXTENSION_NAME"
+pattern VK_IMG_FILTER_CUBIC_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_IMG_FILTER_CUBIC_EXTENSION_NAME = "VK_IMG_filter_cubic"
diff --git a/src/Graphics/Vulkan/Extensions/VK_IMG_format_pvrtc.hs b/src/Graphics/Vulkan/Extensions/VK_IMG_format_pvrtc.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_IMG_format_pvrtc.hs
@@ -0,0 +1,58 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc
+  ( pattern VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG
+  , pattern VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG
+  , pattern VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG
+  , pattern VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG
+  , pattern VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG
+  , pattern VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG
+  , pattern VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG
+  , pattern VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG
+  , pattern VK_IMG_FORMAT_PVRTC_SPEC_VERSION
+  , pattern VK_IMG_FORMAT_PVRTC_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  )
+
+
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = VkFormat 1000054000
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = VkFormat 1000054001
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = VkFormat 1000054002
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = VkFormat 1000054003
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = VkFormat 1000054004
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = VkFormat 1000054005
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = VkFormat 1000054006
+-- No documentation found for Nested "VkFormat" "VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG"
+pattern VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG :: VkFormat
+pattern VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = VkFormat 1000054007
+-- No documentation found for TopLevel "VK_IMG_FORMAT_PVRTC_SPEC_VERSION"
+pattern VK_IMG_FORMAT_PVRTC_SPEC_VERSION :: Integral a => a
+pattern VK_IMG_FORMAT_PVRTC_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_IMG_FORMAT_PVRTC_EXTENSION_NAME"
+pattern VK_IMG_FORMAT_PVRTC_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_IMG_FORMAT_PVRTC_EXTENSION_NAME = "VK_IMG_format_pvrtc"
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_16bit_storage.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_16bit_storage.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_16bit_storage.hs
@@ -0,0 +1,52 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_16bit_storage
+  ( pattern VK_KHR_16BIT_STORAGE_SPEC_VERSION
+  , pattern VK_KHR_16BIT_STORAGE_EXTENSION_NAME
+  , VkPhysicalDevice16BitStorageFeaturesKHR
+  , pattern VkPhysicalDevice16BitStorageFeaturesKHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES
+  , VkPhysicalDevice16BitStorageFeatures(..)
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_16BIT_STORAGE_SPEC_VERSION"
+pattern VK_KHR_16BIT_STORAGE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_16BIT_STORAGE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_16BIT_STORAGE_EXTENSION_NAME"
+pattern VK_KHR_16BIT_STORAGE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_16BIT_STORAGE_EXTENSION_NAME = "VK_KHR_16bit_storage"
+-- No documentation found for TopLevel "VkPhysicalDevice16BitStorageFeaturesKHR"
+type VkPhysicalDevice16BitStorageFeaturesKHR = VkPhysicalDevice16BitStorageFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDevice16BitStorageFeaturesKHR"
+pattern VkPhysicalDevice16BitStorageFeaturesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("storageBuffer16BitAccess" ::: VkBool32) -> ("uniformAndStorageBuffer16BitAccess" ::: VkBool32) -> ("storagePushConstant16" ::: VkBool32) -> ("storageInputOutput16" ::: VkBool32) -> VkPhysicalDevice16BitStorageFeaturesKHR
+pattern VkPhysicalDevice16BitStorageFeaturesKHR vkSType vkPNext vkStorageBuffer16BitAccess vkUniformAndStorageBuffer16BitAccess vkStoragePushConstant16 vkStorageInputOutput16 = VkPhysicalDevice16BitStorageFeatures vkSType vkPNext vkStorageBuffer16BitAccess vkUniformAndStorageBuffer16BitAccess vkStoragePushConstant16 vkStorageInputOutput16
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_android_surface.hs
@@ -0,0 +1,226 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_android_surface
+  ( ANativeWindow
+  , VkAndroidSurfaceCreateFlagsKHR(..)
+  , pattern VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR
+  , pattern VK_KHR_ANDROID_SURFACE_SPEC_VERSION
+  , pattern VK_KHR_ANDROID_SURFACE_EXTENSION_NAME
+  , vkCreateAndroidSurfaceKHR
+  , VkAndroidSurfaceCreateInfoKHR(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- | Opaque data
+data ANativeWindow
+-- ** VkAndroidSurfaceCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkAndroidSurfaceCreateFlagsKHR"
+newtype VkAndroidSurfaceCreateFlagsKHR = VkAndroidSurfaceCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkAndroidSurfaceCreateFlagsKHR where
+  
+  showsPrec p (VkAndroidSurfaceCreateFlagsKHR x) = showParen (p >= 11) (showString "VkAndroidSurfaceCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkAndroidSurfaceCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkAndroidSurfaceCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkAndroidSurfaceCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR = VkStructureType 1000008000
+-- No documentation found for TopLevel "VK_KHR_ANDROID_SURFACE_SPEC_VERSION"
+pattern VK_KHR_ANDROID_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_ANDROID_SURFACE_SPEC_VERSION = 6
+-- No documentation found for TopLevel "VK_KHR_ANDROID_SURFACE_EXTENSION_NAME"
+pattern VK_KHR_ANDROID_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_ANDROID_SURFACE_EXTENSION_NAME = "VK_KHR_android_surface"
+-- | vkCreateAndroidSurfaceKHR - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' object for an
+-- Android native window
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkAndroidSurfaceCreateInfoKHR@ structure containing parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+-- same @ANativeWindow@ and any attempts to connect to the same
+-- @ANativeWindow@ through other platform mechanisms will fail.
+--
+-- __Note__
+--
+-- In particular, only one @VkSurfaceKHR@ /can/ exist at a time for a given
+-- window. Similarly, a native window /cannot/ be used by both a
+-- @VkSurfaceKHR@ and @EGLSurface@ simultaneously.
+--
+-- If successful, @vkCreateAndroidSurfaceKHR@ increments the
+-- @ANativeWindow@’s reference count, and @vkDestroySurfaceKHR@ will
+-- decrement it.
+--
+-- On Android, when a swapchain’s @imageExtent@ does not match the
+-- surface’s @currentExtent@, the presentable images will be scaled to the
+-- surface’s dimensions during presentation. @minImageExtent@ is (1,1), and
+-- @maxImageExtent@ is the maximum image size supported by the consumer.
+-- For the system compositor, @currentExtent@ is the window size (i.e. the
+-- consumer’s preferred size).
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkAndroidSurfaceCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ 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_NATIVE_WINDOW_IN_USE_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkAndroidSurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkCreateAndroidSurfaceKHR" vkCreateAndroidSurfaceKHR :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkAndroidSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | VkAndroidSurfaceCreateInfoKHR - Structure specifying parameters of a
+-- newly created Android surface object
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @window@ /must/ point to a valid Android @ANativeWindow@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkAndroidSurfaceCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkAndroidSurfaceCreateInfoKHR" "vkFlags"
+  vkFlags :: VkAndroidSurfaceCreateFlagsKHR
+  , -- No documentation found for Nested "VkAndroidSurfaceCreateInfoKHR" "vkWindow"
+  vkWindow :: Ptr ANativeWindow
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAndroidSurfaceCreateInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkAndroidSurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+                                           <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkAndroidSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkAndroidSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkAndroidSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkWindow (poked :: VkAndroidSurfaceCreateInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_bind_memory2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_bind_memory2.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_bind_memory2.hs
@@ -0,0 +1,97 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_bind_memory2
+  ( pattern VK_KHR_BIND_MEMORY_2_SPEC_VERSION
+  , pattern VK_KHR_BIND_MEMORY_2_EXTENSION_NAME
+  , vkBindBufferMemory2KHR
+  , vkBindImageMemory2KHR
+  , VkBindBufferMemoryInfoKHR
+  , pattern VkBindBufferMemoryInfoKHR
+  , VkBindImageMemoryInfoKHR
+  , pattern VkBindImageMemoryInfoKHR
+  , pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR
+  , pattern VK_IMAGE_CREATE_ALIAS_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageCreateFlagBits(..)
+  , VkDeviceSize
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkImage
+  , VkBuffer
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2
+  ( pattern VK_IMAGE_CREATE_ALIAS_BIT
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
+  , pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
+  , VkBindImageMemoryInfo(..)
+  , vkBindImageMemory2
+  , VkBindBufferMemoryInfo(..)
+  , vkBindBufferMemory2
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_BIND_MEMORY_2_SPEC_VERSION"
+pattern VK_KHR_BIND_MEMORY_2_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_BIND_MEMORY_2_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_BIND_MEMORY_2_EXTENSION_NAME"
+pattern VK_KHR_BIND_MEMORY_2_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_BIND_MEMORY_2_EXTENSION_NAME = "VK_KHR_bind_memory2"
+-- No documentation found for TopLevel "vkBindBufferMemory2KHR"
+vkBindBufferMemory2KHR :: ("device" ::: VkDevice) -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr VkBindBufferMemoryInfo) -> IO VkResult
+vkBindBufferMemory2KHR = vkBindBufferMemory2
+-- No documentation found for TopLevel "vkBindImageMemory2KHR"
+vkBindImageMemory2KHR :: ("device" ::: VkDevice) -> ("bindInfoCount" ::: Word32) -> ("pBindInfos" ::: Ptr VkBindImageMemoryInfo) -> IO VkResult
+vkBindImageMemory2KHR = vkBindImageMemory2
+-- No documentation found for TopLevel "VkBindBufferMemoryInfoKHR"
+type VkBindBufferMemoryInfoKHR = VkBindBufferMemoryInfo
+
+
+-- No documentation found for TopLevel "VkBindBufferMemoryInfoKHR"
+pattern VkBindBufferMemoryInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("buffer" ::: VkBuffer) -> ("memory" ::: VkDeviceMemory) -> ("memoryOffset" ::: VkDeviceSize) -> VkBindBufferMemoryInfoKHR
+pattern VkBindBufferMemoryInfoKHR vkSType vkPNext vkBuffer vkMemory vkMemoryOffset = VkBindBufferMemoryInfo vkSType vkPNext vkBuffer vkMemory vkMemoryOffset
+-- No documentation found for TopLevel "VkBindImageMemoryInfoKHR"
+type VkBindImageMemoryInfoKHR = VkBindImageMemoryInfo
+
+
+-- No documentation found for TopLevel "VkBindImageMemoryInfoKHR"
+pattern VkBindImageMemoryInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("image" ::: VkImage) -> ("memory" ::: VkDeviceMemory) -> ("memoryOffset" ::: VkDeviceSize) -> VkBindImageMemoryInfoKHR
+pattern VkBindImageMemoryInfoKHR vkSType vkPNext vkImage vkMemory vkMemoryOffset = VkBindImageMemoryInfo vkSType vkPNext vkImage vkMemory vkMemoryOffset
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_ALIAS_BIT_KHR"
+pattern VK_IMAGE_CREATE_ALIAS_BIT_KHR :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_ALIAS_BIT_KHR = VK_IMAGE_CREATE_ALIAS_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_dedicated_allocation.hs
@@ -0,0 +1,71 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation
+  ( pattern VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION
+  , pattern VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME
+  , VkMemoryDedicatedRequirementsKHR
+  , pattern VkMemoryDedicatedRequirementsKHR
+  , VkMemoryDedicatedAllocateInfoKHR
+  , pattern VkMemoryDedicatedAllocateInfoKHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  , VkImage
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation
+  ( pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO
+  , pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS
+  , VkMemoryDedicatedAllocateInfo(..)
+  , VkMemoryDedicatedRequirements(..)
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION"
+pattern VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_DEDICATED_ALLOCATION_SPEC_VERSION = 3
+-- No documentation found for TopLevel "VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME"
+pattern VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_KHR_dedicated_allocation"
+-- No documentation found for TopLevel "VkMemoryDedicatedRequirementsKHR"
+type VkMemoryDedicatedRequirementsKHR = VkMemoryDedicatedRequirements
+
+
+-- No documentation found for TopLevel "VkMemoryDedicatedRequirementsKHR"
+pattern VkMemoryDedicatedRequirementsKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("prefersDedicatedAllocation" ::: VkBool32) -> ("requiresDedicatedAllocation" ::: VkBool32) -> VkMemoryDedicatedRequirementsKHR
+pattern VkMemoryDedicatedRequirementsKHR vkSType vkPNext vkPrefersDedicatedAllocation vkRequiresDedicatedAllocation = VkMemoryDedicatedRequirements vkSType vkPNext vkPrefersDedicatedAllocation vkRequiresDedicatedAllocation
+-- No documentation found for TopLevel "VkMemoryDedicatedAllocateInfoKHR"
+type VkMemoryDedicatedAllocateInfoKHR = VkMemoryDedicatedAllocateInfo
+
+
+-- No documentation found for TopLevel "VkMemoryDedicatedAllocateInfoKHR"
+pattern VkMemoryDedicatedAllocateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("image" ::: VkImage) -> ("buffer" ::: VkBuffer) -> VkMemoryDedicatedAllocateInfoKHR
+pattern VkMemoryDedicatedAllocateInfoKHR vkSType vkPNext vkImage vkBuffer = VkMemoryDedicatedAllocateInfo vkSType vkPNext vkImage vkBuffer
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_descriptor_update_template.hs
@@ -0,0 +1,131 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template
+  ( pattern VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION
+  , pattern VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME
+  , vkCreateDescriptorUpdateTemplateKHR
+  , vkDestroyDescriptorUpdateTemplateKHR
+  , vkUpdateDescriptorSetWithTemplateKHR
+  , VkDescriptorUpdateTemplateTypeKHR
+  , VkDescriptorUpdateTemplateCreateFlagsKHR
+  , VkDescriptorUpdateTemplateKHR
+  , VkDescriptorUpdateTemplateEntryKHR
+  , pattern VkDescriptorUpdateTemplateEntryKHR
+  , VkDescriptorUpdateTemplateCreateInfoKHR
+  , pattern VkDescriptorUpdateTemplateCreateInfoKHR
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR
+  , pattern VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR
+  , pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CSize(..)
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkObjectType(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorType(..)
+  , VkDescriptorSet
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkPipelineBindPoint(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkPipelineLayout
+  )
+import Graphics.Vulkan.Core10.PipelineLayout
+  ( VkDescriptorSetLayout
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template
+  ( pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
+  , pattern VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO
+  , VkDescriptorUpdateTemplateEntry(..)
+  , VkDescriptorUpdateTemplateCreateFlags(..)
+  , VkDescriptorUpdateTemplateType(..)
+  , vkUpdateDescriptorSetWithTemplate
+  , vkDestroyDescriptorUpdateTemplate
+  , VkDescriptorUpdateTemplate
+  , VkDescriptorUpdateTemplateCreateInfo(..)
+  , vkCreateDescriptorUpdateTemplate
+  )
+import Graphics.Vulkan.Extensions.VK_EXT_debug_report
+  ( VkDebugReportObjectTypeEXT(..)
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION"
+pattern VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME"
+pattern VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_DESCRIPTOR_UPDATE_TEMPLATE_EXTENSION_NAME = "VK_KHR_descriptor_update_template"
+-- No documentation found for TopLevel "vkCreateDescriptorUpdateTemplateKHR"
+vkCreateDescriptorUpdateTemplateKHR :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkDescriptorUpdateTemplateCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pDescriptorUpdateTemplate" ::: Ptr VkDescriptorUpdateTemplate) -> IO VkResult
+vkCreateDescriptorUpdateTemplateKHR = vkCreateDescriptorUpdateTemplate
+-- No documentation found for TopLevel "vkDestroyDescriptorUpdateTemplateKHR"
+vkDestroyDescriptorUpdateTemplateKHR :: ("device" ::: VkDevice) -> ("descriptorUpdateTemplate" ::: VkDescriptorUpdateTemplate) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+vkDestroyDescriptorUpdateTemplateKHR = vkDestroyDescriptorUpdateTemplate
+-- No documentation found for TopLevel "vkUpdateDescriptorSetWithTemplateKHR"
+vkUpdateDescriptorSetWithTemplateKHR :: ("device" ::: VkDevice) -> ("descriptorSet" ::: VkDescriptorSet) -> ("descriptorUpdateTemplate" ::: VkDescriptorUpdateTemplate) -> ("pData" ::: Ptr ()) -> IO ()
+vkUpdateDescriptorSetWithTemplateKHR = vkUpdateDescriptorSetWithTemplate
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateTypeKHR"
+type VkDescriptorUpdateTemplateTypeKHR = VkDescriptorUpdateTemplateType
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateCreateFlagsKHR"
+type VkDescriptorUpdateTemplateCreateFlagsKHR = VkDescriptorUpdateTemplateCreateFlags
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateKHR"
+type VkDescriptorUpdateTemplateKHR = VkDescriptorUpdateTemplate
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateEntryKHR"
+type VkDescriptorUpdateTemplateEntryKHR = VkDescriptorUpdateTemplateEntry
+
+
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateEntryKHR"
+pattern VkDescriptorUpdateTemplateEntryKHR :: ("dstBinding" ::: Word32) -> ("dstArrayElement" ::: Word32) -> ("descriptorCount" ::: Word32) -> ("descriptorType" ::: VkDescriptorType) -> ("offset" ::: CSize) -> ("stride" ::: CSize) -> VkDescriptorUpdateTemplateEntryKHR
+pattern VkDescriptorUpdateTemplateEntryKHR vkDstBinding vkDstArrayElement vkDescriptorCount vkDescriptorType vkOffset vkStride = VkDescriptorUpdateTemplateEntry vkDstBinding vkDstArrayElement vkDescriptorCount vkDescriptorType vkOffset vkStride
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateCreateInfoKHR"
+type VkDescriptorUpdateTemplateCreateInfoKHR = VkDescriptorUpdateTemplateCreateInfo
+
+
+-- No documentation found for TopLevel "VkDescriptorUpdateTemplateCreateInfoKHR"
+pattern VkDescriptorUpdateTemplateCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("flags" ::: VkDescriptorUpdateTemplateCreateFlags) -> ("descriptorUpdateEntryCount" ::: Word32) -> ("pDescriptorUpdateEntries" ::: Ptr VkDescriptorUpdateTemplateEntry) -> ("templateType" ::: VkDescriptorUpdateTemplateType) -> ("descriptorSetLayout" ::: VkDescriptorSetLayout) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("pipelineLayout" ::: VkPipelineLayout) -> ("set" ::: Word32) -> VkDescriptorUpdateTemplateCreateInfoKHR
+pattern VkDescriptorUpdateTemplateCreateInfoKHR vkSType vkPNext vkFlags vkDescriptorUpdateEntryCount vkPDescriptorUpdateEntries vkTemplateType vkDescriptorSetLayout vkPipelineBindPoint vkPipelineLayout vkSet = VkDescriptorUpdateTemplateCreateInfo vkSType vkPNext vkFlags vkDescriptorUpdateEntryCount vkPDescriptorUpdateEntries vkTemplateType vkDescriptorSetLayout vkPipelineBindPoint vkPipelineLayout vkSet
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO
+-- No documentation found for TopLevel "VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR"
+pattern VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR :: VkObjectType
+pattern VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE
+-- No documentation found for TopLevel "VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR"
+pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR :: VkDescriptorUpdateTemplateType
+pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET_KHR = VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_DESCRIPTOR_SET
+-- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_device_group.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_device_group.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_device_group.hs
@@ -0,0 +1,236 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_device_group
+  ( pattern VK_KHR_DEVICE_GROUP_SPEC_VERSION
+  , pattern VK_KHR_DEVICE_GROUP_EXTENSION_NAME
+  , vkGetDeviceGroupPeerMemoryFeaturesKHR
+  , vkCmdSetDeviceMaskKHR
+  , vkCmdDispatchBaseKHR
+  , VkPeerMemoryFeatureFlagBitsKHR
+  , VkMemoryAllocateFlagBitsKHR
+  , VkPeerMemoryFeatureFlagsKHR
+  , VkMemoryAllocateFlagsKHR
+  , VkMemoryAllocateFlagsInfoKHR
+  , pattern VkMemoryAllocateFlagsInfoKHR
+  , VkBindBufferMemoryDeviceGroupInfoKHR
+  , pattern VkBindBufferMemoryDeviceGroupInfoKHR
+  , VkBindImageMemoryDeviceGroupInfoKHR
+  , pattern VkBindImageMemoryDeviceGroupInfoKHR
+  , VkDeviceGroupRenderPassBeginInfoKHR
+  , pattern VkDeviceGroupRenderPassBeginInfoKHR
+  , VkDeviceGroupCommandBufferBeginInfoKHR
+  , pattern VkDeviceGroupCommandBufferBeginInfoKHR
+  , VkDeviceGroupSubmitInfoKHR
+  , pattern VkDeviceGroupSubmitInfoKHR
+  , VkDeviceGroupBindSparseInfoKHR
+  , pattern VkDeviceGroupBindSparseInfoKHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR
+  , pattern VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR
+  , pattern VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR
+  , pattern VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR
+  , pattern VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR
+  , pattern VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR
+  , pattern VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR
+  , pattern VK_PIPELINE_CREATE_DISPATCH_BASE_KHR
+  , pattern VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR
+  , pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR
+  , pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageCreateFlagBits(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkDependencyFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkPipelineCreateFlagBits(..)
+  , VkRect2D(..)
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group
+  ( pattern VK_DEPENDENCY_DEVICE_GROUP_BIT
+  , pattern VK_PIPELINE_CREATE_DISPATCH_BASE
+  , pattern VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT
+  , pattern VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT
+  , pattern VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT
+  , pattern VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT
+  , pattern VK_PEER_MEMORY_FEATURE_COPY_DST_BIT
+  , pattern VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO
+  , pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO
+  , VkDeviceGroupBindSparseInfo(..)
+  , VkDeviceGroupSubmitInfo(..)
+  , VkDeviceGroupCommandBufferBeginInfo(..)
+  , VkDeviceGroupRenderPassBeginInfo(..)
+  , VkMemoryAllocateFlagsInfo(..)
+  , VkMemoryAllocateFlags
+  , VkMemoryAllocateFlagBits(..)
+  , VkPeerMemoryFeatureFlagBits(..)
+  , vkCmdDispatchBase
+  , vkCmdSetDeviceMask
+  , VkPeerMemoryFeatureFlags
+  , vkGetDeviceGroupPeerMemoryFeatures
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2
+  ( pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO
+  , pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO
+  , VkBindImageMemoryDeviceGroupInfo(..)
+  , VkBindBufferMemoryDeviceGroupInfo(..)
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_SPEC_VERSION"
+pattern VK_KHR_DEVICE_GROUP_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_DEVICE_GROUP_SPEC_VERSION = 3
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_EXTENSION_NAME"
+pattern VK_KHR_DEVICE_GROUP_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_DEVICE_GROUP_EXTENSION_NAME = "VK_KHR_device_group"
+-- No documentation found for TopLevel "vkGetDeviceGroupPeerMemoryFeaturesKHR"
+vkGetDeviceGroupPeerMemoryFeaturesKHR :: ("device" ::: VkDevice) -> ("heapIndex" ::: Word32) -> ("localDeviceIndex" ::: Word32) -> ("remoteDeviceIndex" ::: Word32) -> ("pPeerMemoryFeatures" ::: Ptr VkPeerMemoryFeatureFlags) -> IO ()
+vkGetDeviceGroupPeerMemoryFeaturesKHR = vkGetDeviceGroupPeerMemoryFeatures
+-- No documentation found for TopLevel "vkCmdSetDeviceMaskKHR"
+vkCmdSetDeviceMaskKHR :: ("commandBuffer" ::: VkCommandBuffer) -> ("deviceMask" ::: Word32) -> IO ()
+vkCmdSetDeviceMaskKHR = vkCmdSetDeviceMask
+-- No documentation found for TopLevel "vkCmdDispatchBaseKHR"
+vkCmdDispatchBaseKHR :: ("commandBuffer" ::: VkCommandBuffer) -> ("baseGroupX" ::: Word32) -> ("baseGroupY" ::: Word32) -> ("baseGroupZ" ::: Word32) -> ("groupCountX" ::: Word32) -> ("groupCountY" ::: Word32) -> ("groupCountZ" ::: Word32) -> IO ()
+vkCmdDispatchBaseKHR = vkCmdDispatchBase
+-- No documentation found for TopLevel "VkPeerMemoryFeatureFlagBitsKHR"
+type VkPeerMemoryFeatureFlagBitsKHR = VkPeerMemoryFeatureFlagBits
+-- No documentation found for TopLevel "VkMemoryAllocateFlagBitsKHR"
+type VkMemoryAllocateFlagBitsKHR = VkMemoryAllocateFlagBits
+-- No documentation found for TopLevel "VkPeerMemoryFeatureFlagsKHR"
+type VkPeerMemoryFeatureFlagsKHR = VkPeerMemoryFeatureFlags
+-- No documentation found for TopLevel "VkMemoryAllocateFlagsKHR"
+type VkMemoryAllocateFlagsKHR = VkMemoryAllocateFlags
+-- No documentation found for TopLevel "VkMemoryAllocateFlagsInfoKHR"
+type VkMemoryAllocateFlagsInfoKHR = VkMemoryAllocateFlagsInfo
+
+
+-- No documentation found for TopLevel "VkMemoryAllocateFlagsInfoKHR"
+pattern VkMemoryAllocateFlagsInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("flags" ::: VkMemoryAllocateFlags) -> ("deviceMask" ::: Word32) -> VkMemoryAllocateFlagsInfoKHR
+pattern VkMemoryAllocateFlagsInfoKHR vkSType vkPNext vkFlags vkDeviceMask = VkMemoryAllocateFlagsInfo vkSType vkPNext vkFlags vkDeviceMask
+-- No documentation found for TopLevel "VkBindBufferMemoryDeviceGroupInfoKHR"
+type VkBindBufferMemoryDeviceGroupInfoKHR = VkBindBufferMemoryDeviceGroupInfo
+
+
+-- No documentation found for TopLevel "VkBindBufferMemoryDeviceGroupInfoKHR"
+pattern VkBindBufferMemoryDeviceGroupInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("deviceIndexCount" ::: Word32) -> ("pDeviceIndices" ::: Ptr Word32) -> VkBindBufferMemoryDeviceGroupInfoKHR
+pattern VkBindBufferMemoryDeviceGroupInfoKHR vkSType vkPNext vkDeviceIndexCount vkPDeviceIndices = VkBindBufferMemoryDeviceGroupInfo vkSType vkPNext vkDeviceIndexCount vkPDeviceIndices
+-- No documentation found for TopLevel "VkBindImageMemoryDeviceGroupInfoKHR"
+type VkBindImageMemoryDeviceGroupInfoKHR = VkBindImageMemoryDeviceGroupInfo
+
+
+-- No documentation found for TopLevel "VkBindImageMemoryDeviceGroupInfoKHR"
+pattern VkBindImageMemoryDeviceGroupInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("deviceIndexCount" ::: Word32) -> ("pDeviceIndices" ::: Ptr Word32) -> ("splitInstanceBindRegionCount" ::: Word32) -> ("pSplitInstanceBindRegions" ::: Ptr VkRect2D) -> VkBindImageMemoryDeviceGroupInfoKHR
+pattern VkBindImageMemoryDeviceGroupInfoKHR vkSType vkPNext vkDeviceIndexCount vkPDeviceIndices vkSplitInstanceBindRegionCount vkPSplitInstanceBindRegions = VkBindImageMemoryDeviceGroupInfo vkSType vkPNext vkDeviceIndexCount vkPDeviceIndices vkSplitInstanceBindRegionCount vkPSplitInstanceBindRegions
+-- No documentation found for TopLevel "VkDeviceGroupRenderPassBeginInfoKHR"
+type VkDeviceGroupRenderPassBeginInfoKHR = VkDeviceGroupRenderPassBeginInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupRenderPassBeginInfoKHR"
+pattern VkDeviceGroupRenderPassBeginInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("deviceMask" ::: Word32) -> ("deviceRenderAreaCount" ::: Word32) -> ("pDeviceRenderAreas" ::: Ptr VkRect2D) -> VkDeviceGroupRenderPassBeginInfoKHR
+pattern VkDeviceGroupRenderPassBeginInfoKHR vkSType vkPNext vkDeviceMask vkDeviceRenderAreaCount vkPDeviceRenderAreas = VkDeviceGroupRenderPassBeginInfo vkSType vkPNext vkDeviceMask vkDeviceRenderAreaCount vkPDeviceRenderAreas
+-- No documentation found for TopLevel "VkDeviceGroupCommandBufferBeginInfoKHR"
+type VkDeviceGroupCommandBufferBeginInfoKHR = VkDeviceGroupCommandBufferBeginInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupCommandBufferBeginInfoKHR"
+pattern VkDeviceGroupCommandBufferBeginInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("deviceMask" ::: Word32) -> VkDeviceGroupCommandBufferBeginInfoKHR
+pattern VkDeviceGroupCommandBufferBeginInfoKHR vkSType vkPNext vkDeviceMask = VkDeviceGroupCommandBufferBeginInfo vkSType vkPNext vkDeviceMask
+-- No documentation found for TopLevel "VkDeviceGroupSubmitInfoKHR"
+type VkDeviceGroupSubmitInfoKHR = VkDeviceGroupSubmitInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupSubmitInfoKHR"
+pattern VkDeviceGroupSubmitInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("waitSemaphoreCount" ::: Word32) -> ("pWaitSemaphoreDeviceIndices" ::: Ptr Word32) -> ("commandBufferCount" ::: Word32) -> ("pCommandBufferDeviceMasks" ::: Ptr Word32) -> ("signalSemaphoreCount" ::: Word32) -> ("pSignalSemaphoreDeviceIndices" ::: Ptr Word32) -> VkDeviceGroupSubmitInfoKHR
+pattern VkDeviceGroupSubmitInfoKHR vkSType vkPNext vkWaitSemaphoreCount vkPWaitSemaphoreDeviceIndices vkCommandBufferCount vkPCommandBufferDeviceMasks vkSignalSemaphoreCount vkPSignalSemaphoreDeviceIndices = VkDeviceGroupSubmitInfo vkSType vkPNext vkWaitSemaphoreCount vkPWaitSemaphoreDeviceIndices vkCommandBufferCount vkPCommandBufferDeviceMasks vkSignalSemaphoreCount vkPSignalSemaphoreDeviceIndices
+-- No documentation found for TopLevel "VkDeviceGroupBindSparseInfoKHR"
+type VkDeviceGroupBindSparseInfoKHR = VkDeviceGroupBindSparseInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupBindSparseInfoKHR"
+pattern VkDeviceGroupBindSparseInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("resourceDeviceIndex" ::: Word32) -> ("memoryDeviceIndex" ::: Word32) -> VkDeviceGroupBindSparseInfoKHR
+pattern VkDeviceGroupBindSparseInfoKHR vkSType vkPNext vkResourceDeviceIndex vkMemoryDeviceIndex = VkDeviceGroupBindSparseInfo vkSType vkPNext vkResourceDeviceIndex vkMemoryDeviceIndex
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR"
+pattern VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_SRC_BIT
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR"
+pattern VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_COPY_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_COPY_DST_BIT
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR"
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT
+-- No documentation found for TopLevel "VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR"
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR :: VkPeerMemoryFeatureFlagBits
+pattern VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT_KHR = VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT
+-- No documentation found for TopLevel "VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR"
+pattern VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR :: VkMemoryAllocateFlagBits
+pattern VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT_KHR = VK_MEMORY_ALLOCATE_DEVICE_MASK_BIT
+-- No documentation found for TopLevel "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR"
+pattern VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR :: VkPipelineCreateFlagBits
+pattern VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT
+-- No documentation found for TopLevel "VK_PIPELINE_CREATE_DISPATCH_BASE_KHR"
+pattern VK_PIPELINE_CREATE_DISPATCH_BASE_KHR :: VkPipelineCreateFlagBits
+pattern VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE
+-- No documentation found for TopLevel "VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR"
+pattern VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR :: VkDependencyFlagBits
+pattern VK_DEPENDENCY_DEVICE_GROUP_BIT_KHR = VK_DEPENDENCY_DEVICE_GROUP_BIT
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"
+pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_device_group_creation.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_device_group_creation.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_device_group_creation.hs
@@ -0,0 +1,100 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_device_group_creation
+  ( pattern VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION
+  , pattern VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME
+  , vkEnumeratePhysicalDeviceGroupsKHR
+  , VkPhysicalDeviceGroupPropertiesKHR
+  , pattern VkPhysicalDeviceGroupPropertiesKHR
+  , VkDeviceGroupDeviceCreateInfoKHR
+  , pattern VkDeviceGroupDeviceCreateInfoKHR
+  , pattern VK_MAX_DEVICE_GROUP_SIZE_KHR
+  , VK_MAX_DEVICE_GROUP_SIZE_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR
+  , pattern VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkMemoryHeapFlagBits(..)
+  , VkPhysicalDevice
+  , VkInstance
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation
+  ( pattern VK_MEMORY_HEAP_MULTI_INSTANCE_BIT
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES
+  , pattern VK_MAX_DEVICE_GROUP_SIZE
+  , VkDeviceGroupDeviceCreateInfo(..)
+  , VK_MAX_DEVICE_GROUP_SIZE
+  , VkPhysicalDeviceGroupProperties(..)
+  , vkEnumeratePhysicalDeviceGroups
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION"
+pattern VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_DEVICE_GROUP_CREATION_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME"
+pattern VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_DEVICE_GROUP_CREATION_EXTENSION_NAME = "VK_KHR_device_group_creation"
+-- No documentation found for TopLevel "vkEnumeratePhysicalDeviceGroupsKHR"
+vkEnumeratePhysicalDeviceGroupsKHR :: ("instance" ::: VkInstance) -> ("pPhysicalDeviceGroupCount" ::: Ptr Word32) -> ("pPhysicalDeviceGroupProperties" ::: Ptr VkPhysicalDeviceGroupProperties) -> IO VkResult
+vkEnumeratePhysicalDeviceGroupsKHR = vkEnumeratePhysicalDeviceGroups
+-- No documentation found for TopLevel "VkPhysicalDeviceGroupPropertiesKHR"
+type VkPhysicalDeviceGroupPropertiesKHR = VkPhysicalDeviceGroupProperties
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceGroupPropertiesKHR"
+pattern VkPhysicalDeviceGroupPropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("physicalDeviceCount" ::: Word32) -> ("physicalDevices" ::: Vector VK_MAX_DEVICE_GROUP_SIZE VkPhysicalDevice) -> ("subsetAllocation" ::: VkBool32) -> VkPhysicalDeviceGroupPropertiesKHR
+pattern VkPhysicalDeviceGroupPropertiesKHR vkSType vkPNext vkPhysicalDeviceCount vkPhysicalDevices vkSubsetAllocation = VkPhysicalDeviceGroupProperties vkSType vkPNext vkPhysicalDeviceCount vkPhysicalDevices vkSubsetAllocation
+-- No documentation found for TopLevel "VkDeviceGroupDeviceCreateInfoKHR"
+type VkDeviceGroupDeviceCreateInfoKHR = VkDeviceGroupDeviceCreateInfo
+
+
+-- No documentation found for TopLevel "VkDeviceGroupDeviceCreateInfoKHR"
+pattern VkDeviceGroupDeviceCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("physicalDeviceCount" ::: Word32) -> ("pPhysicalDevices" ::: Ptr VkPhysicalDevice) -> VkDeviceGroupDeviceCreateInfoKHR
+pattern VkDeviceGroupDeviceCreateInfoKHR vkSType vkPNext vkPhysicalDeviceCount vkPPhysicalDevices = VkDeviceGroupDeviceCreateInfo vkSType vkPNext vkPhysicalDeviceCount vkPPhysicalDevices
+-- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE_KHR"
+pattern VK_MAX_DEVICE_GROUP_SIZE_KHR :: Integral a => a
+pattern VK_MAX_DEVICE_GROUP_SIZE_KHR = VK_MAX_DEVICE_GROUP_SIZE
+
+
+-- No documentation found for TopLevel "VK_MAX_DEVICE_GROUP_SIZE_KHR"
+type VK_MAX_DEVICE_GROUP_SIZE_KHR = VK_MAX_DEVICE_GROUP_SIZE
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO
+-- No documentation found for TopLevel "VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR"
+pattern VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR :: VkMemoryHeapFlagBits
+pattern VK_MEMORY_HEAP_MULTI_INSTANCE_BIT_KHR = VK_MEMORY_HEAP_MULTI_INSTANCE_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_display.hs
@@ -0,0 +1,1080 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_display
+  ( VkDisplayPlaneAlphaFlagBitsKHR(..)
+  , pattern VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR
+  , pattern VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR
+  , pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR
+  , pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR
+  , VkDisplayModeCreateFlagsKHR(..)
+  , VkDisplaySurfaceCreateFlagsKHR(..)
+  , pattern VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR
+  , pattern VK_OBJECT_TYPE_DISPLAY_KHR
+  , pattern VK_OBJECT_TYPE_DISPLAY_MODE_KHR
+  , pattern VK_KHR_DISPLAY_SPEC_VERSION
+  , pattern VK_KHR_DISPLAY_EXTENSION_NAME
+  , VkDisplayKHR
+  , VkDisplayModeKHR
+  , vkGetPhysicalDeviceDisplayPropertiesKHR
+  , vkGetPhysicalDeviceDisplayPlanePropertiesKHR
+  , vkGetDisplayPlaneSupportedDisplaysKHR
+  , vkGetDisplayModePropertiesKHR
+  , vkCreateDisplayModeKHR
+  , vkGetDisplayPlaneCapabilitiesKHR
+  , vkCreateDisplayPlaneSurfaceKHR
+  , VkDisplayPropertiesKHR(..)
+  , VkDisplayPlanePropertiesKHR(..)
+  , VkDisplayModeParametersKHR(..)
+  , VkDisplayModePropertiesKHR(..)
+  , VkDisplayModeCreateInfoKHR(..)
+  , VkDisplayPlaneCapabilitiesKHR(..)
+  , VkDisplaySurfaceCreateInfoKHR(..)
+  , VkDisplayPlaneAlphaFlagsKHR
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  , CChar(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkInstance
+  , VkAllocationCallbacks(..)
+  , VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkOffset2D(..)
+  , VkExtent2D(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceTransformFlagBitsKHR(..)
+  , VkSurfaceTransformFlagsKHR
+  , VkSurfaceKHR
+  )
+
+
+-- ** VkDisplayPlaneAlphaFlagBitsKHR
+
+-- | VkDisplayPlaneAlphaFlagBitsKHR - Alpha blending type
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayPlaneAlphaFlagsKHR', 'VkDisplaySurfaceCreateInfoKHR'
+newtype VkDisplayPlaneAlphaFlagBitsKHR = VkDisplayPlaneAlphaFlagBitsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDisplayPlaneAlphaFlagBitsKHR where
+  showsPrec _ VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"
+  showsPrec _ VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"
+  showsPrec _ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"
+  showsPrec _ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"
+  showsPrec p (VkDisplayPlaneAlphaFlagBitsKHR x) = showParen (p >= 11) (showString "VkDisplayPlaneAlphaFlagBitsKHR " . showsPrec 11 x)
+
+instance Read VkDisplayPlaneAlphaFlagBitsKHR where
+  readPrec = parens ( choose [ ("VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR",                  pure VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR)
+                             , ("VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR",                  pure VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR)
+                             , ("VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR",               pure VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR)
+                             , ("VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDisplayPlaneAlphaFlagBitsKHR")
+                        v <- step readPrec
+                        pure (VkDisplayPlaneAlphaFlagBitsKHR v)
+                        )
+                    )
+
+-- | @VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR@ specifies that the source image
+-- will be treated as opaque.
+pattern VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR :: VkDisplayPlaneAlphaFlagBitsKHR
+pattern VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x00000001
+
+-- | @VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR@ specifies that a global alpha
+-- value /must/ be specified that will be applied to all pixels in the
+-- source image.
+pattern VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR :: VkDisplayPlaneAlphaFlagBitsKHR
+pattern VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x00000002
+
+-- | @VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR@ specifies that the alpha
+-- value will be determined by the alpha channel of the source image’s
+-- pixels. If the source format contains no alpha values, no blending will
+-- be applied. The source alpha values are not premultiplied into the
+-- source image’s other color channels.
+pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR :: VkDisplayPlaneAlphaFlagBitsKHR
+pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x00000004
+
+-- | @VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR@ is equivalent
+-- to @VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR@, except the source alpha
+-- values are assumed to be premultiplied into the source image’s other
+-- color channels.
+pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR :: VkDisplayPlaneAlphaFlagBitsKHR
+pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x00000008
+-- ** VkDisplayModeCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkDisplayModeCreateFlagsKHR"
+newtype VkDisplayModeCreateFlagsKHR = VkDisplayModeCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDisplayModeCreateFlagsKHR where
+  
+  showsPrec p (VkDisplayModeCreateFlagsKHR x) = showParen (p >= 11) (showString "VkDisplayModeCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkDisplayModeCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDisplayModeCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkDisplayModeCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- ** VkDisplaySurfaceCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkDisplaySurfaceCreateFlagsKHR"
+newtype VkDisplaySurfaceCreateFlagsKHR = VkDisplaySurfaceCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDisplaySurfaceCreateFlagsKHR where
+  
+  showsPrec p (VkDisplaySurfaceCreateFlagsKHR x) = showParen (p >= 11) (showString "VkDisplaySurfaceCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkDisplaySurfaceCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDisplaySurfaceCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkDisplaySurfaceCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR = VkStructureType 1000002000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR = VkStructureType 1000002001
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DISPLAY_KHR"
+pattern VK_OBJECT_TYPE_DISPLAY_KHR :: VkObjectType
+pattern VK_OBJECT_TYPE_DISPLAY_KHR = VkObjectType 1000002000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_DISPLAY_MODE_KHR"
+pattern VK_OBJECT_TYPE_DISPLAY_MODE_KHR :: VkObjectType
+pattern VK_OBJECT_TYPE_DISPLAY_MODE_KHR = VkObjectType 1000002001
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_SPEC_VERSION"
+pattern VK_KHR_DISPLAY_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_DISPLAY_SPEC_VERSION = 21
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_EXTENSION_NAME"
+pattern VK_KHR_DISPLAY_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_DISPLAY_EXTENSION_NAME = "VK_KHR_display"
+-- | Dummy data to tag the 'Ptr' with
+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',
+-- 'vkCreateDisplayModeKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkDisplayPowerControlEXT',
+-- 'vkGetDisplayModePropertiesKHR',
+-- 'vkGetDisplayPlaneSupportedDisplaysKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_acquire_xlib_display.vkGetRandROutputDisplayEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkRegisterDisplayEventEXT',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display.vkReleaseDisplayEXT'
+type VkDisplayKHR = Ptr VkDisplayKHR_T
+-- | Dummy data to tag the 'Ptr' with
+data VkDisplayModeKHR_T
+-- | VkDisplayModeKHR - Opaque handle to a display mode object
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayModePropertiesKHR', 'VkDisplaySurfaceCreateInfoKHR',
+-- 'vkCreateDisplayModeKHR', 'vkGetDisplayPlaneCapabilitiesKHR'
+type VkDisplayModeKHR = Ptr VkDisplayModeKHR_T
+-- | vkGetPhysicalDeviceDisplayPropertiesKHR - Query information about the
+-- available displays
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is a physical device.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     display devices available or queried, as described below.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     @VkDisplayPropertiesKHR@ structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pProperties@ is @NULL@, then the number of display devices available
+-- for @physicalDevice@ is returned in @pPropertyCount@. Otherwise,
+-- @pPropertyCount@ /must/ point to a variable set by the user to the
+-- number of elements in the @pProperties@ array, and on return the
+-- variable is overwritten with the number of structures actually written
+-- to @pProperties@. If the value of @pPropertyCount@ is less than the
+-- number of display devices for @physicalDevice@, at most @pPropertyCount@
+-- structures will be written. If @pPropertyCount@ is smaller than the
+-- number of display devices available for @physicalDevice@,
+-- @VK_INCOMPLETE@ will be returned instead of @VK_SUCCESS@ to indicate
+-- that not all the available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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@ @VkDisplayPropertiesKHR@ structures
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayPropertiesKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetPhysicalDeviceDisplayPropertiesKHR" vkGetPhysicalDeviceDisplayPropertiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkDisplayPropertiesKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceDisplayPlanePropertiesKHR - Query the plane
+-- properties
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is a physical device.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     display planes available or queried, as described below.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     @VkDisplayPlanePropertiesKHR@ structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pProperties@ is @NULL@, then the number of display planes available
+-- for @physicalDevice@ is returned in @pPropertyCount@. Otherwise,
+-- @pPropertyCount@ /must/ point to a variable set by the user to the
+-- number of elements in the @pProperties@ array, and on return the
+-- variable is overwritten with the number of structures actually written
+-- to @pProperties@. If the value of @pPropertyCount@ is less than the
+-- number of display planes for @physicalDevice@, at most @pPropertyCount@
+-- structures will be written.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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@ @VkDisplayPlanePropertiesKHR@
+--     structures
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayPlanePropertiesKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" vkGetPhysicalDeviceDisplayPlanePropertiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkDisplayPlanePropertiesKHR) -> IO VkResult
+-- | vkGetDisplayPlaneSupportedDisplaysKHR - Query the list of displays a
+-- plane supports
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is a physical device.
+--
+-- -   @planeIndex@ is the plane which the application wishes to use, and
+--     /must/ be in the range [0, physical device plane count - 1].
+--
+-- -   @pDisplayCount@ is a pointer to an integer related to the number of
+--     displays available or queried, as described below.
+--
+-- -   @pDisplays@ is either @NULL@ or a pointer to an array of
+--     @VkDisplayKHR@ handles.
+--
+-- = Description
+-- #_description#
+--
+-- If @pDisplays@ is @NULL@, then the number of displays usable with the
+-- specified @planeIndex@ for @physicalDevice@ is returned in
+-- @pDisplayCount@. Otherwise, @pDisplayCount@ /must/ point to a variable
+-- set by the user to the number of elements in the @pDisplays@ array, and
+-- on return the variable is overwritten with the number of handles
+-- actually written to @pDisplays@. If the value of @pDisplayCount@ is less
+-- than the number of display planes for @physicalDevice@, at most
+-- @pDisplayCount@ handles will be written. If @pDisplayCount@ is smaller
+-- than the number of displays usable with the specified @planeIndex@ for
+-- @physicalDevice@, @VK_INCOMPLETE@ will be returned instead of
+-- @VK_SUCCESS@ to indicate that not all the available values were
+-- returned.
+--
+-- == Valid Usage
+--
+-- -   @planeIndex@ /must/ be less than the number of display planes
+--     supported by the device as determined by calling
+--     @vkGetPhysicalDeviceDisplayPlanePropertiesKHR@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pDisplayCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pDisplayCount@ is not @0@, and
+--     @pDisplays@ is not @NULL@, @pDisplays@ /must/ be a valid pointer to
+--     an array of @pDisplayCount@ @VkDisplayKHR@ 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@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetDisplayPlaneSupportedDisplaysKHR" vkGetDisplayPlaneSupportedDisplaysKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("planeIndex" ::: Word32) -> ("pDisplayCount" ::: Ptr Word32) -> ("pDisplays" ::: Ptr VkDisplayKHR) -> IO VkResult
+-- | vkGetDisplayModePropertiesKHR - Query the set of mode properties
+-- supported by the display
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device associated with @display@.
+--
+-- -   @display@ is the display to query.
+--
+-- -   @pPropertyCount@ is a pointer to an integer related to the number of
+--     display modes available or queried, as described below.
+--
+-- -   @pProperties@ is either @NULL@ or a pointer to an array of
+--     @VkDisplayModePropertiesKHR@ structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pProperties@ is @NULL@, then the number of display modes available
+-- on the specified @display@ for @physicalDevice@ is returned in
+-- @pPropertyCount@. Otherwise, @pPropertyCount@ /must/ point to a variable
+-- set by the user to the number of elements in the @pProperties@ array,
+-- and on return the variable is overwritten with the number of structures
+-- actually written to @pProperties@. If the value of @pPropertyCount@ is
+-- less than the number of display modes for @physicalDevice@, at most
+-- @pPropertyCount@ structures will be written. If @pPropertyCount@ is
+-- smaller than the number of display modes available on the specified
+-- @display@ for @physicalDevice@, @VK_INCOMPLETE@ will be returned instead
+-- of @VK_SUCCESS@ to indicate that not all the available values were
+-- returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @display@ /must/ be a valid @VkDisplayKHR@ handle
+--
+-- -   @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@ @VkDisplayModePropertiesKHR@
+--     structures
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayKHR', 'VkDisplayModePropertiesKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetDisplayModePropertiesKHR" vkGetDisplayModePropertiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("display" ::: VkDisplayKHR) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkDisplayModePropertiesKHR) -> IO VkResult
+-- | vkCreateDisplayModeKHR - Create a display mode
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device associated with @display@.
+--
+-- -   @display@ is the display to create an additional mode for.
+--
+-- -   @pCreateInfo@ is a 'VkDisplayModeCreateInfoKHR' structure describing
+--     the new mode to create.
+--
+-- -   @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>).
+--
+-- -   @pMode@ returns the handle of the mode created.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @display@ /must/ be a valid @VkDisplayKHR@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDisplayModeCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pMode@ /must/ be a valid pointer to a @VkDisplayModeKHR@ handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @display@ /must/ be externally synchronized
+--
+-- == 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@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDisplayKHR', 'VkDisplayModeCreateInfoKHR', 'VkDisplayModeKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkCreateDisplayModeKHR" vkCreateDisplayModeKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("display" ::: VkDisplayKHR) -> ("pCreateInfo" ::: Ptr VkDisplayModeCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pMode" ::: Ptr VkDisplayModeKHR) -> IO VkResult
+-- | vkGetDisplayPlaneCapabilitiesKHR - Query capabilities of a mode and
+-- plane combination
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device associated with @display@
+--
+-- -   @mode@ is the display mode the application intends to program when
+--     using the specified plane. Note this parameter also implicitly
+--     specifies a display.
+--
+-- -   @planeIndex@ is the plane which the application intends to use with
+--     the display, and is less than the number of display planes supported
+--     by the device.
+--
+-- -   @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
+--
+-- -   @mode@ /must/ be a valid @VkDisplayModeKHR@ handle
+--
+-- -   @pCapabilities@ /must/ be a valid pointer to a
+--     @VkDisplayPlaneCapabilitiesKHR@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @mode@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayModeKHR', 'VkDisplayPlaneCapabilitiesKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetDisplayPlaneCapabilitiesKHR" vkGetDisplayPlaneCapabilitiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("mode" ::: VkDisplayModeKHR) -> ("planeIndex" ::: Word32) -> ("pCapabilities" ::: Ptr VkDisplayPlaneCapabilitiesKHR) -> IO VkResult
+-- | vkCreateDisplayPlaneSurfaceKHR - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' structure
+-- representing a display plane and mode
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance corresponding to the physical device the
+--     targeted display is on.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkDisplaySurfaceCreateInfoKHR' structure specifying which mode,
+--     plane, and other parameters to use, as described below.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkDisplaySurfaceCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkDisplaySurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkCreateDisplayPlaneSurfaceKHR" vkCreateDisplayPlaneSurfaceKHR :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkDisplaySurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | VkDisplayPropertiesKHR - Structure describing an available display
+-- device
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- For devices which have no natural value to return here, implementations
+-- /should/ return the maximum resolution supported.
+--
+-- -   @supportedTransforms@ tells which transforms are supported by this
+--     display. This will contain one or more of the bits from
+--     @VkSurfaceTransformFlagsKHR@.
+--
+-- -   @planeReorderPossible@ tells whether the planes on this display
+--     /can/ have their z order changed. If this is @VK_TRUE@, the
+--     application /can/ re-arrange the planes on this display in any order
+--     relative to each other.
+--
+-- -   @persistentContent@ tells whether the display supports
+--     self-refresh\/internal buffering. If this is true, the application
+--     /can/ submit persistent present operations on swapchains created
+--     against this display.
+--
+-- __Note__
+--
+-- Persistent presents /may/ have higher latency, and /may/ use less power
+-- when the screen content is updated infrequently, or when only a portion
+-- 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"
+  vkDisplay :: VkDisplayKHR
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkDisplayName"
+  vkDisplayName :: Ptr CChar
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPhysicalDimensions"
+  vkPhysicalDimensions :: VkExtent2D
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPhysicalResolution"
+  vkPhysicalResolution :: VkExtent2D
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkSupportedTransforms"
+  vkSupportedTransforms :: VkSurfaceTransformFlagsKHR
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPlaneReorderPossible"
+  vkPlaneReorderPossible :: VkBool32
+  , -- No documentation found for Nested "VkDisplayPropertiesKHR" "vkPersistentContent"
+  vkPersistentContent :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayPropertiesKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkDisplayPropertiesKHR <$> peek (ptr `plusPtr` 0)
+                                    <*> peek (ptr `plusPtr` 8)
+                                    <*> peek (ptr `plusPtr` 16)
+                                    <*> peek (ptr `plusPtr` 24)
+                                    <*> peek (ptr `plusPtr` 32)
+                                    <*> peek (ptr `plusPtr` 36)
+                                    <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplay (poked :: VkDisplayPropertiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkDisplayName (poked :: VkDisplayPropertiesKHR))
+                *> poke (ptr `plusPtr` 16) (vkPhysicalDimensions (poked :: VkDisplayPropertiesKHR))
+                *> poke (ptr `plusPtr` 24) (vkPhysicalResolution (poked :: VkDisplayPropertiesKHR))
+                *> poke (ptr `plusPtr` 32) (vkSupportedTransforms (poked :: VkDisplayPropertiesKHR))
+                *> poke (ptr `plusPtr` 36) (vkPlaneReorderPossible (poked :: VkDisplayPropertiesKHR))
+                *> poke (ptr `plusPtr` 40) (vkPersistentContent (poked :: VkDisplayPropertiesKHR))
+-- | VkDisplayPlanePropertiesKHR - Structure describing display plane
+-- properties
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayKHR', 'vkGetPhysicalDeviceDisplayPlanePropertiesKHR'
+data VkDisplayPlanePropertiesKHR = VkDisplayPlanePropertiesKHR
+  { -- No documentation found for Nested "VkDisplayPlanePropertiesKHR" "vkCurrentDisplay"
+  vkCurrentDisplay :: VkDisplayKHR
+  , -- No documentation found for Nested "VkDisplayPlanePropertiesKHR" "vkCurrentStackIndex"
+  vkCurrentStackIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayPlanePropertiesKHR where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek ptr = VkDisplayPlanePropertiesKHR <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkCurrentDisplay (poked :: VkDisplayPlanePropertiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkCurrentStackIndex (poked :: VkDisplayPlanePropertiesKHR))
+-- | VkDisplayModeParametersKHR - Structure describing display parameters
+-- 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"
+  vkVisibleRegion :: VkExtent2D
+  , -- No documentation found for Nested "VkDisplayModeParametersKHR" "vkRefreshRate"
+  vkRefreshRate :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayModeParametersKHR where
+  sizeOf ~_ = 12
+  alignment ~_ = 4
+  peek ptr = VkDisplayModeParametersKHR <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkVisibleRegion (poked :: VkDisplayModeParametersKHR))
+                *> poke (ptr `plusPtr` 8) (vkRefreshRate (poked :: VkDisplayModeParametersKHR))
+-- | 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"
+  vkDisplayMode :: VkDisplayModeKHR
+  , -- No documentation found for Nested "VkDisplayModePropertiesKHR" "vkParameters"
+  vkParameters :: VkDisplayModeParametersKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayModePropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDisplayModePropertiesKHR <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplayMode (poked :: VkDisplayModePropertiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkParameters (poked :: VkDisplayModePropertiesKHR))
+-- | 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
+--     @parameters@ /must/ be greater than @0@
+--
+-- -   The @refreshRate@ member of @parameters@ /must/ be greater than @0@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDisplayModeCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDisplayModeCreateInfoKHR" "vkFlags"
+  vkFlags :: VkDisplayModeCreateFlagsKHR
+  , -- No documentation found for Nested "VkDisplayModeCreateInfoKHR" "vkParameters"
+  vkParameters :: VkDisplayModeParametersKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayModeCreateInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDisplayModeCreateInfoKHR <$> 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 :: VkDisplayModeCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayModeCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplayModeCreateInfoKHR))
+                *> poke (ptr `plusPtr` 20) (vkParameters (poked :: VkDisplayModeCreateInfoKHR))
+-- | VkDisplayPlaneCapabilitiesKHR - Structure describing capabilities of a
+-- 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
+-- mode and plane. Vendors /may/ support displaying a subset of a
+-- swapchain’s presentable images on the specified display plane. This is
+-- expressed by returning @minSrcPosition@, @maxSrcPosition@,
+-- @minSrcExtent@, and @maxSrcExtent@ values that indicate a range of
+-- possible positions and sizes /may/ be used to specify the region within
+-- the presentable images that source pixels will be read from when
+-- creating a swapchain on the specified display mode and plane.
+--
+-- Vendors /may/ also support mapping the presentable images’ content to a
+-- subset or superset of the visible region in the specified display mode.
+-- This is expressed by returning @minDstPosition@, @maxDstPosition@,
+-- @minDstExtent@ and @maxDstExtent@ values that indicate a range of
+-- possible positions and sizes /may/ be used to describe the region within
+-- the display mode that the source pixels will be mapped to.
+--
+-- Other vendors /may/ support only a 1-1 mapping between pixels in the
+-- presentable images and the display mode. This /may/ be indicated by
+-- returning (0,0) for @minSrcPosition@, @maxSrcPosition@,
+-- @minDstPosition@, and @maxDstPosition@, and (display mode width, display
+-- mode height) for @minSrcExtent@, @maxSrcExtent@, @minDstExtent@, and
+-- @maxDstExtent@.
+--
+-- These values indicate the limits of the implementation’s individual
+-- fields. Not all combinations of values within the offset and extent
+-- ranges returned in @VkDisplayPlaneCapabilitiesKHR@ are guaranteed to be
+-- supported. Vendors /may/ still fail presentation requests that specify
+-- 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"
+  vkSupportedAlpha :: VkDisplayPlaneAlphaFlagsKHR
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinSrcPosition"
+  vkMinSrcPosition :: VkOffset2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxSrcPosition"
+  vkMaxSrcPosition :: VkOffset2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinSrcExtent"
+  vkMinSrcExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxSrcExtent"
+  vkMaxSrcExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinDstPosition"
+  vkMinDstPosition :: VkOffset2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxDstPosition"
+  vkMaxDstPosition :: VkOffset2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMinDstExtent"
+  vkMinDstExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkDisplayPlaneCapabilitiesKHR" "vkMaxDstExtent"
+  vkMaxDstExtent :: VkExtent2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayPlaneCapabilitiesKHR where
+  sizeOf ~_ = 68
+  alignment ~_ = 4
+  peek ptr = VkDisplayPlaneCapabilitiesKHR <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 4)
+                                           <*> peek (ptr `plusPtr` 12)
+                                           <*> peek (ptr `plusPtr` 20)
+                                           <*> peek (ptr `plusPtr` 28)
+                                           <*> peek (ptr `plusPtr` 36)
+                                           <*> peek (ptr `plusPtr` 44)
+                                           <*> peek (ptr `plusPtr` 52)
+                                           <*> peek (ptr `plusPtr` 60)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSupportedAlpha (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 4) (vkMinSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 12) (vkMaxSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 20) (vkMinSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 28) (vkMaxSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 36) (vkMinDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 44) (vkMaxDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 52) (vkMinDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 60) (vkMaxDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
+-- | VkDisplaySurfaceCreateInfoKHR - Structure specifying parameters of a
+-- newly created display plane surface object
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- Creating a display surface /must/ not modify the state of the displays,
+-- planes, or other resources it names. For example, it /must/ not apply
+-- the specified mode to be set on the associated display. Application of
+-- display configuration occurs as a side effect of presenting to a display
+-- surface.
+--
+-- == Valid Usage
+--
+-- -   @planeIndex@ /must/ be less than the number of display planes
+--     supported by the device as determined by calling
+--     @vkGetPhysicalDeviceDisplayPlanePropertiesKHR@
+--
+-- -   If the @planeReorderPossible@ member of the @VkDisplayPropertiesKHR@
+--     structure returned by @vkGetPhysicalDeviceDisplayPropertiesKHR@ for
+--     the display corresponding to @displayMode@ is @VK_TRUE@ then
+--     @planeStackIndex@ /must/ be less than the number of display planes
+--     supported by the device as determined by calling
+--     @vkGetPhysicalDeviceDisplayPlanePropertiesKHR@; otherwise
+--     @planeStackIndex@ /must/ equal the @currentStackIndex@ member of
+--     @VkDisplayPlanePropertiesKHR@ returned by
+--     @vkGetPhysicalDeviceDisplayPlanePropertiesKHR@ for the display plane
+--     corresponding to @displayMode@
+--
+-- -   If @alphaMode@ is @VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR@ then
+--     @globalAlpha@ /must/ be between @0@ and @1@, inclusive
+--
+-- -   @alphaMode@ /must/ be @0@ or one of the bits present in the
+--     @supportedAlpha@ member of @VkDisplayPlaneCapabilitiesKHR@ returned
+--     by @vkGetDisplayPlaneCapabilitiesKHR@ for the display plane
+--     corresponding to @displayMode@
+--
+-- -   The @width@ and @height@ members of @imageExtent@ /must/ be less
+--     than the @maxImageDimensions2D@ member of @VkPhysicalDeviceLimits@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @displayMode@ /must/ be a valid @VkDisplayModeKHR@ handle
+--
+-- -   @transform@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR'
+--     value
+--
+-- -   @alphaMode@ /must/ be a valid 'VkDisplayPlaneAlphaFlagBitsKHR' value
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDisplayModeKHR', 'VkDisplayPlaneAlphaFlagBitsKHR',
+-- 'VkDisplaySurfaceCreateFlagsKHR',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR',
+-- 'vkCreateDisplayPlaneSurfaceKHR'
+data VkDisplaySurfaceCreateInfoKHR = VkDisplaySurfaceCreateInfoKHR
+  { -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkFlags"
+  vkFlags :: VkDisplaySurfaceCreateFlagsKHR
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkDisplayMode"
+  vkDisplayMode :: VkDisplayModeKHR
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkPlaneIndex"
+  vkPlaneIndex :: Word32
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkPlaneStackIndex"
+  vkPlaneStackIndex :: Word32
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkTransform"
+  vkTransform :: VkSurfaceTransformFlagBitsKHR
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkGlobalAlpha"
+  vkGlobalAlpha :: CFloat
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkAlphaMode"
+  vkAlphaMode :: VkDisplayPlaneAlphaFlagBitsKHR
+  , -- No documentation found for Nested "VkDisplaySurfaceCreateInfoKHR" "vkImageExtent"
+  vkImageExtent :: VkExtent2D
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplaySurfaceCreateInfoKHR where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkDisplaySurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+                                           <*> peek (ptr `plusPtr` 24)
+                                           <*> peek (ptr `plusPtr` 32)
+                                           <*> peek (ptr `plusPtr` 36)
+                                           <*> peek (ptr `plusPtr` 40)
+                                           <*> peek (ptr `plusPtr` 44)
+                                           <*> peek (ptr `plusPtr` 48)
+                                           <*> peek (ptr `plusPtr` 52)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkDisplayMode (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkPlaneIndex (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 36) (vkPlaneStackIndex (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkTransform (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 44) (vkGlobalAlpha (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 48) (vkAlphaMode (poked :: VkDisplaySurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 52) (vkImageExtent (poked :: VkDisplaySurfaceCreateInfoKHR))
+-- | 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_display_swapchain.hs
@@ -0,0 +1,213 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_display_swapchain
+  ( pattern VK_ERROR_INCOMPATIBLE_DISPLAY_KHR
+  , pattern VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR
+  , pattern VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION
+  , pattern VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME
+  , vkCreateSharedSwapchainsKHR
+  , VkDisplayPresentInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkRect2D(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_swapchain
+  ( VkSwapchainKHR
+  , VkSwapchainCreateInfoKHR(..)
+  )
+
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_INCOMPATIBLE_DISPLAY_KHR"
+pattern VK_ERROR_INCOMPATIBLE_DISPLAY_KHR :: VkResult
+pattern VK_ERROR_INCOMPATIBLE_DISPLAY_KHR = VkResult (-1000003001)
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR = VkStructureType 1000003000
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION"
+pattern VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_DISPLAY_SWAPCHAIN_SPEC_VERSION = 9
+-- No documentation found for TopLevel "VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME"
+pattern VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_display_swapchain"
+-- | vkCreateSharedSwapchainsKHR - Create multiple swapchains that share
+-- presentable images
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device to create the swapchains for.
+--
+-- -   @swapchainCount@ is the number of swapchains to create.
+--
+-- -   @pCreateInfos@ is a pointer to an array of
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
+--     structures specifying the parameters of the created swapchains.
+--
+-- -   @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>).
+--
+-- -   @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',
+-- except that it takes an array of @VkSwapchainCreateInfoKHR@ structures,
+-- and returns an array of swapchain objects.
+--
+-- The swapchain creation parameters that affect the properties and number
+-- of presentable images /must/ match between all the swapchains. If the
+-- displays used by any of the swapchains do not use the same presentable
+-- image layout or are incompatible in a way that prevents sharing images,
+-- swapchain creation will fail with the result code
+-- @VK_ERROR_INCOMPATIBLE_DISPLAY_KHR@. If any error occurs, no swapchains
+-- will be created. Images presented to multiple swapchains /must/ be
+-- re-acquired from all of them before transitioning away from
+-- @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@. After destroying one or more of the
+-- swapchains, the remaining swapchains and the presentable images /can/
+-- continue to be used.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pCreateInfos@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid @VkSwapchainCreateInfoKHR@ structures
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSwapchains@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ @VkSwapchainKHR@ handles
+--
+-- -   @swapchainCount@ /must/ be greater than @0@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pCreateInfos@[].surface /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pCreateInfos@[].oldSwapchain /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_INCOMPATIBLE_DISPLAY_KHR@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'
+foreign import ccall "vkCreateSharedSwapchainsKHR" vkCreateSharedSwapchainsKHR :: ("device" ::: VkDevice) -> ("swapchainCount" ::: Word32) -> ("pCreateInfos" ::: Ptr VkSwapchainCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSwapchains" ::: Ptr VkSwapchainKHR) -> IO VkResult
+-- | VkDisplayPresentInfoKHR - Structure describing parameters of a queue
+-- presentation to a swapchain
+--
+-- = Description
+-- #_description#
+--
+-- If the extent of the @srcRect@ and @dstRect@ are not equal, the
+-- presented pixels will be scaled accordingly.
+--
+-- == Valid Usage
+--
+-- -   @srcRect@ /must/ specify a rectangular region that is a subset of
+--     the image being presented
+--
+-- -   @dstRect@ /must/ specify a rectangular region that is a subset of
+--     the @visibleRegion@ parameter of the display mode the swapchain
+--     being presented uses
+--
+-- -   If the @persistentContent@ member of the @VkDisplayPropertiesKHR@
+--     structure returned by @vkGetPhysicalDeviceDisplayPropertiesKHR@ for
+--     the display the present operation targets then @persistent@ /must/
+--     be @VK_FALSE@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkSrcRect"
+  vkSrcRect :: VkRect2D
+  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkDstRect"
+  vkDstRect :: VkRect2D
+  , -- No documentation found for Nested "VkDisplayPresentInfoKHR" "vkPersistent"
+  vkPersistent :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDisplayPresentInfoKHR where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkDisplayPresentInfoKHR <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 16)
+                                     <*> peek (ptr `plusPtr` 32)
+                                     <*> peek (ptr `plusPtr` 48)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplayPresentInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayPresentInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSrcRect (poked :: VkDisplayPresentInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkDstRect (poked :: VkDisplayPresentInfoKHR))
+                *> poke (ptr `plusPtr` 48) (vkPersistent (poked :: VkDisplayPresentInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence.hs
@@ -0,0 +1,67 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_fence
+  ( pattern VK_KHR_EXTERNAL_FENCE_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME
+  , VkFenceImportFlagBitsKHR
+  , VkFenceImportFlagsKHR
+  , VkExportFenceCreateInfoKHR
+  , pattern VkExportFenceCreateInfoKHR
+  , pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR
+  , pattern VK_FENCE_IMPORT_TEMPORARY_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence
+  ( pattern VK_FENCE_IMPORT_TEMPORARY_BIT
+  , pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO
+  , VkExportFenceCreateInfo(..)
+  , VkFenceImportFlags
+  , VkFenceImportFlagBits(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+  ( VkExternalFenceHandleTypeFlags
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_FENCE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_FENCE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_FENCE_EXTENSION_NAME = "VK_KHR_external_fence"
+-- No documentation found for TopLevel "VkFenceImportFlagBitsKHR"
+type VkFenceImportFlagBitsKHR = VkFenceImportFlagBits
+-- No documentation found for TopLevel "VkFenceImportFlagsKHR"
+type VkFenceImportFlagsKHR = VkFenceImportFlags
+-- No documentation found for TopLevel "VkExportFenceCreateInfoKHR"
+type VkExportFenceCreateInfoKHR = VkExportFenceCreateInfo
+
+
+-- No documentation found for TopLevel "VkExportFenceCreateInfoKHR"
+pattern VkExportFenceCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleTypes" ::: VkExternalFenceHandleTypeFlags) -> VkExportFenceCreateInfoKHR
+pattern VkExportFenceCreateInfoKHR vkSType vkPNext vkHandleTypes = VkExportFenceCreateInfo vkSType vkPNext vkHandleTypes
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO
+-- No documentation found for TopLevel "VK_FENCE_IMPORT_TEMPORARY_BIT_KHR"
+pattern VK_FENCE_IMPORT_TEMPORARY_BIT_KHR :: VkFenceImportFlagBits
+pattern VK_FENCE_IMPORT_TEMPORARY_BIT_KHR = VK_FENCE_IMPORT_TEMPORARY_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_capabilities.hs
@@ -0,0 +1,120 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities
+  ( pattern VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME
+  , vkGetPhysicalDeviceExternalFencePropertiesKHR
+  , VkExternalFenceHandleTypeFlagBitsKHR
+  , VkExternalFenceFeatureFlagBitsKHR
+  , VkExternalFenceHandleTypeFlagsKHR
+  , VkExternalFenceFeatureFlagsKHR
+  , VkPhysicalDeviceExternalFenceInfoKHR
+  , pattern VkPhysicalDeviceExternalFenceInfoKHR
+  , VkExternalFencePropertiesKHR
+  , pattern VkExternalFencePropertiesKHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR
+  , pattern VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR
+  , pattern VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+  ( pattern VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
+  , pattern VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+  , pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO
+  , VkExternalFenceFeatureFlags
+  , VkExternalFenceHandleTypeFlags
+  , VkExternalFenceFeatureFlagBits(..)
+  , VkExternalFenceHandleTypeFlagBits(..)
+  , VkExternalFenceProperties(..)
+  , VkPhysicalDeviceExternalFenceInfo(..)
+  , vkGetPhysicalDeviceExternalFenceProperties
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_FENCE_CAPABILITIES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_FENCE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_fence_capabilities"
+-- No documentation found for TopLevel "vkGetPhysicalDeviceExternalFencePropertiesKHR"
+vkGetPhysicalDeviceExternalFencePropertiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalFenceInfo" ::: Ptr VkPhysicalDeviceExternalFenceInfo) -> ("pExternalFenceProperties" ::: Ptr VkExternalFenceProperties) -> IO ()
+vkGetPhysicalDeviceExternalFencePropertiesKHR = vkGetPhysicalDeviceExternalFenceProperties
+-- No documentation found for TopLevel "VkExternalFenceHandleTypeFlagBitsKHR"
+type VkExternalFenceHandleTypeFlagBitsKHR = VkExternalFenceHandleTypeFlagBits
+-- No documentation found for TopLevel "VkExternalFenceFeatureFlagBitsKHR"
+type VkExternalFenceFeatureFlagBitsKHR = VkExternalFenceFeatureFlagBits
+-- No documentation found for TopLevel "VkExternalFenceHandleTypeFlagsKHR"
+type VkExternalFenceHandleTypeFlagsKHR = VkExternalFenceHandleTypeFlags
+-- No documentation found for TopLevel "VkExternalFenceFeatureFlagsKHR"
+type VkExternalFenceFeatureFlagsKHR = VkExternalFenceFeatureFlags
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalFenceInfoKHR"
+type VkPhysicalDeviceExternalFenceInfoKHR = VkPhysicalDeviceExternalFenceInfo
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalFenceInfoKHR"
+pattern VkPhysicalDeviceExternalFenceInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleType" ::: VkExternalFenceHandleTypeFlagBits) -> VkPhysicalDeviceExternalFenceInfoKHR
+pattern VkPhysicalDeviceExternalFenceInfoKHR vkSType vkPNext vkHandleType = VkPhysicalDeviceExternalFenceInfo vkSType vkPNext vkHandleType
+-- No documentation found for TopLevel "VkExternalFencePropertiesKHR"
+type VkExternalFencePropertiesKHR = VkExternalFenceProperties
+
+
+-- No documentation found for TopLevel "VkExternalFencePropertiesKHR"
+pattern VkExternalFencePropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("exportFromImportedHandleTypes" ::: VkExternalFenceHandleTypeFlags) -> ("compatibleHandleTypes" ::: VkExternalFenceHandleTypeFlags) -> ("externalFenceFeatures" ::: VkExternalFenceFeatureFlags) -> VkExternalFencePropertiesKHR
+pattern VkExternalFencePropertiesKHR vkSType vkPNext vkExportFromImportedHandleTypes vkCompatibleHandleTypes vkExternalFenceFeatures = VkExternalFenceProperties vkSType vkPNext vkExportFromImportedHandleTypes vkCompatibleHandleTypes vkExternalFenceFeatures
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_FENCE_PROPERTIES
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_FD_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR"
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR :: VkExternalFenceHandleTypeFlagBits
+pattern VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR"
+pattern VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR :: VkExternalFenceFeatureFlagBits
+pattern VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_EXPORTABLE_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR"
+pattern VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR :: VkExternalFenceFeatureFlagBits
+pattern VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_FENCE_FEATURE_IMPORTABLE_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_fd.hs
@@ -0,0 +1,364 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd
+  ( pattern VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR
+  , pattern VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME
+  , vkGetFenceFdKHR
+  , vkImportFenceFdKHR
+  , VkImportFenceFdInfoKHR(..)
+  , VkFenceGetFdInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.C.Types
+  ( CInt(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkFence
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence
+  ( VkFenceImportFlags
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+  ( VkExternalFenceHandleTypeFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR = VkStructureType 1000115000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR = VkStructureType 1000115001
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_FENCE_FD_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_FENCE_FD_EXTENSION_NAME = "VK_KHR_external_fence_fd"
+-- | vkGetFenceFdKHR - Get a POSIX file descriptor handle for a fence
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the fence being
+--     exported.
+--
+-- -   @pGetFdInfo@ is a pointer to an instance of the
+--     'VkFenceGetFdInfoKHR' structure containing parameters of the export
+--     operation.
+--
+-- -   @pFd@ will return the file descriptor representing the fence
+--     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,
+-- the application /must/ release ownership of the file descriptor when it
+-- is no longer needed.
+--
+-- __Note__
+--
+-- Ownership can be released in many ways. For example, the application can
+-- call @close@() on the file descriptor, or transfer ownership back to
+-- Vulkan by using the file descriptor to import a fence payload.
+--
+-- If @pGetFdInfo@::@handleType@ is
+-- @VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT@ and the fence is signaled at
+-- the time @vkGetFenceFdKHR@ is called, @pFd@ /may/ return the value @-1@
+-- instead of a valid file descriptor.
+--
+-- Where supported by the operating system, the implementation /must/ set
+-- the file descriptor to be closed automatically when an @execve@ system
+-- call is made.
+--
+-- 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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pGetFdInfo@ /must/ be a valid pointer to a valid
+--     @VkFenceGetFdInfoKHR@ structure
+--
+-- -   @pFd@ /must/ be a valid pointer to a @int@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkFenceGetFdInfoKHR'
+foreign import ccall "vkGetFenceFdKHR" vkGetFenceFdKHR :: ("device" ::: VkDevice) -> ("pGetFdInfo" ::: Ptr VkFenceGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO VkResult
+-- | vkImportFenceFdKHR - Import a fence from a POSIX file descriptor
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the fence.
+--
+-- -   @pImportFenceFdInfo@ points to a 'VkImportFenceFdInfoKHR' structure
+--     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.
+-- The application /must/ not perform any operations on the file descriptor
+-- after a successful import.
+--
+-- Applications /can/ import the same fence payload into multiple instances
+-- of Vulkan, into the same instance from which it was exported, and
+-- multiple times into a given Vulkan instance.
+--
+-- == Valid Usage
+--
+-- -   @fence@ /must/ not be associated with any queue command that has not
+--     yet completed execution on that queue
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pImportFenceFdInfo@ /must/ be a valid pointer to a valid
+--     @VkImportFenceFdInfoKHR@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkImportFenceFdInfoKHR'
+foreign import ccall "vkImportFenceFdKHR" vkImportFenceFdKHR :: ("device" ::: VkDevice) -> ("pImportFenceFdInfo" ::: Ptr VkImportFenceFdInfoKHR) -> IO VkResult
+-- | 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
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <{html_spec_relative}#synchronization-fence-handletypes-fd Handle Types Supported by VkImportFenceFdInfoKHR>
+--     table.
+--
+-- -   @fd@ /must/ obey any requirements listed for @handleType@ in
+--     <{html_spec_relative}#external-fence-handle-types-compatibility 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
+-- referring to an object that has already signaled. The import operation
+-- will succeed and the @VkFence@ will have a temporarily imported payload
+-- as if a valid file descriptor had been provided.
+--
+-- __Note__
+--
+-- This special behavior for importing an invalid sync file descriptor
+-- allows easier interoperability with other system APIs which use the
+-- convention that an invalid sync file descriptor represents work that has
+-- already completed and doesn’t need to be waited for. It is consistent
+-- with the option for implementations to return a @-1@ file descriptor
+-- when exporting a @VK_EXTERNAL_FENCE_HANDLE_TYPE_SYNC_FD_BIT@ from a
+-- @VkFence@ which is signaled.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkFenceImportFlagBits'
+--     values
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkFence"
+  vkFence :: VkFence
+  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkFlags"
+  vkFlags :: VkFenceImportFlags
+  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalFenceHandleTypeFlagBits
+  , -- No documentation found for Nested "VkImportFenceFdInfoKHR" "vkFd"
+  vkFd :: CInt
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportFenceFdInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkImportFenceFdInfoKHR <$> peek (ptr `plusPtr` 0)
+                                    <*> peek (ptr `plusPtr` 8)
+                                    <*> peek (ptr `plusPtr` 16)
+                                    <*> peek (ptr `plusPtr` 24)
+                                    <*> peek (ptr `plusPtr` 28)
+                                    <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImportFenceFdInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportFenceFdInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFence (poked :: VkImportFenceFdInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkFlags (poked :: VkImportFenceFdInfoKHR))
+                *> poke (ptr `plusPtr` 28) (vkHandleType (poked :: VkImportFenceFdInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkFd (poked :: VkImportFenceFdInfoKHR))
+-- | VkFenceGetFdInfoKHR - Structure describing a POSIX FD fence export
+-- operation
+--
+-- = Description
+-- #_description#
+--
+-- The properties of the file descriptor returned depend on the value of
+-- @handleType@. See
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+-- for a description of the properties of the defined external fence handle
+-- types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkExportFenceCreateInfo'::@handleTypes@
+--     when @fence@’s current payload was created.
+--
+-- -   If @handleType@ refers to a handle type with copy payload
+--     transference semantics, @fence@ /must/ be signaled, or have an
+--     associated
+--     <{html_spec_relative}#synchronization-fences-signaling fence signal operation>
+--     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>
+--     unless that imported payload’s handle type was included in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceProperties'::@exportFromImportedHandleTypes@
+--     for @handleType@.
+--
+-- -   @handleType@ /must/ be defined as a POSIX file descriptor handle.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_FENCE_GET_FD_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkFenceGetFdInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkFenceGetFdInfoKHR" "vkFence"
+  vkFence :: VkFence
+  , -- No documentation found for Nested "VkFenceGetFdInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalFenceHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkFenceGetFdInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkFenceGetFdInfoKHR <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 16)
+                                 <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFenceGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFenceGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFence (poked :: VkFenceGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkFenceGetFdInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_fence_win32.hs
@@ -0,0 +1,439 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_fence_win32
+  ( pattern VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR
+  , pattern VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME
+  , vkGetFenceWin32HandleKHR
+  , vkImportFenceWin32HandleKHR
+  , VkImportFenceWin32HandleInfoKHR(..)
+  , VkExportFenceWin32HandleInfoKHR(..)
+  , VkFenceGetWin32HandleInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkFence
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence
+  ( VkFenceImportFlags
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+  ( VkExternalFenceHandleTypeFlagBits(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
+  ( LPCWSTR
+  )
+import Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
+  ( DWORD
+  , SECURITY_ATTRIBUTES
+  , HANDLE
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR = VkStructureType 1000114000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR = VkStructureType 1000114001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR = VkStructureType 1000114002
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_FENCE_WIN32_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_FENCE_WIN32_EXTENSION_NAME = "VK_KHR_external_fence_win32"
+-- | vkGetFenceWin32HandleKHR - Get a Windows HANDLE for a fence
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the fence being
+--     exported.
+--
+-- -   @pGetWin32HandleInfo@ is a pointer to an instance of the
+--     'VkFenceGetWin32HandleInfoKHR' structure containing parameters of
+--     the export operation.
+--
+-- -   @pHandle@ will return the Windows handle representing the fence
+--     state.
+--
+-- = Description
+-- #_description#
+--
+-- For handle types defined as NT handles, the handles returned by
+-- @vkGetFenceWin32HandleKHR@ are owned by the application. To avoid
+-- leaking resources, the application /must/ release ownership of them
+-- using the @CloseHandle@ system call when they are no longer needed.
+--
+-- 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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pGetWin32HandleInfo@ /must/ be a valid pointer to a valid
+--     @VkFenceGetWin32HandleInfoKHR@ structure
+--
+-- -   @pHandle@ /must/ be a valid pointer to a @HANDLE@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkFenceGetWin32HandleInfoKHR'
+foreign import ccall "vkGetFenceWin32HandleKHR" vkGetFenceWin32HandleKHR :: ("device" ::: VkDevice) -> ("pGetWin32HandleInfo" ::: Ptr VkFenceGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO VkResult
+-- | vkImportFenceWin32HandleKHR - Import a fence from a Windows HANDLE
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the fence.
+--
+-- -   @pImportFenceWin32HandleInfo@ points to a
+--     'VkImportFenceWin32HandleInfoKHR' structure specifying the fence and
+--     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
+-- defined as NT handles, the application /must/ release ownership using
+-- the @CloseHandle@ system call when the handle is no longer needed.
+--
+-- Applications /can/ import the same fence payload into multiple instances
+-- of Vulkan, into the same instance from which it was exported, and
+-- multiple times into a given Vulkan instance.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pImportFenceWin32HandleInfo@ /must/ be a valid pointer to a valid
+--     @VkImportFenceWin32HandleInfoKHR@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkImportFenceWin32HandleInfoKHR'
+foreign import ccall "vkImportFenceWin32HandleKHR" vkImportFenceWin32HandleKHR :: ("device" ::: VkDevice) -> ("pImportFenceWin32HandleInfo" ::: Ptr VkImportFenceWin32HandleInfoKHR) -> IO VkResult
+-- | 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
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <{html_spec_relative}#synchronization-fence-handletypes-win32 Handle Types Supported by VkImportFenceWin32HandleInfoKHR>
+--     table.
+--
+-- -   If @handleType@ is not
+--     @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT@, @name@ /must/ be
+--     @NULL@.
+--
+-- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
+--     name a valid synchronization primitive of the type specified by
+--     @handleType@.
+--
+-- -   If @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be
+--     a valid handle of the type specified by @handleType@.
+--
+-- -   If @handle@ is not @NULL@, @name@ must be @NULL@.
+--
+-- -   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>.
+--
+-- -   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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkFenceImportFlagBits'
+--     values
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   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',
+-- 'vkImportFenceWin32HandleKHR'
+data VkImportFenceWin32HandleInfoKHR = VkImportFenceWin32HandleInfoKHR
+  { -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkFence"
+  vkFence :: VkFence
+  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkFlags"
+  vkFlags :: VkFenceImportFlags
+  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalFenceHandleTypeFlagBits
+  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkHandle"
+  vkHandle :: HANDLE
+  , -- No documentation found for Nested "VkImportFenceWin32HandleInfoKHR" "vkName"
+  vkName :: LPCWSTR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportFenceWin32HandleInfoKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkImportFenceWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+                                             <*> 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 :: VkImportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFence (poked :: VkImportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkFlags (poked :: VkImportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 28) (vkHandleType (poked :: VkImportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkHandle (poked :: VkImportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkName (poked :: VkImportFenceWin32HandleInfoKHR))
+-- | VkExportFenceWin32HandleInfoKHR - Structure specifying additional
+-- 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
+-- created by the application will not inherit the handle, as described in
+-- the MSDN documentation for “Synchronization Object Security and Access
+-- Rights”1. Further, if the structure is not present, the access rights
+-- will be
+--
+-- @DXGI_SHARED_RESOURCE_READ@ | @DXGI_SHARED_RESOURCE_WRITE@
+--
+-- for handles of the following types:
+--
+-- @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT@
+--
+-- [1]
+--     <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686670.aspx>
+--
+-- == Valid Usage
+--
+-- -   If
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkExportFenceCreateInfo'::@handleTypes@
+--     does not include @VK_EXTERNAL_FENCE_HANDLE_TYPE_OPAQUE_WIN32_BIT@,
+--     VkExportFenceWin32HandleInfoKHR /must/ not be in the @pNext@ chain
+--     of 'Graphics.Vulkan.Core10.Fence.VkFenceCreateInfo'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR@
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkPAttributes"
+  vkPAttributes :: Ptr SECURITY_ATTRIBUTES
+  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkDwAccess"
+  vkDwAccess :: DWORD
+  , -- No documentation found for Nested "VkExportFenceWin32HandleInfoKHR" "vkName"
+  vkName :: LPCWSTR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportFenceWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkExportFenceWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+                                             <*> peek (ptr `plusPtr` 24)
+                                             <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkPAttributes (poked :: VkExportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkDwAccess (poked :: VkExportFenceWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkName (poked :: VkExportFenceWin32HandleInfoKHR))
+-- | VkFenceGetWin32HandleInfoKHR - Structure describing a Win32 handle fence
+-- export operation
+--
+-- = Description
+-- #_description#
+--
+-- The properties of the handle returned depend on the value of
+-- @handleType@. See
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+-- for a description of the properties of the defined external fence handle
+-- types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence.VkExportFenceCreateInfo'::@handleTypes@
+--     when the @fence@’s current payload was created.
+--
+-- -   If @handleType@ is defined as an NT handle,
+--     'vkGetFenceWin32HandleKHR' /must/ be called no more than once for
+--     each valid unique combination of @fence@ and @handleType@.
+--
+-- -   @fence@ /must/ not currently have its payload replaced by an
+--     imported payload as described below in
+--     <{html_spec_relative}#synchronization-fences-importing Importing Fence Payloads>
+--     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>
+--     pending execution.
+--
+-- -   @handleType@ /must/ be defined as an NT handle or a global share
+--     handle.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_FENCE_GET_WIN32_HANDLE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities.VkExternalFenceHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkFenceGetWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkFenceGetWin32HandleInfoKHR" "vkFence"
+  vkFence :: VkFence
+  , -- No documentation found for Nested "VkFenceGetWin32HandleInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalFenceHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkFenceGetWin32HandleInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkFenceGetWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 16)
+                                          <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFenceGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFenceGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFence (poked :: VkFenceGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkFenceGetWin32HandleInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory.hs
@@ -0,0 +1,98 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_memory
+  ( pattern VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME
+  , VkExternalMemoryImageCreateInfoKHR
+  , pattern VkExternalMemoryImageCreateInfoKHR
+  , VkExternalMemoryBufferCreateInfoKHR
+  , pattern VkExternalMemoryBufferCreateInfoKHR
+  , VkExportMemoryAllocateInfoKHR
+  , pattern VkExportMemoryAllocateInfoKHR
+  , pattern VK_QUEUE_FAMILY_EXTERNAL_KHR
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR
+  , pattern VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory
+  ( pattern VK_ERROR_INVALID_EXTERNAL_HANDLE
+  , pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO
+  , pattern VK_QUEUE_FAMILY_EXTERNAL
+  , VkExportMemoryAllocateInfo(..)
+  , VkExternalMemoryBufferCreateInfo(..)
+  , VkExternalMemoryImageCreateInfo(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlags
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_MEMORY_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_KHR_external_memory"
+-- No documentation found for TopLevel "VkExternalMemoryImageCreateInfoKHR"
+type VkExternalMemoryImageCreateInfoKHR = VkExternalMemoryImageCreateInfo
+
+
+-- No documentation found for TopLevel "VkExternalMemoryImageCreateInfoKHR"
+pattern VkExternalMemoryImageCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleTypes" ::: VkExternalMemoryHandleTypeFlags) -> VkExternalMemoryImageCreateInfoKHR
+pattern VkExternalMemoryImageCreateInfoKHR vkSType vkPNext vkHandleTypes = VkExternalMemoryImageCreateInfo vkSType vkPNext vkHandleTypes
+-- No documentation found for TopLevel "VkExternalMemoryBufferCreateInfoKHR"
+type VkExternalMemoryBufferCreateInfoKHR = VkExternalMemoryBufferCreateInfo
+
+
+-- No documentation found for TopLevel "VkExternalMemoryBufferCreateInfoKHR"
+pattern VkExternalMemoryBufferCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleTypes" ::: VkExternalMemoryHandleTypeFlags) -> VkExternalMemoryBufferCreateInfoKHR
+pattern VkExternalMemoryBufferCreateInfoKHR vkSType vkPNext vkHandleTypes = VkExternalMemoryBufferCreateInfo vkSType vkPNext vkHandleTypes
+-- No documentation found for TopLevel "VkExportMemoryAllocateInfoKHR"
+type VkExportMemoryAllocateInfoKHR = VkExportMemoryAllocateInfo
+
+
+-- No documentation found for TopLevel "VkExportMemoryAllocateInfoKHR"
+pattern VkExportMemoryAllocateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleTypes" ::: VkExternalMemoryHandleTypeFlags) -> VkExportMemoryAllocateInfoKHR
+pattern VkExportMemoryAllocateInfoKHR vkSType vkPNext vkHandleTypes = VkExportMemoryAllocateInfo vkSType vkPNext vkHandleTypes
+-- No documentation found for TopLevel "VK_QUEUE_FAMILY_EXTERNAL_KHR"
+pattern VK_QUEUE_FAMILY_EXTERNAL_KHR :: Word32
+pattern VK_QUEUE_FAMILY_EXTERNAL_KHR = VK_QUEUE_FAMILY_EXTERNAL
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO
+-- No documentation found for TopLevel "VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR"
+pattern VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR :: VkResult
+pattern VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_capabilities.hs
@@ -0,0 +1,219 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities
+  ( pattern VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
+  , vkGetPhysicalDeviceExternalBufferPropertiesKHR
+  , VkExternalMemoryHandleTypeFlagBitsKHR
+  , VkExternalMemoryFeatureFlagBitsKHR
+  , VkExternalMemoryHandleTypeFlagsKHR
+  , VkExternalMemoryFeatureFlagsKHR
+  , VkExternalMemoryPropertiesKHR
+  , pattern VkExternalMemoryPropertiesKHR
+  , VkPhysicalDeviceExternalImageFormatInfoKHR
+  , pattern VkPhysicalDeviceExternalImageFormatInfoKHR
+  , VkExternalImageFormatPropertiesKHR
+  , pattern VkExternalImageFormatPropertiesKHR
+  , VkPhysicalDeviceExternalBufferInfoKHR
+  , pattern VkPhysicalDeviceExternalBufferInfoKHR
+  , VkExternalBufferPropertiesKHR
+  , pattern VkExternalBufferPropertiesKHR
+  , VkPhysicalDeviceIDPropertiesKHR
+  , pattern VkPhysicalDeviceIDPropertiesKHR
+  , pattern VK_LUID_SIZE_KHR
+  , VK_LUID_SIZE_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  , Word8
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Buffer
+  ( VkBufferUsageFlags
+  , VkBufferCreateFlags
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VK_UUID_SIZE
+  , VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
+  , pattern VK_LUID_SIZE
+  , VK_LUID_SIZE
+  , VkPhysicalDeviceIDProperties(..)
+  , VkExternalImageFormatProperties(..)
+  , VkPhysicalDeviceExternalImageFormatInfo(..)
+  , VkExternalMemoryProperties(..)
+  , VkExternalMemoryFeatureFlags
+  , VkExternalMemoryHandleTypeFlags
+  , VkExternalMemoryFeatureFlagBits(..)
+  , VkExternalMemoryHandleTypeFlagBits(..)
+  , VkExternalBufferProperties(..)
+  , VkPhysicalDeviceExternalBufferInfo(..)
+  , vkGetPhysicalDeviceExternalBufferProperties
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_memory_capabilities"
+-- No documentation found for TopLevel "vkGetPhysicalDeviceExternalBufferPropertiesKHR"
+vkGetPhysicalDeviceExternalBufferPropertiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalBufferInfo" ::: Ptr VkPhysicalDeviceExternalBufferInfo) -> ("pExternalBufferProperties" ::: Ptr VkExternalBufferProperties) -> IO ()
+vkGetPhysicalDeviceExternalBufferPropertiesKHR = vkGetPhysicalDeviceExternalBufferProperties
+-- No documentation found for TopLevel "VkExternalMemoryHandleTypeFlagBitsKHR"
+type VkExternalMemoryHandleTypeFlagBitsKHR = VkExternalMemoryHandleTypeFlagBits
+-- No documentation found for TopLevel "VkExternalMemoryFeatureFlagBitsKHR"
+type VkExternalMemoryFeatureFlagBitsKHR = VkExternalMemoryFeatureFlagBits
+-- No documentation found for TopLevel "VkExternalMemoryHandleTypeFlagsKHR"
+type VkExternalMemoryHandleTypeFlagsKHR = VkExternalMemoryHandleTypeFlags
+-- No documentation found for TopLevel "VkExternalMemoryFeatureFlagsKHR"
+type VkExternalMemoryFeatureFlagsKHR = VkExternalMemoryFeatureFlags
+-- No documentation found for TopLevel "VkExternalMemoryPropertiesKHR"
+type VkExternalMemoryPropertiesKHR = VkExternalMemoryProperties
+
+
+-- No documentation found for TopLevel "VkExternalMemoryPropertiesKHR"
+pattern VkExternalMemoryPropertiesKHR :: ("externalMemoryFeatures" ::: VkExternalMemoryFeatureFlags) -> ("exportFromImportedHandleTypes" ::: VkExternalMemoryHandleTypeFlags) -> ("compatibleHandleTypes" ::: VkExternalMemoryHandleTypeFlags) -> VkExternalMemoryPropertiesKHR
+pattern VkExternalMemoryPropertiesKHR vkExternalMemoryFeatures vkExportFromImportedHandleTypes vkCompatibleHandleTypes = VkExternalMemoryProperties vkExternalMemoryFeatures vkExportFromImportedHandleTypes vkCompatibleHandleTypes
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalImageFormatInfoKHR"
+type VkPhysicalDeviceExternalImageFormatInfoKHR = VkPhysicalDeviceExternalImageFormatInfo
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalImageFormatInfoKHR"
+pattern VkPhysicalDeviceExternalImageFormatInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleType" ::: VkExternalMemoryHandleTypeFlagBits) -> VkPhysicalDeviceExternalImageFormatInfoKHR
+pattern VkPhysicalDeviceExternalImageFormatInfoKHR vkSType vkPNext vkHandleType = VkPhysicalDeviceExternalImageFormatInfo vkSType vkPNext vkHandleType
+-- No documentation found for TopLevel "VkExternalImageFormatPropertiesKHR"
+type VkExternalImageFormatPropertiesKHR = VkExternalImageFormatProperties
+
+
+-- No documentation found for TopLevel "VkExternalImageFormatPropertiesKHR"
+pattern VkExternalImageFormatPropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("externalMemoryProperties" ::: VkExternalMemoryProperties) -> VkExternalImageFormatPropertiesKHR
+pattern VkExternalImageFormatPropertiesKHR vkSType vkPNext vkExternalMemoryProperties = VkExternalImageFormatProperties vkSType vkPNext vkExternalMemoryProperties
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalBufferInfoKHR"
+type VkPhysicalDeviceExternalBufferInfoKHR = VkPhysicalDeviceExternalBufferInfo
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalBufferInfoKHR"
+pattern VkPhysicalDeviceExternalBufferInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("flags" ::: VkBufferCreateFlags) -> ("usage" ::: VkBufferUsageFlags) -> ("handleType" ::: VkExternalMemoryHandleTypeFlagBits) -> VkPhysicalDeviceExternalBufferInfoKHR
+pattern VkPhysicalDeviceExternalBufferInfoKHR vkSType vkPNext vkFlags vkUsage vkHandleType = VkPhysicalDeviceExternalBufferInfo vkSType vkPNext vkFlags vkUsage vkHandleType
+-- No documentation found for TopLevel "VkExternalBufferPropertiesKHR"
+type VkExternalBufferPropertiesKHR = VkExternalBufferProperties
+
+
+-- No documentation found for TopLevel "VkExternalBufferPropertiesKHR"
+pattern VkExternalBufferPropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("externalMemoryProperties" ::: VkExternalMemoryProperties) -> VkExternalBufferPropertiesKHR
+pattern VkExternalBufferPropertiesKHR vkSType vkPNext vkExternalMemoryProperties = VkExternalBufferProperties vkSType vkPNext vkExternalMemoryProperties
+-- No documentation found for TopLevel "VkPhysicalDeviceIDPropertiesKHR"
+type VkPhysicalDeviceIDPropertiesKHR = VkPhysicalDeviceIDProperties
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceIDPropertiesKHR"
+pattern VkPhysicalDeviceIDPropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("deviceUUID" ::: Vector VK_UUID_SIZE Word8) -> ("driverUUID" ::: Vector VK_UUID_SIZE Word8) -> ("deviceLUID" ::: Vector VK_LUID_SIZE Word8) -> ("deviceNodeMask" ::: Word32) -> ("deviceLUIDValid" ::: VkBool32) -> VkPhysicalDeviceIDPropertiesKHR
+pattern VkPhysicalDeviceIDPropertiesKHR vkSType vkPNext vkDeviceUUID vkDriverUUID vkDeviceLUID vkDeviceNodeMask vkDeviceLUIDValid = VkPhysicalDeviceIDProperties vkSType vkPNext vkDeviceUUID vkDriverUUID vkDeviceLUID vkDeviceNodeMask vkDeviceLUIDValid
+-- No documentation found for TopLevel "VK_LUID_SIZE_KHR"
+pattern VK_LUID_SIZE_KHR :: Integral a => a
+pattern VK_LUID_SIZE_KHR = VK_LUID_SIZE
+
+
+-- No documentation found for TopLevel "VK_LUID_SIZE_KHR"
+type VK_LUID_SIZE_KHR = VK_LUID_SIZE
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_BUFFER_PROPERTIES
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR :: VkExternalMemoryHandleTypeFlagBits
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT_KHR = VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR :: VkExternalMemoryFeatureFlagBits
+pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR :: VkExternalMemoryFeatureFlagBits
+pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR"
+pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR :: VkExternalMemoryFeatureFlagBits
+pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_fd.hs
@@ -0,0 +1,342 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd
+  ( pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR
+  , pattern VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME
+  , vkGetMemoryFdKHR
+  , vkGetMemoryFdPropertiesKHR
+  , VkImportMemoryFdInfoKHR(..)
+  , VkMemoryFdPropertiesKHR(..)
+  , VkMemoryGetFdInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CInt(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR = VkStructureType 1000074000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_FD_PROPERTIES_KHR = VkStructureType 1000074001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR = VkStructureType 1000074002
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_MEMORY_FD_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_MEMORY_FD_EXTENSION_NAME = "VK_KHR_external_memory_fd"
+-- | vkGetMemoryFdKHR - Get a POSIX file descriptor for a memory object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the device memory being
+--     exported.
+--
+-- -   @pGetFdInfo@ is a pointer to an instance of the
+--     'VkMemoryGetFdInfoKHR' structure containing parameters of the export
+--     operation.
+--
+-- -   @pFd@ will return a file descriptor representing the underlying
+--     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,
+-- the application /must/ release ownership of the file descriptor using
+-- the @close@ system call when it is no longer needed, or by importing a
+-- Vulkan memory object from it. Where supported by the operating system,
+-- the implementation /must/ set the file descriptor to be closed
+-- automatically when an @execve@ system call is made.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pGetFdInfo@ /must/ be a valid pointer to a valid
+--     @VkMemoryGetFdInfoKHR@ structure
+--
+-- -   @pFd@ /must/ be a valid pointer to a @int@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkMemoryGetFdInfoKHR'
+foreign import ccall "vkGetMemoryFdKHR" vkGetMemoryFdKHR :: ("device" ::: VkDevice) -> ("pGetFdInfo" ::: Ptr VkMemoryGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO VkResult
+-- | vkGetMemoryFdPropertiesKHR - Get Properties of External Memory File
+-- Descriptors
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that will be importing @fd@.
+--
+-- -   @handleType@ is the type of the handle @fd@.
+--
+-- -   @fd@ is the handle which will be imported.
+--
+-- -   @pMemoryFdProperties@ will return properties of the handle @fd@.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @fd@ /must/ be an external memory handle created outside of the
+--     Vulkan API.
+--
+-- -   @handleType@ /must/ not be
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT_KHR@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- -   @pMemoryFdProperties@ /must/ be a valid pointer to a
+--     @VkMemoryFdPropertiesKHR@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkMemoryFdPropertiesKHR'
+foreign import ccall "vkGetMemoryFdPropertiesKHR" vkGetMemoryFdPropertiesKHR :: ("device" ::: VkDevice) -> ("handleType" ::: VkExternalMemoryHandleTypeFlagBits) -> ("fd" ::: CInt) -> ("pMemoryFdProperties" ::: Ptr VkMemoryFdPropertiesKHR) -> IO VkResult
+-- | VkImportMemoryFdInfoKHR - import memory created on the same physical
+-- 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
+-- application /must/ not perform any operations on the file descriptor
+-- after a successful import.
+--
+-- Applications /can/ import the same underlying memory into multiple
+-- instances of Vulkan, into the same instance from which it was exported,
+-- and multiple times into a given Vulkan instance. In all cases, each
+-- import operation /must/ create a distinct @VkDeviceMemory@ object.
+--
+-- == Valid Usage
+--
+-- -   If @handleType@ is not @0@, it /must/ be supported for import, 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'.
+--
+-- -   The memory from which @fd@ was exported /must/ have been created on
+--     the same underlying physical device as @device@.
+--
+-- -   If @handleType@ is not @0@, it /must/ be defined as a POSIX file
+--     descriptor handle.
+--
+-- -   If @handleType@ is not @0@, @fd@ /must/ be a valid handle of the
+--     type specified by @handleType@.
+--
+-- -   The memory represented by @fd@ /must/ have been created from a
+--     physical device and driver that is compatible with @device@ and
+--     @handleType@, as described in
+--     <{html_spec_relative}#external-memory-handle-types-compatibility {html_spec_relative}#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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR@
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportMemoryFdInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportMemoryFdInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagBits
+  , -- No documentation found for Nested "VkImportMemoryFdInfoKHR" "vkFd"
+  vkFd :: CInt
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportMemoryFdInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkImportMemoryFdInfoKHR <$> 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 :: VkImportMemoryFdInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportMemoryFdInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkImportMemoryFdInfoKHR))
+                *> 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryFdPropertiesKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryFdPropertiesKHR" "vkMemoryTypeBits"
+  vkMemoryTypeBits :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryFdPropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryFdPropertiesKHR <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryFdPropertiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryFdPropertiesKHR))
+                *> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryFdPropertiesKHR))
+-- | VkMemoryGetFdInfoKHR - Structure describing a POSIX FD semaphore export
+-- operation
+--
+-- = Description
+-- #_description#
+--
+-- The properties of the file descriptor exported depend on the value of
+-- @handleType@. See
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+-- for a description of the properties of the defined external memory
+-- handle types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExportMemoryAllocateInfo'::@handleTypes@
+--     when @memory@ was created.
+--
+-- -   @handleType@ /must/ be defined as a POSIX file descriptor handle.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MEMORY_GET_FD_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryGetFdInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryGetFdInfoKHR" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  , -- No documentation found for Nested "VkMemoryGetFdInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryGetFdInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkMemoryGetFdInfoKHR <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 8)
+                                  <*> peek (ptr `plusPtr` 16)
+                                  <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkMemoryGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkMemoryGetFdInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_memory_win32.hs
@@ -0,0 +1,460 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
+  ( LPCWSTR
+  , pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR
+  , pattern VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
+  , vkGetMemoryWin32HandleKHR
+  , vkGetMemoryWin32HandlePropertiesKHR
+  , VkImportMemoryWin32HandleInfoKHR(..)
+  , VkExportMemoryWin32HandleInfoKHR(..)
+  , VkMemoryWin32HandlePropertiesKHR(..)
+  , VkMemoryGetWin32HandleInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CWchar
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBits(..)
+  )
+import Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
+  ( DWORD
+  , SECURITY_ATTRIBUTES
+  , HANDLE
+  )
+
+
+-- No documentation found for TopLevel "LPCWSTR"
+type LPCWSTR = Ptr CWchar
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = VkStructureType 1000073000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR = VkStructureType 1000073001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_WIN32_HANDLE_PROPERTIES_KHR = VkStructureType 1000073002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR = VkStructureType 1000073003
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_KHR_external_memory_win32"
+-- | vkGetMemoryWin32HandleKHR - Get a Windows HANDLE for a memory object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the device memory being
+--     exported.
+--
+-- -   @pGetWin32HandleInfo@ is a pointer to an instance of the
+--     'VkMemoryGetWin32HandleInfoKHR' structure containing parameters of
+--     the export operation.
+--
+-- -   @pHandle@ will return the Windows handle representing the underlying
+--     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
+-- leaking resources, the application /must/ release ownership of them
+-- using the @CloseHandle@ system call when they are no longer needed.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pGetWin32HandleInfo@ /must/ be a valid pointer to a valid
+--     @VkMemoryGetWin32HandleInfoKHR@ structure
+--
+-- -   @pHandle@ /must/ be a valid pointer to a @HANDLE@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkMemoryGetWin32HandleInfoKHR'
+foreign import ccall "vkGetMemoryWin32HandleKHR" vkGetMemoryWin32HandleKHR :: ("device" ::: VkDevice) -> ("pGetWin32HandleInfo" ::: Ptr VkMemoryGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO VkResult
+-- | vkGetMemoryWin32HandlePropertiesKHR - Get Properties of External Memory
+-- Win32 Handles
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that will be importing @handle@.
+--
+-- -   @handleType@ is the type of the handle @handle@.
+--
+-- -   @handle@ is the handle which will be imported.
+--
+-- -   @pMemoryWin32HandleProperties@ will return properties of @handle@.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @handle@ /must/ be an external memory handle created outside of the
+--     Vulkan API.
+--
+-- -   @handleType@ /must/ not be one of the handle types defined as
+--     opaque.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     value
+--
+-- -   @pMemoryWin32HandleProperties@ /must/ be a valid pointer to a
+--     @VkMemoryWin32HandlePropertiesKHR@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkMemoryWin32HandlePropertiesKHR'
+foreign import ccall "vkGetMemoryWin32HandlePropertiesKHR" vkGetMemoryWin32HandlePropertiesKHR :: ("device" ::: VkDevice) -> ("handleType" ::: VkExternalMemoryHandleTypeFlagBits) -> ("handle" ::: HANDLE) -> ("pMemoryWin32HandleProperties" ::: Ptr VkMemoryWin32HandlePropertiesKHR) -> IO VkResult
+-- | VkImportMemoryWin32HandleInfoKHR - import Win32 memory created on the
+-- 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
+-- defined as NT handles, the application /must/ release ownership using
+-- the @CloseHandle@ system call when the handle is no longer needed.
+--
+-- Applications /can/ import the same underlying memory into multiple
+-- instances of Vulkan, into the same instance from which it was exported,
+-- and multiple times into a given Vulkan instance. In all cases, each
+-- import operation /must/ create a distinct @VkDeviceMemory@ object.
+--
+-- == Valid Usage
+--
+-- -   If @handleType@ is not @0@, it /must/ be supported for import, 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'.
+--
+-- -   The memory from which @handle@ was exported, or the memory named by
+--     @name@ /must/ have been created on the same underlying physical
+--     device as @device@.
+--
+-- -   If @handleType@ is not @0@, it /must/ be defined as an NT handle or
+--     a global share handle.
+--
+-- -   If @handleType@ is not
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@, or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@, @name@ /must/
+--     be @NULL@.
+--
+-- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
+--     name a valid memory resource of the type specified by @handleType@.
+--
+-- -   If @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be
+--     a valid handle of the type specified by @handleType@.
+--
+-- -   if @handle@ is not @NULL@, @name@ must be @NULL@.
+--
+-- -   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>.
+--
+-- -   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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR@
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagBits
+  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkHandle"
+  vkHandle :: HANDLE
+  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoKHR" "vkName"
+  vkName :: LPCWSTR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportMemoryWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkImportMemoryWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+                                              <*> peek (ptr `plusPtr` 24)
+                                              <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkImportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHandle (poked :: VkImportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkName (poked :: VkImportMemoryWin32HandleInfoKHR))
+-- | VkExportMemoryWin32HandleInfoKHR - Structure specifying additional
+-- 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
+-- created by the application will not inherit the handle, as described in
+-- the MSDN documentation for “Synchronization Object Security and Access
+-- Rights”1. Further, if the structure is not present, the access rights
+-- will be
+--
+-- @DXGI_SHARED_RESOURCE_READ@ | @DXGI_SHARED_RESOURCE_WRITE@
+--
+-- for handles of the following types:
+--
+-- @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT@
+-- @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@
+--
+-- And
+--
+-- @GENERIC_ALL@
+--
+-- for handles of the following types:
+--
+-- @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@
+-- @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@
+--
+-- [1]
+--     <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686670.aspx>
+--
+-- == Valid Usage
+--
+-- -   If
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExportMemoryAllocateInfo'::@handleTypes@
+--     does not include @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@,
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_HEAP_BIT@, or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D12_RESOURCE_BIT@,
+--     VkExportMemoryWin32HandleInfoKHR /must/ not be in the @pNext@ chain
+--     of 'Graphics.Vulkan.Core10.Memory.VkMemoryAllocateInfo'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR@
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkPAttributes"
+  vkPAttributes :: Ptr SECURITY_ATTRIBUTES
+  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkDwAccess"
+  vkDwAccess :: DWORD
+  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoKHR" "vkName"
+  vkName :: LPCWSTR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportMemoryWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkExportMemoryWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+                                              <*> peek (ptr `plusPtr` 24)
+                                              <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkPAttributes (poked :: VkExportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkDwAccess (poked :: VkExportMemoryWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkName (poked :: VkExportMemoryWin32HandleInfoKHR))
+-- | 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryWin32HandlePropertiesKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryWin32HandlePropertiesKHR" "vkMemoryTypeBits"
+  vkMemoryTypeBits :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryWin32HandlePropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkMemoryWin32HandlePropertiesKHR <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryWin32HandlePropertiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryWin32HandlePropertiesKHR))
+                *> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryWin32HandlePropertiesKHR))
+-- | VkMemoryGetWin32HandleInfoKHR - Structure describing a Win32 handle
+-- semaphore export operation
+--
+-- = Description
+-- #_description#
+--
+-- The properties of the handle returned depend on the value of
+-- @handleType@. See
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+-- for a description of the properties of the defined external memory
+-- handle types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory.VkExportMemoryAllocateInfo'::@handleTypes@
+--     when @memory@ was created.
+--
+-- -   If @handleType@ is defined as an NT handle,
+--     'vkGetMemoryWin32HandleKHR' /must/ be called no more than once for
+--     each valid unique combination of @memory@ and @handleType@.
+--
+-- -   @handleType@ /must/ be defined as an NT handle or a global share
+--     handle.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_MEMORY_GET_WIN32_HANDLE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMemoryGetWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMemoryGetWin32HandleInfoKHR" "vkMemory"
+  vkMemory :: VkDeviceMemory
+  , -- No documentation found for Nested "VkMemoryGetWin32HandleInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMemoryGetWin32HandleInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkMemoryGetWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+                                           <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkMemoryGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkMemoryGetWin32HandleInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore.hs
@@ -0,0 +1,67 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore
+  ( pattern VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME
+  , VkSemaphoreImportFlagBitsKHR
+  , VkSemaphoreImportFlagsKHR
+  , VkExportSemaphoreCreateInfoKHR
+  , pattern VkExportSemaphoreCreateInfoKHR
+  , pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR
+  , pattern VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore
+  ( pattern VK_SEMAPHORE_IMPORT_TEMPORARY_BIT
+  , pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO
+  , VkExportSemaphoreCreateInfo(..)
+  , VkSemaphoreImportFlags
+  , VkSemaphoreImportFlagBits(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+  ( VkExternalSemaphoreHandleTypeFlags
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_EXTENSION_NAME = "VK_KHR_external_semaphore"
+-- No documentation found for TopLevel "VkSemaphoreImportFlagBitsKHR"
+type VkSemaphoreImportFlagBitsKHR = VkSemaphoreImportFlagBits
+-- No documentation found for TopLevel "VkSemaphoreImportFlagsKHR"
+type VkSemaphoreImportFlagsKHR = VkSemaphoreImportFlags
+-- No documentation found for TopLevel "VkExportSemaphoreCreateInfoKHR"
+type VkExportSemaphoreCreateInfoKHR = VkExportSemaphoreCreateInfo
+
+
+-- No documentation found for TopLevel "VkExportSemaphoreCreateInfoKHR"
+pattern VkExportSemaphoreCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleTypes" ::: VkExternalSemaphoreHandleTypeFlags) -> VkExportSemaphoreCreateInfoKHR
+pattern VkExportSemaphoreCreateInfoKHR vkSType vkPNext vkHandleTypes = VkExportSemaphoreCreateInfo vkSType vkPNext vkHandleTypes
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO
+-- No documentation found for TopLevel "VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR"
+pattern VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR :: VkSemaphoreImportFlagBits
+pattern VK_SEMAPHORE_IMPORT_TEMPORARY_BIT_KHR = VK_SEMAPHORE_IMPORT_TEMPORARY_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_capabilities.hs
@@ -0,0 +1,125 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
+  ( pattern VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME
+  , vkGetPhysicalDeviceExternalSemaphorePropertiesKHR
+  , VkExternalSemaphoreHandleTypeFlagBitsKHR
+  , VkExternalSemaphoreFeatureFlagBitsKHR
+  , VkExternalSemaphoreHandleTypeFlagsKHR
+  , VkExternalSemaphoreFeatureFlagsKHR
+  , VkPhysicalDeviceExternalSemaphoreInfoKHR
+  , pattern VkPhysicalDeviceExternalSemaphoreInfoKHR
+  , VkExternalSemaphorePropertiesKHR
+  , pattern VkExternalSemaphorePropertiesKHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR
+  , pattern VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR
+  , pattern VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+  ( pattern VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+  , pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
+  , pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
+  , VkExternalSemaphoreFeatureFlags
+  , VkExternalSemaphoreHandleTypeFlags
+  , VkExternalSemaphoreFeatureFlagBits(..)
+  , VkExternalSemaphoreHandleTypeFlagBits(..)
+  , VkExternalSemaphoreProperties(..)
+  , VkPhysicalDeviceExternalSemaphoreInfo(..)
+  , vkGetPhysicalDeviceExternalSemaphoreProperties
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_CAPABILITIES_EXTENSION_NAME = "VK_KHR_external_semaphore_capabilities"
+-- No documentation found for TopLevel "vkGetPhysicalDeviceExternalSemaphorePropertiesKHR"
+vkGetPhysicalDeviceExternalSemaphorePropertiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pExternalSemaphoreInfo" ::: Ptr VkPhysicalDeviceExternalSemaphoreInfo) -> ("pExternalSemaphoreProperties" ::: Ptr VkExternalSemaphoreProperties) -> IO ()
+vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = vkGetPhysicalDeviceExternalSemaphoreProperties
+-- No documentation found for TopLevel "VkExternalSemaphoreHandleTypeFlagBitsKHR"
+type VkExternalSemaphoreHandleTypeFlagBitsKHR = VkExternalSemaphoreHandleTypeFlagBits
+-- No documentation found for TopLevel "VkExternalSemaphoreFeatureFlagBitsKHR"
+type VkExternalSemaphoreFeatureFlagBitsKHR = VkExternalSemaphoreFeatureFlagBits
+-- No documentation found for TopLevel "VkExternalSemaphoreHandleTypeFlagsKHR"
+type VkExternalSemaphoreHandleTypeFlagsKHR = VkExternalSemaphoreHandleTypeFlags
+-- No documentation found for TopLevel "VkExternalSemaphoreFeatureFlagsKHR"
+type VkExternalSemaphoreFeatureFlagsKHR = VkExternalSemaphoreFeatureFlags
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalSemaphoreInfoKHR"
+type VkPhysicalDeviceExternalSemaphoreInfoKHR = VkPhysicalDeviceExternalSemaphoreInfo
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceExternalSemaphoreInfoKHR"
+pattern VkPhysicalDeviceExternalSemaphoreInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("handleType" ::: VkExternalSemaphoreHandleTypeFlagBits) -> VkPhysicalDeviceExternalSemaphoreInfoKHR
+pattern VkPhysicalDeviceExternalSemaphoreInfoKHR vkSType vkPNext vkHandleType = VkPhysicalDeviceExternalSemaphoreInfo vkSType vkPNext vkHandleType
+-- No documentation found for TopLevel "VkExternalSemaphorePropertiesKHR"
+type VkExternalSemaphorePropertiesKHR = VkExternalSemaphoreProperties
+
+
+-- No documentation found for TopLevel "VkExternalSemaphorePropertiesKHR"
+pattern VkExternalSemaphorePropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("exportFromImportedHandleTypes" ::: VkExternalSemaphoreHandleTypeFlags) -> ("compatibleHandleTypes" ::: VkExternalSemaphoreHandleTypeFlags) -> ("externalSemaphoreFeatures" ::: VkExternalSemaphoreFeatureFlags) -> VkExternalSemaphorePropertiesKHR
+pattern VkExternalSemaphorePropertiesKHR vkSType vkPNext vkExportFromImportedHandleTypes vkCompatibleHandleTypes vkExternalSemaphoreFeatures = VkExternalSemaphoreProperties vkSType vkPNext vkExportFromImportedHandleTypes vkCompatibleHandleTypes vkExternalSemaphoreFeatures
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_FD_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR"
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR :: VkExternalSemaphoreHandleTypeFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT_KHR = VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_SYNC_FD_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR"
+pattern VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR :: VkExternalSemaphoreFeatureFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_EXPORTABLE_BIT
+-- No documentation found for TopLevel "VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR"
+pattern VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR :: VkExternalSemaphoreFeatureFlagBits
+pattern VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT_KHR = VK_EXTERNAL_SEMAPHORE_FEATURE_IMPORTABLE_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_fd.hs
@@ -0,0 +1,349 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd
+  ( pattern VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR
+  , pattern VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME
+  , vkGetSemaphoreFdKHR
+  , vkImportSemaphoreFdKHR
+  , VkImportSemaphoreFdInfoKHR(..)
+  , VkSemaphoreGetFdInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.C.Types
+  ( CInt(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkSemaphore
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore
+  ( VkSemaphoreImportFlags
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+  ( VkExternalSemaphoreHandleTypeFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR = VkStructureType 1000079000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR = VkStructureType 1000079001
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_FD_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_FD_EXTENSION_NAME = "VK_KHR_external_semaphore_fd"
+-- | vkGetSemaphoreFdKHR - Get a POSIX file descriptor handle for a semaphore
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the semaphore being
+--     exported.
+--
+-- -   @pGetFdInfo@ is a pointer to an instance of the
+--     'VkSemaphoreGetFdInfoKHR' structure containing parameters of the
+--     export operation.
+--
+-- -   @pFd@ will return the file descriptor representing the semaphore
+--     payload.
+--
+-- = Description
+-- #_description#
+--
+-- Each call to @vkGetSemaphoreFdKHR@ /must/ create a new file descriptor
+-- and transfer ownership of it to the application. To avoid leaking
+-- resources, the application /must/ release ownership of the file
+-- descriptor when it is no longer needed.
+--
+-- __Note__
+--
+-- Ownership can be released in many ways. For example, the application can
+-- call @close@() on the file descriptor, or transfer ownership back to
+-- Vulkan by using the file descriptor to import a semaphore payload.
+--
+-- Where supported by the operating system, the implementation /must/ set
+-- the file descriptor to be closed automatically when an @execve@ system
+-- call is made.
+--
+-- 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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pGetFdInfo@ /must/ be a valid pointer to a valid
+--     @VkSemaphoreGetFdInfoKHR@ structure
+--
+-- -   @pFd@ /must/ be a valid pointer to a @int@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkSemaphoreGetFdInfoKHR'
+foreign import ccall "vkGetSemaphoreFdKHR" vkGetSemaphoreFdKHR :: ("device" ::: VkDevice) -> ("pGetFdInfo" ::: Ptr VkSemaphoreGetFdInfoKHR) -> ("pFd" ::: Ptr CInt) -> IO VkResult
+-- | vkImportSemaphoreFdKHR - Import a semaphore from a POSIX file descriptor
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the semaphore.
+--
+-- -   @pImportSemaphoreFdInfo@ points to a 'VkImportSemaphoreFdInfoKHR'
+--     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
+-- implementation. The application /must/ not perform any operations on the
+-- file descriptor after a successful import.
+--
+-- Applications /can/ import the same semaphore payload into multiple
+-- instances of Vulkan, into the same instance from which it was exported,
+-- and multiple times into a given Vulkan instance.
+--
+-- == Valid Usage
+--
+-- -   @semaphore@ /must/ not be associated with any queue command that has
+--     not yet completed execution on that queue
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pImportSemaphoreFdInfo@ /must/ be a valid pointer to a valid
+--     @VkImportSemaphoreFdInfoKHR@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkImportSemaphoreFdInfoKHR'
+foreign import ccall "vkImportSemaphoreFdKHR" vkImportSemaphoreFdKHR :: ("device" ::: VkDevice) -> ("pImportSemaphoreFdInfo" ::: Ptr VkImportSemaphoreFdInfoKHR) -> IO VkResult
+-- | VkImportSemaphoreFdInfoKHR - Structure specifying POSIX file descriptor
+-- 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
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <{html_spec_relative}#synchronization-semaphore-handletypes-fd Handle Types Supported by VkImportSemaphoreFdInfoKHR>
+--     table.
+--
+-- -   @fd@ /must/ obey any requirements listed for @handleType@ in
+--     <{html_spec_relative}#external-semaphore-handle-types-compatibility external semaphore handle types compatibility>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_FD_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid @VkSemaphore@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkSemaphoreImportFlagBits'
+--     values
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkSemaphore"
+  vkSemaphore :: VkSemaphore
+  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkFlags"
+  vkFlags :: VkSemaphoreImportFlags
+  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
+  , -- No documentation found for Nested "VkImportSemaphoreFdInfoKHR" "vkFd"
+  vkFd :: CInt
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportSemaphoreFdInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkImportSemaphoreFdInfoKHR <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+                                        <*> peek (ptr `plusPtr` 24)
+                                        <*> peek (ptr `plusPtr` 28)
+                                        <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImportSemaphoreFdInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportSemaphoreFdInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSemaphore (poked :: VkImportSemaphoreFdInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkFlags (poked :: VkImportSemaphoreFdInfoKHR))
+                *> poke (ptr `plusPtr` 28) (vkHandleType (poked :: VkImportSemaphoreFdInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkFd (poked :: VkImportSemaphoreFdInfoKHR))
+-- | VkSemaphoreGetFdInfoKHR - Structure describing a POSIX FD semaphore
+-- export operation
+--
+-- = Description
+-- #_description#
+--
+-- The properties of the file descriptor returned depend on the value of
+-- @handleType@. See
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+-- for a description of the properties of the defined external semaphore
+-- handle types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkExportSemaphoreCreateInfo'::@handleTypes@
+--     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>
+--     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>,
+--     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>
+--     pending execution.
+--
+-- -   @handleType@ /must/ be defined as a POSIX file descriptor handle.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SEMAPHORE_GET_FD_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid @VkSemaphore@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSemaphoreGetFdInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSemaphoreGetFdInfoKHR" "vkSemaphore"
+  vkSemaphore :: VkSemaphore
+  , -- No documentation found for Nested "VkSemaphoreGetFdInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSemaphoreGetFdInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkSemaphoreGetFdInfoKHR <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 16)
+                                     <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSemaphoreGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSemaphoreGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSemaphore (poked :: VkSemaphoreGetFdInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkSemaphoreGetFdInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_external_semaphore_win32.hs
@@ -0,0 +1,544 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_win32
+  ( pattern VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR
+  , pattern VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION
+  , pattern VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME
+  , vkGetSemaphoreWin32HandleKHR
+  , vkImportSemaphoreWin32HandleKHR
+  , VkImportSemaphoreWin32HandleInfoKHR(..)
+  , VkExportSemaphoreWin32HandleInfoKHR(..)
+  , VkD3D12FenceSubmitInfoKHR(..)
+  , VkSemaphoreGetWin32HandleInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  , Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkSemaphore
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore
+  ( VkSemaphoreImportFlags
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+  ( VkExternalSemaphoreHandleTypeFlagBits(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
+  ( LPCWSTR
+  )
+import Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
+  ( DWORD
+  , SECURITY_ATTRIBUTES
+  , HANDLE
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = VkStructureType 1000078000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR = VkStructureType 1000078001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR = VkStructureType 1000078002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR = VkStructureType 1000078003
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_WIN32_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME"
+pattern VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_EXTERNAL_SEMAPHORE_WIN32_EXTENSION_NAME = "VK_KHR_external_semaphore_win32"
+-- | vkGetSemaphoreWin32HandleKHR - Get a Windows HANDLE for a semaphore
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the semaphore being
+--     exported.
+--
+-- -   @pGetWin32HandleInfo@ is a pointer to an instance of the
+--     'VkSemaphoreGetWin32HandleInfoKHR' structure containing parameters
+--     of the export operation.
+--
+-- -   @pHandle@ will return the Windows handle representing the semaphore
+--     state.
+--
+-- = Description
+-- #_description#
+--
+-- For handle types defined as NT handles, the handles returned by
+-- @vkGetSemaphoreWin32HandleKHR@ are owned by the application. To avoid
+-- leaking resources, the application /must/ release ownership of them
+-- using the @CloseHandle@ system call when they are no longer needed.
+--
+-- 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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pGetWin32HandleInfo@ /must/ be a valid pointer to a valid
+--     @VkSemaphoreGetWin32HandleInfoKHR@ structure
+--
+-- -   @pHandle@ /must/ be a valid pointer to a @HANDLE@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_TOO_MANY_OBJECTS@
+--
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkSemaphoreGetWin32HandleInfoKHR'
+foreign import ccall "vkGetSemaphoreWin32HandleKHR" vkGetSemaphoreWin32HandleKHR :: ("device" ::: VkDevice) -> ("pGetWin32HandleInfo" ::: Ptr VkSemaphoreGetWin32HandleInfoKHR) -> ("pHandle" ::: Ptr HANDLE) -> IO VkResult
+-- | vkImportSemaphoreWin32HandleKHR - Import a semaphore from a Windows
+-- HANDLE
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that created the semaphore.
+--
+-- -   @pImportSemaphoreWin32HandleInfo@ points to a
+--     'VkImportSemaphoreWin32HandleInfoKHR' structure specifying the
+--     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
+-- defined as NT handles, the application /must/ release ownership using
+-- the @CloseHandle@ system call when the handle is no longer needed.
+--
+-- Applications /can/ import the same semaphore payload into multiple
+-- instances of Vulkan, into the same instance from which it was exported,
+-- and multiple times into a given Vulkan instance.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pImportSemaphoreWin32HandleInfo@ /must/ be a valid pointer to a
+--     valid @VkImportSemaphoreWin32HandleInfoKHR@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_INVALID_EXTERNAL_HANDLE@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkImportSemaphoreWin32HandleInfoKHR'
+foreign import ccall "vkImportSemaphoreWin32HandleKHR" vkImportSemaphoreWin32HandleKHR :: ("device" ::: VkDevice) -> ("pImportSemaphoreWin32HandleInfo" ::: Ptr VkImportSemaphoreWin32HandleInfoKHR) -> IO VkResult
+-- | VkImportSemaphoreWin32HandleInfoKHR - Structure specifying Windows
+-- 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
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a value included in the
+--     <{html_spec_relative}#synchronization-semaphore-handletypes-win32 Handle Types Supported by VkImportSemaphoreWin32HandleInfoKHR>
+--     table.
+--
+-- -   If @handleType@ is not
+--     @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT@ or
+--     @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT@, @name@ /must/
+--     be @NULL@.
+--
+-- -   If @handleType@ is not @0@ and @handle@ is @NULL@, @name@ /must/
+--     name a valid synchronization primitive of the type specified by
+--     @handleType@.
+--
+-- -   If @handleType@ is not @0@ and @name@ is @NULL@, @handle@ /must/ be
+--     a valid handle of the type specified by @handleType@.
+--
+-- -   If @handle@ is not @NULL@, @name@ must be @NULL@.
+--
+-- -   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>.
+--
+-- -   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>.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid @VkSemaphore@ handle
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkSemaphoreImportFlagBits'
+--     values
+--
+-- -   If @handleType@ is not @0@, @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+--     value
+--
+-- == Host Synchronization
+--
+-- -   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',
+-- 'vkImportSemaphoreWin32HandleKHR'
+data VkImportSemaphoreWin32HandleInfoKHR = VkImportSemaphoreWin32HandleInfoKHR
+  { -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkSemaphore"
+  vkSemaphore :: VkSemaphore
+  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkFlags"
+  vkFlags :: VkSemaphoreImportFlags
+  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
+  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkHandle"
+  vkHandle :: HANDLE
+  , -- No documentation found for Nested "VkImportSemaphoreWin32HandleInfoKHR" "vkName"
+  vkName :: LPCWSTR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportSemaphoreWin32HandleInfoKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkImportSemaphoreWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+                                                 <*> 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 :: VkImportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSemaphore (poked :: VkImportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkFlags (poked :: VkImportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 28) (vkHandleType (poked :: VkImportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkHandle (poked :: VkImportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkName (poked :: VkImportSemaphoreWin32HandleInfoKHR))
+-- | VkExportSemaphoreWin32HandleInfoKHR - Structure specifying additional
+-- 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
+-- created by the application will not inherit the handle, as described in
+-- the MSDN documentation for “Synchronization Object Security and Access
+-- Rights”1. Further, if the structure is not present, the access rights
+-- will be
+--
+-- @DXGI_SHARED_RESOURCE_READ@ | @DXGI_SHARED_RESOURCE_WRITE@
+--
+-- for handles of the following types:
+--
+-- @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT@
+--
+-- And
+--
+-- @GENERIC_ALL@
+--
+-- for handles of the following types:
+--
+-- @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT@
+--
+-- [1]
+--     <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686670.aspx>
+--
+-- == Valid Usage
+--
+-- -   If
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkExportSemaphoreCreateInfo'::@handleTypes@
+--     does not include
+--     @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_OPAQUE_WIN32_BIT@ or
+--     @VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT@,
+--     @VkExportSemaphoreWin32HandleInfoKHR@ /must/ not be in the @pNext@
+--     chain of
+--     'Graphics.Vulkan.Core10.QueueSemaphore.VkSemaphoreCreateInfo'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR@
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkPAttributes"
+  vkPAttributes :: Ptr SECURITY_ATTRIBUTES
+  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkDwAccess"
+  vkDwAccess :: DWORD
+  , -- No documentation found for Nested "VkExportSemaphoreWin32HandleInfoKHR" "vkName"
+  vkName :: LPCWSTR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportSemaphoreWin32HandleInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkExportSemaphoreWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+                                                 <*> peek (ptr `plusPtr` 24)
+                                                 <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkPAttributes (poked :: VkExportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkDwAccess (poked :: VkExportSemaphoreWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkName (poked :: VkExportSemaphoreWin32HandleInfoKHR))
+-- | VkD3D12FenceSubmitInfoKHR - Structure specifying values for Direct3D 12
+-- 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>
+-- referring to a Direct3D 12 fence, the implementation /must/ ignore the
+-- value in the @pWaitSemaphoreValues@ or @pSignalSemaphoreValues@ entry.
+--
+-- == Valid Usage
+--
+-- -   @waitSemaphoreValuesCount@ /must/ be the same value as
+--     @VkSubmitInfo@::@waitSemaphoreCount@, where @VkSubmitInfo@ is in the
+--     @pNext@ chain of this @VkD3D12FenceSubmitInfoKHR@ structure.
+--
+-- -   @signalSemaphoreValuesCount@ /must/ be the same value as
+--     @VkSubmitInfo@::@signalSemaphoreCount@, where @VkSubmitInfo@ is in
+--     the @pNext@ chain of this @VkD3D12FenceSubmitInfoKHR@ structure.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR@
+--
+-- -   If @waitSemaphoreValuesCount@ is not @0@, and @pWaitSemaphoreValues@
+--     is not @NULL@, @pWaitSemaphoreValues@ /must/ be a valid pointer to
+--     an array of @waitSemaphoreValuesCount@ @uint64_t@ values
+--
+-- -   If @signalSemaphoreValuesCount@ is not @0@, and
+--     @pSignalSemaphoreValues@ is not @NULL@, @pSignalSemaphoreValues@
+--     /must/ be a valid pointer to an array of
+--     @signalSemaphoreValuesCount@ @uint64_t@ values
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkD3D12FenceSubmitInfoKHR = VkD3D12FenceSubmitInfoKHR
+  { -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkWaitSemaphoreValuesCount"
+  vkWaitSemaphoreValuesCount :: Word32
+  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkPWaitSemaphoreValues"
+  vkPWaitSemaphoreValues :: Ptr Word64
+  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkSignalSemaphoreValuesCount"
+  vkSignalSemaphoreValuesCount :: Word32
+  , -- No documentation found for Nested "VkD3D12FenceSubmitInfoKHR" "vkPSignalSemaphoreValues"
+  vkPSignalSemaphoreValues :: Ptr Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkD3D12FenceSubmitInfoKHR where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkD3D12FenceSubmitInfoKHR <$> 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) (vkSType (poked :: VkD3D12FenceSubmitInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkD3D12FenceSubmitInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreValuesCount (poked :: VkD3D12FenceSubmitInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphoreValues (poked :: VkD3D12FenceSubmitInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkSignalSemaphoreValuesCount (poked :: VkD3D12FenceSubmitInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkPSignalSemaphoreValues (poked :: VkD3D12FenceSubmitInfoKHR))
+-- | VkSemaphoreGetWin32HandleInfoKHR - Structure describing a Win32 handle
+-- semaphore export operation
+--
+-- = Description
+-- #_description#
+--
+-- The properties of the handle returned depend on the value of
+-- @handleType@. See
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+-- for a description of the properties of the defined external semaphore
+-- handle types.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ have been included in
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore.VkExportSemaphoreCreateInfo'::@handleTypes@
+--     when the @semaphore@’s current payload was created.
+--
+-- -   If @handleType@ is defined as an NT handle,
+--     'vkGetSemaphoreWin32HandleKHR' /must/ be called no more than once
+--     for each valid unique combination of @semaphore@ and @handleType@.
+--
+-- -   @semaphore@ /must/ not currently have its payload replaced by an
+--     imported payload as described below in
+--     <{html_spec_relative}#synchronization-semaphores-importing Importing Semaphore Payloads>
+--     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>,
+--     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>
+--     pending execution.
+--
+-- -   @handleType@ /must/ be defined as an NT handle or a global share
+--     handle.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_SEMAPHORE_GET_WIN32_HANDLE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @semaphore@ /must/ be a valid @VkSemaphore@ handle
+--
+-- -   @handleType@ /must/ be a valid
+--     'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities.VkExternalSemaphoreHandleTypeFlagBits'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSemaphoreGetWin32HandleInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSemaphoreGetWin32HandleInfoKHR" "vkSemaphore"
+  vkSemaphore :: VkSemaphore
+  , -- No documentation found for Nested "VkSemaphoreGetWin32HandleInfoKHR" "vkHandleType"
+  vkHandleType :: VkExternalSemaphoreHandleTypeFlagBits
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSemaphoreGetWin32HandleInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkSemaphoreGetWin32HandleInfoKHR <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+                                              <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSemaphoreGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSemaphoreGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSemaphore (poked :: VkSemaphoreGetWin32HandleInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHandleType (poked :: VkSemaphoreGetWin32HandleInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_get_memory_requirements2.hs
@@ -0,0 +1,140 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2
+  ( pattern VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION
+  , pattern VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME
+  , vkGetBufferMemoryRequirements2KHR
+  , vkGetImageMemoryRequirements2KHR
+  , vkGetImageSparseMemoryRequirements2KHR
+  , VkBufferMemoryRequirementsInfo2KHR
+  , pattern VkBufferMemoryRequirementsInfo2KHR
+  , VkImageMemoryRequirementsInfo2KHR
+  , pattern VkImageMemoryRequirementsInfo2KHR
+  , VkImageSparseMemoryRequirementsInfo2KHR
+  , pattern VkImageSparseMemoryRequirementsInfo2KHR
+  , VkMemoryRequirements2KHR
+  , pattern VkMemoryRequirements2KHR
+  , VkSparseImageMemoryRequirements2KHR
+  , pattern VkSparseImageMemoryRequirements2KHR
+  , pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR
+  , pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR
+  , pattern VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR
+  , pattern VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR
+  , pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkMemoryRequirements(..)
+  , VkImage
+  , VkBuffer
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkSparseImageMemoryRequirements(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2
+  ( pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2
+  , pattern VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
+  , pattern VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
+  , pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
+  , pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2
+  , VkSparseImageMemoryRequirements2(..)
+  , VkImageSparseMemoryRequirementsInfo2(..)
+  , vkGetImageSparseMemoryRequirements2
+  , VkImageMemoryRequirementsInfo2(..)
+  , vkGetImageMemoryRequirements2
+  , VkMemoryRequirements2(..)
+  , VkBufferMemoryRequirementsInfo2(..)
+  , vkGetBufferMemoryRequirements2
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION"
+pattern VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_GET_MEMORY_REQUIREMENTS_2_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME"
+pattern VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_GET_MEMORY_REQUIREMENTS_2_EXTENSION_NAME = "VK_KHR_get_memory_requirements2"
+-- No documentation found for TopLevel "vkGetBufferMemoryRequirements2KHR"
+vkGetBufferMemoryRequirements2KHR :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkBufferMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements2) -> IO ()
+vkGetBufferMemoryRequirements2KHR = vkGetBufferMemoryRequirements2
+-- No documentation found for TopLevel "vkGetImageMemoryRequirements2KHR"
+vkGetImageMemoryRequirements2KHR :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkImageMemoryRequirementsInfo2) -> ("pMemoryRequirements" ::: Ptr VkMemoryRequirements2) -> IO ()
+vkGetImageMemoryRequirements2KHR = vkGetImageMemoryRequirements2
+-- No documentation found for TopLevel "vkGetImageSparseMemoryRequirements2KHR"
+vkGetImageSparseMemoryRequirements2KHR :: ("device" ::: VkDevice) -> ("pInfo" ::: Ptr VkImageSparseMemoryRequirementsInfo2) -> ("pSparseMemoryRequirementCount" ::: Ptr Word32) -> ("pSparseMemoryRequirements" ::: Ptr VkSparseImageMemoryRequirements2) -> IO ()
+vkGetImageSparseMemoryRequirements2KHR = vkGetImageSparseMemoryRequirements2
+-- No documentation found for TopLevel "VkBufferMemoryRequirementsInfo2KHR"
+type VkBufferMemoryRequirementsInfo2KHR = VkBufferMemoryRequirementsInfo2
+
+
+-- No documentation found for TopLevel "VkBufferMemoryRequirementsInfo2KHR"
+pattern VkBufferMemoryRequirementsInfo2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("buffer" ::: VkBuffer) -> VkBufferMemoryRequirementsInfo2KHR
+pattern VkBufferMemoryRequirementsInfo2KHR vkSType vkPNext vkBuffer = VkBufferMemoryRequirementsInfo2 vkSType vkPNext vkBuffer
+-- No documentation found for TopLevel "VkImageMemoryRequirementsInfo2KHR"
+type VkImageMemoryRequirementsInfo2KHR = VkImageMemoryRequirementsInfo2
+
+
+-- No documentation found for TopLevel "VkImageMemoryRequirementsInfo2KHR"
+pattern VkImageMemoryRequirementsInfo2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("image" ::: VkImage) -> VkImageMemoryRequirementsInfo2KHR
+pattern VkImageMemoryRequirementsInfo2KHR vkSType vkPNext vkImage = VkImageMemoryRequirementsInfo2 vkSType vkPNext vkImage
+-- No documentation found for TopLevel "VkImageSparseMemoryRequirementsInfo2KHR"
+type VkImageSparseMemoryRequirementsInfo2KHR = VkImageSparseMemoryRequirementsInfo2
+
+
+-- No documentation found for TopLevel "VkImageSparseMemoryRequirementsInfo2KHR"
+pattern VkImageSparseMemoryRequirementsInfo2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("image" ::: VkImage) -> VkImageSparseMemoryRequirementsInfo2KHR
+pattern VkImageSparseMemoryRequirementsInfo2KHR vkSType vkPNext vkImage = VkImageSparseMemoryRequirementsInfo2 vkSType vkPNext vkImage
+-- No documentation found for TopLevel "VkMemoryRequirements2KHR"
+type VkMemoryRequirements2KHR = VkMemoryRequirements2
+
+
+-- No documentation found for TopLevel "VkMemoryRequirements2KHR"
+pattern VkMemoryRequirements2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("memoryRequirements" ::: VkMemoryRequirements) -> VkMemoryRequirements2KHR
+pattern VkMemoryRequirements2KHR vkSType vkPNext vkMemoryRequirements = VkMemoryRequirements2 vkSType vkPNext vkMemoryRequirements
+-- No documentation found for TopLevel "VkSparseImageMemoryRequirements2KHR"
+type VkSparseImageMemoryRequirements2KHR = VkSparseImageMemoryRequirements2
+
+
+-- No documentation found for TopLevel "VkSparseImageMemoryRequirements2KHR"
+pattern VkSparseImageMemoryRequirements2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("memoryRequirements" ::: VkSparseImageMemoryRequirements) -> VkSparseImageMemoryRequirements2KHR
+pattern VkSparseImageMemoryRequirements2KHR vkSType vkPNext vkMemoryRequirements = VkSparseImageMemoryRequirements2 vkSType vkPNext vkMemoryRequirements
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR"
+pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR"
+pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR"
+pattern VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR"
+pattern VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR"
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_physical_device_properties2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_get_physical_device_properties2.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_get_physical_device_properties2.hs
@@ -0,0 +1,228 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2
+  ( pattern VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION
+  , pattern VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME
+  , vkGetPhysicalDeviceFeatures2KHR
+  , vkGetPhysicalDeviceProperties2KHR
+  , vkGetPhysicalDeviceFormatProperties2KHR
+  , vkGetPhysicalDeviceImageFormatProperties2KHR
+  , vkGetPhysicalDeviceQueueFamilyProperties2KHR
+  , vkGetPhysicalDeviceMemoryProperties2KHR
+  , vkGetPhysicalDeviceSparseImageFormatProperties2KHR
+  , VkPhysicalDeviceFeatures2KHR
+  , pattern VkPhysicalDeviceFeatures2KHR
+  , VkPhysicalDeviceProperties2KHR
+  , pattern VkPhysicalDeviceProperties2KHR
+  , VkFormatProperties2KHR
+  , pattern VkFormatProperties2KHR
+  , VkImageFormatProperties2KHR
+  , pattern VkImageFormatProperties2KHR
+  , VkPhysicalDeviceImageFormatInfo2KHR
+  , pattern VkPhysicalDeviceImageFormatInfo2KHR
+  , VkQueueFamilyProperties2KHR
+  , pattern VkQueueFamilyProperties2KHR
+  , VkPhysicalDeviceMemoryProperties2KHR
+  , pattern VkPhysicalDeviceMemoryProperties2KHR
+  , VkSparseImageFormatProperties2KHR
+  , pattern VkSparseImageFormatProperties2KHR
+  , VkPhysicalDeviceSparseImageFormatInfo2KHR
+  , pattern VkPhysicalDeviceSparseImageFormatInfo2KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR
+  , pattern VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkResult(..)
+  , VkFormat(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkSampleCountFlagBits(..)
+  , VkPhysicalDeviceMemoryProperties(..)
+  , VkQueueFamilyProperties(..)
+  , VkImageCreateFlags
+  , VkImageUsageFlags
+  , VkImageTiling(..)
+  , VkImageType(..)
+  , VkImageFormatProperties(..)
+  , VkFormatProperties(..)
+  , VkPhysicalDeviceProperties(..)
+  , VkPhysicalDeviceFeatures(..)
+  , VkPhysicalDevice
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkSparseImageFormatProperties(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
+  , pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
+  , pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
+  , VkSparseImageFormatProperties2(..)
+  , VkPhysicalDeviceSparseImageFormatInfo2(..)
+  , vkGetPhysicalDeviceSparseImageFormatProperties2
+  , VkPhysicalDeviceMemoryProperties2(..)
+  , vkGetPhysicalDeviceMemoryProperties2
+  , VkQueueFamilyProperties2(..)
+  , vkGetPhysicalDeviceQueueFamilyProperties2
+  , VkImageFormatProperties2(..)
+  , VkPhysicalDeviceImageFormatInfo2(..)
+  , vkGetPhysicalDeviceImageFormatProperties2
+  , VkFormatProperties2(..)
+  , vkGetPhysicalDeviceFormatProperties2
+  , VkPhysicalDeviceProperties2(..)
+  , vkGetPhysicalDeviceProperties2
+  , VkPhysicalDeviceFeatures2(..)
+  , vkGetPhysicalDeviceFeatures2
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION"
+pattern VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME"
+pattern VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_GET_PHYSICAL_DEVICE_PROPERTIES_2_EXTENSION_NAME = "VK_KHR_get_physical_device_properties2"
+-- No documentation found for TopLevel "vkGetPhysicalDeviceFeatures2KHR"
+vkGetPhysicalDeviceFeatures2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFeatures" ::: Ptr VkPhysicalDeviceFeatures2) -> IO ()
+vkGetPhysicalDeviceFeatures2KHR = vkGetPhysicalDeviceFeatures2
+-- No documentation found for TopLevel "vkGetPhysicalDeviceProperties2KHR"
+vkGetPhysicalDeviceProperties2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pProperties" ::: Ptr VkPhysicalDeviceProperties2) -> IO ()
+vkGetPhysicalDeviceProperties2KHR = vkGetPhysicalDeviceProperties2
+-- No documentation found for TopLevel "vkGetPhysicalDeviceFormatProperties2KHR"
+vkGetPhysicalDeviceFormatProperties2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("pFormatProperties" ::: Ptr VkFormatProperties2) -> IO ()
+vkGetPhysicalDeviceFormatProperties2KHR = vkGetPhysicalDeviceFormatProperties2
+-- No documentation found for TopLevel "vkGetPhysicalDeviceImageFormatProperties2KHR"
+vkGetPhysicalDeviceImageFormatProperties2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pImageFormatInfo" ::: Ptr VkPhysicalDeviceImageFormatInfo2) -> ("pImageFormatProperties" ::: Ptr VkImageFormatProperties2) -> IO VkResult
+vkGetPhysicalDeviceImageFormatProperties2KHR = vkGetPhysicalDeviceImageFormatProperties2
+-- No documentation found for TopLevel "vkGetPhysicalDeviceQueueFamilyProperties2KHR"
+vkGetPhysicalDeviceQueueFamilyProperties2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pQueueFamilyPropertyCount" ::: Ptr Word32) -> ("pQueueFamilyProperties" ::: Ptr VkQueueFamilyProperties2) -> IO ()
+vkGetPhysicalDeviceQueueFamilyProperties2KHR = vkGetPhysicalDeviceQueueFamilyProperties2
+-- No documentation found for TopLevel "vkGetPhysicalDeviceMemoryProperties2KHR"
+vkGetPhysicalDeviceMemoryProperties2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pMemoryProperties" ::: Ptr VkPhysicalDeviceMemoryProperties2) -> IO ()
+vkGetPhysicalDeviceMemoryProperties2KHR = vkGetPhysicalDeviceMemoryProperties2
+-- No documentation found for TopLevel "vkGetPhysicalDeviceSparseImageFormatProperties2KHR"
+vkGetPhysicalDeviceSparseImageFormatProperties2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFormatInfo" ::: Ptr VkPhysicalDeviceSparseImageFormatInfo2) -> ("pPropertyCount" ::: Ptr Word32) -> ("pProperties" ::: Ptr VkSparseImageFormatProperties2) -> IO ()
+vkGetPhysicalDeviceSparseImageFormatProperties2KHR = vkGetPhysicalDeviceSparseImageFormatProperties2
+-- No documentation found for TopLevel "VkPhysicalDeviceFeatures2KHR"
+type VkPhysicalDeviceFeatures2KHR = VkPhysicalDeviceFeatures2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceFeatures2KHR"
+pattern VkPhysicalDeviceFeatures2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("features" ::: VkPhysicalDeviceFeatures) -> VkPhysicalDeviceFeatures2KHR
+pattern VkPhysicalDeviceFeatures2KHR vkSType vkPNext vkFeatures = VkPhysicalDeviceFeatures2 vkSType vkPNext vkFeatures
+-- No documentation found for TopLevel "VkPhysicalDeviceProperties2KHR"
+type VkPhysicalDeviceProperties2KHR = VkPhysicalDeviceProperties2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceProperties2KHR"
+pattern VkPhysicalDeviceProperties2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("properties" ::: VkPhysicalDeviceProperties) -> VkPhysicalDeviceProperties2KHR
+pattern VkPhysicalDeviceProperties2KHR vkSType vkPNext vkProperties = VkPhysicalDeviceProperties2 vkSType vkPNext vkProperties
+-- No documentation found for TopLevel "VkFormatProperties2KHR"
+type VkFormatProperties2KHR = VkFormatProperties2
+
+
+-- No documentation found for TopLevel "VkFormatProperties2KHR"
+pattern VkFormatProperties2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("formatProperties" ::: VkFormatProperties) -> VkFormatProperties2KHR
+pattern VkFormatProperties2KHR vkSType vkPNext vkFormatProperties = VkFormatProperties2 vkSType vkPNext vkFormatProperties
+-- No documentation found for TopLevel "VkImageFormatProperties2KHR"
+type VkImageFormatProperties2KHR = VkImageFormatProperties2
+
+
+-- No documentation found for TopLevel "VkImageFormatProperties2KHR"
+pattern VkImageFormatProperties2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("imageFormatProperties" ::: VkImageFormatProperties) -> VkImageFormatProperties2KHR
+pattern VkImageFormatProperties2KHR vkSType vkPNext vkImageFormatProperties = VkImageFormatProperties2 vkSType vkPNext vkImageFormatProperties
+-- No documentation found for TopLevel "VkPhysicalDeviceImageFormatInfo2KHR"
+type VkPhysicalDeviceImageFormatInfo2KHR = VkPhysicalDeviceImageFormatInfo2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceImageFormatInfo2KHR"
+pattern VkPhysicalDeviceImageFormatInfo2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("format" ::: VkFormat) -> ("type" ::: VkImageType) -> ("tiling" ::: VkImageTiling) -> ("usage" ::: VkImageUsageFlags) -> ("flags" ::: VkImageCreateFlags) -> VkPhysicalDeviceImageFormatInfo2KHR
+pattern VkPhysicalDeviceImageFormatInfo2KHR vkSType vkPNext vkFormat vkType vkTiling vkUsage vkFlags = VkPhysicalDeviceImageFormatInfo2 vkSType vkPNext vkFormat vkType vkTiling vkUsage vkFlags
+-- No documentation found for TopLevel "VkQueueFamilyProperties2KHR"
+type VkQueueFamilyProperties2KHR = VkQueueFamilyProperties2
+
+
+-- No documentation found for TopLevel "VkQueueFamilyProperties2KHR"
+pattern VkQueueFamilyProperties2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("queueFamilyProperties" ::: VkQueueFamilyProperties) -> VkQueueFamilyProperties2KHR
+pattern VkQueueFamilyProperties2KHR vkSType vkPNext vkQueueFamilyProperties = VkQueueFamilyProperties2 vkSType vkPNext vkQueueFamilyProperties
+-- No documentation found for TopLevel "VkPhysicalDeviceMemoryProperties2KHR"
+type VkPhysicalDeviceMemoryProperties2KHR = VkPhysicalDeviceMemoryProperties2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMemoryProperties2KHR"
+pattern VkPhysicalDeviceMemoryProperties2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("memoryProperties" ::: VkPhysicalDeviceMemoryProperties) -> VkPhysicalDeviceMemoryProperties2KHR
+pattern VkPhysicalDeviceMemoryProperties2KHR vkSType vkPNext vkMemoryProperties = VkPhysicalDeviceMemoryProperties2 vkSType vkPNext vkMemoryProperties
+-- No documentation found for TopLevel "VkSparseImageFormatProperties2KHR"
+type VkSparseImageFormatProperties2KHR = VkSparseImageFormatProperties2
+
+
+-- No documentation found for TopLevel "VkSparseImageFormatProperties2KHR"
+pattern VkSparseImageFormatProperties2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("properties" ::: VkSparseImageFormatProperties) -> VkSparseImageFormatProperties2KHR
+pattern VkSparseImageFormatProperties2KHR vkSType vkPNext vkProperties = VkSparseImageFormatProperties2 vkSType vkPNext vkProperties
+-- No documentation found for TopLevel "VkPhysicalDeviceSparseImageFormatInfo2KHR"
+type VkPhysicalDeviceSparseImageFormatInfo2KHR = VkPhysicalDeviceSparseImageFormatInfo2
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceSparseImageFormatInfo2KHR"
+pattern VkPhysicalDeviceSparseImageFormatInfo2KHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("format" ::: VkFormat) -> ("type" ::: VkImageType) -> ("samples" ::: VkSampleCountFlagBits) -> ("usage" ::: VkImageUsageFlags) -> ("tiling" ::: VkImageTiling) -> VkPhysicalDeviceSparseImageFormatInfo2KHR
+pattern VkPhysicalDeviceSparseImageFormatInfo2KHR vkSType vkPNext vkFormat vkType vkSamples vkUsage vkTiling = VkPhysicalDeviceSparseImageFormatInfo2 vkSType vkPNext vkFormat vkType vkSamples vkUsage vkTiling
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR"
+pattern VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR"
+pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR"
+pattern VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR"
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_get_surface_capabilities2.hs
@@ -0,0 +1,319 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR
+  , pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR
+  , pattern VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR
+  , pattern VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION
+  , pattern VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME
+  , vkGetPhysicalDeviceSurfaceCapabilities2KHR
+  , vkGetPhysicalDeviceSurfaceFormats2KHR
+  , VkPhysicalDeviceSurfaceInfo2KHR(..)
+  , VkSurfaceCapabilities2KHR(..)
+  , VkSurfaceFormat2KHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceFormatKHR(..)
+  , VkSurfaceCapabilitiesKHR(..)
+  , VkSurfaceKHR
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR = VkStructureType 1000119000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR"
+pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR = VkStructureType 1000119001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR"
+pattern VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR = VkStructureType 1000119002
+-- No documentation found for TopLevel "VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION"
+pattern VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_GET_SURFACE_CAPABILITIES_2_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME"
+pattern VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_GET_SURFACE_CAPABILITIES_2_EXTENSION_NAME = "VK_KHR_get_surface_capabilities2"
+-- | vkGetPhysicalDeviceSurfaceCapabilities2KHR - Reports capabilities of a
+-- 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
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @pSurfaceInfo@ points to an instance of the
+--     'VkPhysicalDeviceSurfaceInfo2KHR' structure, describing the surface
+--     and other fixed parameters that would be consumed by
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @pSurfaceCapabilities@ points to an instance of the
+--     'VkSurfaceCapabilities2KHR' structure in which the capabilities are
+--     returned.
+--
+-- = Description
+-- #_description#
+--
+-- @vkGetPhysicalDeviceSurfaceCapabilities2KHR@ behaves similarly to
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
+-- with the ability to specify extended inputs via chained input
+-- structures, and to return extended information via chained output
+-- structures.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
+--     @VkPhysicalDeviceSurfaceInfo2KHR@ structure
+--
+-- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
+--     @VkSurfaceCapabilities2KHR@ 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_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceSurfaceInfo2KHR', 'VkSurfaceCapabilities2KHR'
+foreign import ccall "vkGetPhysicalDeviceSurfaceCapabilities2KHR" vkGetPhysicalDeviceSurfaceCapabilities2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pSurfaceInfo" ::: Ptr VkPhysicalDeviceSurfaceInfo2KHR) -> ("pSurfaceCapabilities" ::: Ptr VkSurfaceCapabilities2KHR) -> IO VkResult
+-- | vkGetPhysicalDeviceSurfaceFormats2KHR - Query color formats supported by
+-- surface
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @pSurfaceInfo@ points to an instance of the
+--     'VkPhysicalDeviceSurfaceInfo2KHR' structure, describing the surface
+--     and other fixed parameters that would be consumed by
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @pSurfaceFormatCount@ is a pointer to an integer related to the
+--     number of format tuples available or queried, as described below.
+--
+-- -   @pSurfaceFormats@ is either @NULL@ or a pointer to an array of
+--     'VkSurfaceFormat2KHR' structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pSurfaceFormats@ is @NULL@, then the number of format tuples
+-- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
+-- The number of format tuples supported will be greater than or equal to
+-- 1. Otherwise, @pSurfaceFormatCount@ /must/ point to a variable set by
+-- the user to the number of elements in the @pSurfaceFormats@ array, and
+-- on return the variable is overwritten with the number of structures
+-- actually written to @pSurfaceFormats@. If the value of
+-- @pSurfaceFormatCount@ is less than the number of format tuples
+-- supported, at most @pSurfaceFormatCount@ structures will be written. If
+-- @pSurfaceFormatCount@ is smaller than the number of format tuples
+-- supported for the surface parameters described in @pSurfaceInfo@,
+-- @VK_INCOMPLETE@ will be returned instead of @VK_SUCCESS@ to indicate
+-- that not all the available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pSurfaceInfo@ /must/ be a valid pointer to a valid
+--     @VkPhysicalDeviceSurfaceInfo2KHR@ structure
+--
+-- -   @pSurfaceFormatCount@ /must/ be a valid pointer to a @uint32_t@
+--     value
+--
+-- -   If the value referenced by @pSurfaceFormatCount@ is not @0@, and
+--     @pSurfaceFormats@ is not @NULL@, @pSurfaceFormats@ /must/ be a valid
+--     pointer to an array of @pSurfaceFormatCount@ @VkSurfaceFormat2KHR@
+--     structures
+--
+-- == 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_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPhysicalDeviceSurfaceInfo2KHR', 'VkSurfaceFormat2KHR'
+foreign import ccall "vkGetPhysicalDeviceSurfaceFormats2KHR" vkGetPhysicalDeviceSurfaceFormats2KHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pSurfaceInfo" ::: Ptr VkPhysicalDeviceSurfaceInfo2KHR) -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr VkSurfaceFormat2KHR) -> IO VkResult
+-- | VkPhysicalDeviceSurfaceInfo2KHR - Structure specifying a surface and
+-- related swapchain creation parameters
+--
+-- = Description
+-- #_description#
+--
+-- The members of @VkPhysicalDeviceSurfaceInfo2KHR@ correspond to the
+-- arguments to
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
+-- with @sType@ and @pNext@ added for extensibility.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceSurfaceInfo2KHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceSurfaceInfo2KHR" "vkSurface"
+  vkSurface :: VkSurfaceKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceSurfaceInfo2KHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceSurfaceInfo2KHR <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceSurfaceInfo2KHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceSurfaceInfo2KHR))
+                *> poke (ptr `plusPtr` 16) (vkSurface (poked :: VkPhysicalDeviceSurfaceInfo2KHR))
+-- | VkSurfaceCapabilities2KHR - Structure describing capabilities of a
+-- surface
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@ or a pointer to a valid instance of
+--     '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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSurfaceCapabilities2KHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSurfaceCapabilities2KHR" "vkSurfaceCapabilities"
+  vkSurfaceCapabilities :: VkSurfaceCapabilitiesKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSurfaceCapabilities2KHR where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkSurfaceCapabilities2KHR <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 8)
+                                       <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSurfaceCapabilities2KHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSurfaceCapabilities2KHR))
+                *> poke (ptr `plusPtr` 16) (vkSurfaceCapabilities (poked :: VkSurfaceCapabilities2KHR))
+-- | VkSurfaceFormat2KHR - Structure describing a supported swapchain format
+-- tuple
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SURFACE_FORMAT_2_KHR@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSurfaceFormat2KHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSurfaceFormat2KHR" "vkSurfaceFormat"
+  vkSurfaceFormat :: VkSurfaceFormatKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSurfaceFormat2KHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSurfaceFormat2KHR <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSurfaceFormat2KHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSurfaceFormat2KHR))
+                *> poke (ptr `plusPtr` 16) (vkSurfaceFormat (poked :: VkSurfaceFormat2KHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_image_format_list.hs
@@ -0,0 +1,106 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_image_format_list
+  ( pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR
+  , pattern VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION
+  , pattern VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME
+  , VkImageFormatListCreateInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  , VkStructureType(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR = VkStructureType 1000147000
+-- No documentation found for TopLevel "VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION"
+pattern VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_IMAGE_FORMAT_LIST_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME"
+pattern VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME = "VK_KHR_image_format_list"
+-- | VkImageFormatListCreateInfoKHR - Specify that an image /can/ be used
+-- 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
+-- included in the @pNext@ list of
+-- 'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'.
+--
+-- == Valid Usage
+--
+-- -   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>.
+--
+-- -   If @VkImageCreateInfo@::@flags@ does not contain
+--     @VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT@, @viewFormatCount@ /must/ be
+--     @0@ or @1@.
+--
+-- -   If @viewFormatCount@ is not @0@, @VkImageCreateInfo@::@format@
+--     /must/ be in @pViewFormats@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR@
+--
+-- -   If @viewFormatCount@ is not @0@, @pViewFormats@ /must/ be a valid
+--     pointer to an array of @viewFormatCount@ valid
+--     '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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageFormatListCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageFormatListCreateInfoKHR" "vkViewFormatCount"
+  vkViewFormatCount :: Word32
+  , -- No documentation found for Nested "VkImageFormatListCreateInfoKHR" "vkPViewFormats"
+  vkPViewFormats :: Ptr VkFormat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageFormatListCreateInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkImageFormatListCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                            <*> peek (ptr `plusPtr` 8)
+                                            <*> peek (ptr `plusPtr` 16)
+                                            <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageFormatListCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageFormatListCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkViewFormatCount (poked :: VkImageFormatListCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkPViewFormats (poked :: VkImageFormatListCreateInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_incremental_present.hs
@@ -0,0 +1,174 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_incremental_present
+  ( pattern VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR
+  , pattern VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION
+  , pattern VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME
+  , VkPresentRegionsKHR(..)
+  , VkPresentRegionKHR(..)
+  , VkRectLayerKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkExtent2D(..)
+  , VkOffset2D(..)
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR"
+pattern VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR = VkStructureType 1000084000
+-- No documentation found for TopLevel "VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION"
+pattern VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_INCREMENTAL_PRESENT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME"
+pattern VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_INCREMENTAL_PRESENT_EXTENSION_NAME = "VK_KHR_incremental_present"
+-- | VkPresentRegionsKHR - Structure hint of rectangular regions changed by
+-- vkQueuePresentKHR
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @swapchainCount@ /must/ be the same value as
+--     @VkPresentInfoKHR@::@swapchainCount@, where @VkPresentInfoKHR@ is in
+--     the pNext-chain of this @VkPresentRegionsKHR@ structure.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR@
+--
+-- -   If @pRegions@ is not @NULL@, @pRegions@ /must/ be a valid pointer to
+--     an array of @swapchainCount@ valid @VkPresentRegionKHR@ structures
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPresentRegionsKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPresentRegionsKHR" "vkSwapchainCount"
+  vkSwapchainCount :: Word32
+  , -- No documentation found for Nested "VkPresentRegionsKHR" "vkPRegions"
+  vkPRegions :: Ptr VkPresentRegionKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPresentRegionsKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPresentRegionsKHR <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 16)
+                                 <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPresentRegionsKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPresentRegionsKHR))
+                *> poke (ptr `plusPtr` 16) (vkSwapchainCount (poked :: VkPresentRegionsKHR))
+                *> poke (ptr `plusPtr` 24) (vkPRegions (poked :: VkPresentRegionsKHR))
+-- | 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@,
+--     @pRectangles@ /must/ be a valid pointer to an array of
+--     @rectangleCount@ @VkRectLayerKHR@ structures
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPresentRegionsKHR', 'VkRectLayerKHR'
+data VkPresentRegionKHR = VkPresentRegionKHR
+  { -- No documentation found for Nested "VkPresentRegionKHR" "vkRectangleCount"
+  vkRectangleCount :: Word32
+  , -- No documentation found for Nested "VkPresentRegionKHR" "vkPRectangles"
+  vkPRectangles :: Ptr VkRectLayerKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPresentRegionKHR where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek ptr = VkPresentRegionKHR <$> peek (ptr `plusPtr` 0)
+                                <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkRectangleCount (poked :: VkPresentRegionKHR))
+                *> poke (ptr `plusPtr` 8) (vkPRectangles (poked :: VkPresentRegionKHR))
+-- | 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
+--     @imageExtent@ member of the @VkSwapchainCreateInfoKHR@ structure
+--     given to
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @layer@ /must/ be less than @imageArrayLayers@ member of the
+--     @VkSwapchainCreateInfoKHR@ structure given to
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- Some platforms allow the size of a surface to change, and then scale the
+-- pixels of the image to fit the surface. @VkRectLayerKHR@ specifies
+-- pixels of the swapchain’s image(s), which will be constant for the life
+-- 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"
+  vkOffset :: VkOffset2D
+  , -- No documentation found for Nested "VkRectLayerKHR" "vkExtent"
+  vkExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkRectLayerKHR" "vkLayer"
+  vkLayer :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkRectLayerKHR where
+  sizeOf ~_ = 20
+  alignment ~_ = 4
+  peek ptr = VkRectLayerKHR <$> peek (ptr `plusPtr` 0)
+                            <*> peek (ptr `plusPtr` 8)
+                            <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkRectLayerKHR))
+                *> poke (ptr `plusPtr` 8) (vkExtent (poked :: VkRectLayerKHR))
+                *> poke (ptr `plusPtr` 16) (vkLayer (poked :: VkRectLayerKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance1.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance1.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance1.hs
@@ -0,0 +1,70 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_maintenance1
+  ( pattern VK_KHR_MAINTENANCE1_SPEC_VERSION
+  , pattern VK_KHR_MAINTENANCE1_EXTENSION_NAME
+  , vkTrimCommandPoolKHR
+  , VkCommandPoolTrimFlagsKHR
+  , pattern VK_ERROR_OUT_OF_POOL_MEMORY_KHR
+  , pattern VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR
+  , pattern VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.CommandPool
+  ( VkCommandPool
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageCreateFlagBits(..)
+  , VkFormatFeatureFlagBits(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1
+  ( pattern VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
+  , pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+  , pattern VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
+  , pattern VK_ERROR_OUT_OF_POOL_MEMORY
+  , VkCommandPoolTrimFlags(..)
+  , vkTrimCommandPool
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE1_SPEC_VERSION"
+pattern VK_KHR_MAINTENANCE1_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_MAINTENANCE1_SPEC_VERSION = 2
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE1_EXTENSION_NAME"
+pattern VK_KHR_MAINTENANCE1_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_MAINTENANCE1_EXTENSION_NAME = "VK_KHR_maintenance1"
+-- No documentation found for TopLevel "vkTrimCommandPoolKHR"
+vkTrimCommandPoolKHR :: ("device" ::: VkDevice) -> ("commandPool" ::: VkCommandPool) -> ("flags" ::: VkCommandPoolTrimFlags) -> IO ()
+vkTrimCommandPoolKHR = vkTrimCommandPool
+-- No documentation found for TopLevel "VkCommandPoolTrimFlagsKHR"
+type VkCommandPoolTrimFlagsKHR = VkCommandPoolTrimFlags
+-- No documentation found for TopLevel "VK_ERROR_OUT_OF_POOL_MEMORY_KHR"
+pattern VK_ERROR_OUT_OF_POOL_MEMORY_KHR :: VkResult
+pattern VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR"
+pattern VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_TRANSFER_SRC_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR"
+pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_TRANSFER_DST_BIT_KHR = VK_FORMAT_FEATURE_TRANSFER_DST_BIT
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR"
+pattern VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance2.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance2.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance2.hs
@@ -0,0 +1,167 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_maintenance2
+  ( pattern VK_KHR_MAINTENANCE2_SPEC_VERSION
+  , pattern VK_KHR_MAINTENANCE2_EXTENSION_NAME
+  , VkPointClippingBehaviorKHR
+  , VkTessellationDomainOriginKHR
+  , VkInputAttachmentAspectReferenceKHR
+  , pattern VkInputAttachmentAspectReferenceKHR
+  , VkRenderPassInputAttachmentAspectCreateInfoKHR
+  , pattern VkRenderPassInputAttachmentAspectCreateInfoKHR
+  , VkPhysicalDevicePointClippingPropertiesKHR
+  , pattern VkPhysicalDevicePointClippingPropertiesKHR
+  , VkImageViewUsageCreateInfoKHR
+  , pattern VkImageViewUsageCreateInfoKHR
+  , VkPipelineTessellationDomainOriginStateCreateInfoKHR
+  , pattern VkPipelineTessellationDomainOriginStateCreateInfoKHR
+  , pattern VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR
+  , pattern VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR
+  , pattern VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR
+  , pattern VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR
+  , pattern VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR
+  , pattern VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR
+  , pattern VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR
+  , pattern VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageCreateFlagBits(..)
+  , VkImageUsageFlags
+  )
+import Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkImageAspectFlags
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2
+  ( pattern VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
+  , pattern VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
+  , pattern VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
+  , pattern VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
+  , pattern VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+  , pattern VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES
+  , pattern VK_IMAGE_CREATE_EXTENDED_USAGE_BIT
+  , pattern VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
+  , VkPipelineTessellationDomainOriginStateCreateInfo(..)
+  , VkImageViewUsageCreateInfo(..)
+  , VkPhysicalDevicePointClippingProperties(..)
+  , VkRenderPassInputAttachmentAspectCreateInfo(..)
+  , VkInputAttachmentAspectReference(..)
+  , VkTessellationDomainOrigin(..)
+  , VkPointClippingBehavior(..)
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE2_SPEC_VERSION"
+pattern VK_KHR_MAINTENANCE2_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_MAINTENANCE2_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE2_EXTENSION_NAME"
+pattern VK_KHR_MAINTENANCE2_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_MAINTENANCE2_EXTENSION_NAME = "VK_KHR_maintenance2"
+-- No documentation found for TopLevel "VkPointClippingBehaviorKHR"
+type VkPointClippingBehaviorKHR = VkPointClippingBehavior
+-- No documentation found for TopLevel "VkTessellationDomainOriginKHR"
+type VkTessellationDomainOriginKHR = VkTessellationDomainOrigin
+-- No documentation found for TopLevel "VkInputAttachmentAspectReferenceKHR"
+type VkInputAttachmentAspectReferenceKHR = VkInputAttachmentAspectReference
+
+
+-- No documentation found for TopLevel "VkInputAttachmentAspectReferenceKHR"
+pattern VkInputAttachmentAspectReferenceKHR :: ("subpass" ::: Word32) -> ("inputAttachmentIndex" ::: Word32) -> ("aspectMask" ::: VkImageAspectFlags) -> VkInputAttachmentAspectReferenceKHR
+pattern VkInputAttachmentAspectReferenceKHR vkSubpass vkInputAttachmentIndex vkAspectMask = VkInputAttachmentAspectReference vkSubpass vkInputAttachmentIndex vkAspectMask
+-- No documentation found for TopLevel "VkRenderPassInputAttachmentAspectCreateInfoKHR"
+type VkRenderPassInputAttachmentAspectCreateInfoKHR = VkRenderPassInputAttachmentAspectCreateInfo
+
+
+-- No documentation found for TopLevel "VkRenderPassInputAttachmentAspectCreateInfoKHR"
+pattern VkRenderPassInputAttachmentAspectCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("aspectReferenceCount" ::: Word32) -> ("pAspectReferences" ::: Ptr VkInputAttachmentAspectReference) -> VkRenderPassInputAttachmentAspectCreateInfoKHR
+pattern VkRenderPassInputAttachmentAspectCreateInfoKHR vkSType vkPNext vkAspectReferenceCount vkPAspectReferences = VkRenderPassInputAttachmentAspectCreateInfo vkSType vkPNext vkAspectReferenceCount vkPAspectReferences
+-- No documentation found for TopLevel "VkPhysicalDevicePointClippingPropertiesKHR"
+type VkPhysicalDevicePointClippingPropertiesKHR = VkPhysicalDevicePointClippingProperties
+
+
+-- No documentation found for TopLevel "VkPhysicalDevicePointClippingPropertiesKHR"
+pattern VkPhysicalDevicePointClippingPropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("pointClippingBehavior" ::: VkPointClippingBehavior) -> VkPhysicalDevicePointClippingPropertiesKHR
+pattern VkPhysicalDevicePointClippingPropertiesKHR vkSType vkPNext vkPointClippingBehavior = VkPhysicalDevicePointClippingProperties vkSType vkPNext vkPointClippingBehavior
+-- No documentation found for TopLevel "VkImageViewUsageCreateInfoKHR"
+type VkImageViewUsageCreateInfoKHR = VkImageViewUsageCreateInfo
+
+
+-- No documentation found for TopLevel "VkImageViewUsageCreateInfoKHR"
+pattern VkImageViewUsageCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("usage" ::: VkImageUsageFlags) -> VkImageViewUsageCreateInfoKHR
+pattern VkImageViewUsageCreateInfoKHR vkSType vkPNext vkUsage = VkImageViewUsageCreateInfo vkSType vkPNext vkUsage
+-- No documentation found for TopLevel "VkPipelineTessellationDomainOriginStateCreateInfoKHR"
+type VkPipelineTessellationDomainOriginStateCreateInfoKHR = VkPipelineTessellationDomainOriginStateCreateInfo
+
+
+-- No documentation found for TopLevel "VkPipelineTessellationDomainOriginStateCreateInfoKHR"
+pattern VkPipelineTessellationDomainOriginStateCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("domainOrigin" ::: VkTessellationDomainOrigin) -> VkPipelineTessellationDomainOriginStateCreateInfoKHR
+pattern VkPipelineTessellationDomainOriginStateCreateInfoKHR vkSType vkPNext vkDomainOrigin = VkPipelineTessellationDomainOriginStateCreateInfo vkSType vkPNext vkDomainOrigin
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR"
+pattern VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR"
+pattern VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_EXTENDED_USAGE_BIT_KHR = VK_IMAGE_CREATE_EXTENDED_USAGE_BIT
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO
+-- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR"
+pattern VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL
+-- No documentation found for TopLevel "VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR"
+pattern VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL
+-- No documentation found for TopLevel "VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR"
+pattern VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR :: VkPointClippingBehavior
+pattern VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES_KHR = VK_POINT_CLIPPING_BEHAVIOR_ALL_CLIP_PLANES
+-- No documentation found for TopLevel "VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR"
+pattern VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR :: VkPointClippingBehavior
+pattern VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY_KHR = VK_POINT_CLIPPING_BEHAVIOR_USER_CLIP_PLANES_ONLY
+-- No documentation found for TopLevel "VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR"
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR :: VkTessellationDomainOrigin
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_UPPER_LEFT
+-- No documentation found for TopLevel "VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR"
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR :: VkTessellationDomainOrigin
+pattern VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT_KHR = VK_TESSELLATION_DOMAIN_ORIGIN_LOWER_LEFT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance3.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance3.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_maintenance3.hs
@@ -0,0 +1,82 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_maintenance3
+  ( pattern VK_KHR_MAINTENANCE3_SPEC_VERSION
+  , pattern VK_KHR_MAINTENANCE3_EXTENSION_NAME
+  , vkGetDescriptorSetLayoutSupportKHR
+  , VkPhysicalDeviceMaintenance3PropertiesKHR
+  , pattern VkPhysicalDeviceMaintenance3PropertiesKHR
+  , VkDescriptorSetLayoutSupportKHR
+  , pattern VkDescriptorSetLayoutSupportKHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR
+  , pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorSetLayoutCreateInfo(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkDevice
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3
+  ( pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
+  , VkPhysicalDeviceMaintenance3Properties(..)
+  , VkDescriptorSetLayoutSupport(..)
+  , vkGetDescriptorSetLayoutSupport
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE3_SPEC_VERSION"
+pattern VK_KHR_MAINTENANCE3_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_MAINTENANCE3_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_MAINTENANCE3_EXTENSION_NAME"
+pattern VK_KHR_MAINTENANCE3_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_MAINTENANCE3_EXTENSION_NAME = "VK_KHR_maintenance3"
+-- No documentation found for TopLevel "vkGetDescriptorSetLayoutSupportKHR"
+vkGetDescriptorSetLayoutSupportKHR :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkDescriptorSetLayoutCreateInfo) -> ("pSupport" ::: Ptr VkDescriptorSetLayoutSupport) -> IO ()
+vkGetDescriptorSetLayoutSupportKHR = vkGetDescriptorSetLayoutSupport
+-- No documentation found for TopLevel "VkPhysicalDeviceMaintenance3PropertiesKHR"
+type VkPhysicalDeviceMaintenance3PropertiesKHR = VkPhysicalDeviceMaintenance3Properties
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMaintenance3PropertiesKHR"
+pattern VkPhysicalDeviceMaintenance3PropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("maxPerSetDescriptors" ::: Word32) -> ("maxMemoryAllocationSize" ::: VkDeviceSize) -> VkPhysicalDeviceMaintenance3PropertiesKHR
+pattern VkPhysicalDeviceMaintenance3PropertiesKHR vkSType vkPNext vkMaxPerSetDescriptors vkMaxMemoryAllocationSize = VkPhysicalDeviceMaintenance3Properties vkSType vkPNext vkMaxPerSetDescriptors vkMaxMemoryAllocationSize
+-- No documentation found for TopLevel "VkDescriptorSetLayoutSupportKHR"
+type VkDescriptorSetLayoutSupportKHR = VkDescriptorSetLayoutSupport
+
+
+-- No documentation found for TopLevel "VkDescriptorSetLayoutSupportKHR"
+pattern VkDescriptorSetLayoutSupportKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("supported" ::: VkBool32) -> VkDescriptorSetLayoutSupportKHR
+pattern VkDescriptorSetLayoutSupportKHR vkSType vkPNext vkSupported = VkDescriptorSetLayoutSupport vkSType vkPNext vkSupported
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR"
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_mir_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_mir_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_mir_surface.hs
@@ -0,0 +1,251 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_mir_surface
+  ( MirConnection
+  , MirSurface
+  , VkMirSurfaceCreateFlagsKHR(..)
+  , pattern VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR
+  , pattern VK_KHR_MIR_SURFACE_SPEC_VERSION
+  , pattern VK_KHR_MIR_SURFACE_EXTENSION_NAME
+  , vkCreateMirSurfaceKHR
+  , vkGetPhysicalDeviceMirPresentationSupportKHR
+  , VkMirSurfaceCreateInfoKHR(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- | Opaque data
+data MirConnection
+-- | Opaque data
+data MirSurface
+-- ** VkMirSurfaceCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkMirSurfaceCreateFlagsKHR"
+newtype VkMirSurfaceCreateFlagsKHR = VkMirSurfaceCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkMirSurfaceCreateFlagsKHR where
+  
+  showsPrec p (VkMirSurfaceCreateFlagsKHR x) = showParen (p >= 11) (showString "VkMirSurfaceCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkMirSurfaceCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkMirSurfaceCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkMirSurfaceCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR = VkStructureType 1000007000
+-- No documentation found for TopLevel "VK_KHR_MIR_SURFACE_SPEC_VERSION"
+pattern VK_KHR_MIR_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_MIR_SURFACE_SPEC_VERSION = 4
+-- No documentation found for TopLevel "VK_KHR_MIR_SURFACE_EXTENSION_NAME"
+pattern VK_KHR_MIR_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_MIR_SURFACE_EXTENSION_NAME = "VK_KHR_mir_surface"
+-- | vkCreateMirSurfaceKHR - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' object for a
+-- Mir window
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkMirSurfaceCreateInfoKHR' structure containing parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkMirSurfaceCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkMirSurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkCreateMirSurfaceKHR" vkCreateMirSurfaceKHR :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkMirSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceMirPresentationSupportKHR - Query physical device for
+-- presentation to Mir
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family index.
+--
+-- -   @connection@ is a pointer to the @MirConnection@, and identifies the
+--     desired Mir compositor.
+--
+-- = Description
+-- #_description#
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by @vkGetPhysicalDeviceQueueFamilyProperties@ for the given
+--     @physicalDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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@.
+--
+-- -   @surface@ /must/ point to a valid @MirSurface@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkFlags"
+  vkFlags :: VkMirSurfaceCreateFlagsKHR
+  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkConnection"
+  vkConnection :: Ptr MirConnection
+  , -- No documentation found for Nested "VkMirSurfaceCreateInfoKHR" "vkMirSurface"
+  vkMirSurface :: Ptr MirSurface
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMirSurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkMirSurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 8)
+                                       <*> peek (ptr `plusPtr` 16)
+                                       <*> peek (ptr `plusPtr` 24)
+                                       <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMirSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMirSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkMirSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkConnection (poked :: VkMirSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkMirSurface (poked :: VkMirSurfaceCreateInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_multiview.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_multiview.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_multiview.hs
@@ -0,0 +1,96 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_multiview
+  ( pattern VK_KHR_MULTIVIEW_SPEC_VERSION
+  , pattern VK_KHR_MULTIVIEW_EXTENSION_NAME
+  , VkPhysicalDeviceMultiviewFeaturesKHR
+  , pattern VkPhysicalDeviceMultiviewFeaturesKHR
+  , VkPhysicalDeviceMultiviewPropertiesKHR
+  , pattern VkPhysicalDeviceMultiviewPropertiesKHR
+  , VkRenderPassMultiviewCreateInfoKHR
+  , pattern VkRenderPassMultiviewCreateInfoKHR
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR
+  , pattern VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR
+  ) where
+
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkDependencyFlagBits(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview
+  ( pattern VK_DEPENDENCY_VIEW_LOCAL_BIT
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
+  , pattern VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
+  , VkRenderPassMultiviewCreateInfo(..)
+  , VkPhysicalDeviceMultiviewProperties(..)
+  , VkPhysicalDeviceMultiviewFeatures(..)
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_MULTIVIEW_SPEC_VERSION"
+pattern VK_KHR_MULTIVIEW_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_MULTIVIEW_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_MULTIVIEW_EXTENSION_NAME"
+pattern VK_KHR_MULTIVIEW_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_MULTIVIEW_EXTENSION_NAME = "VK_KHR_multiview"
+-- No documentation found for TopLevel "VkPhysicalDeviceMultiviewFeaturesKHR"
+type VkPhysicalDeviceMultiviewFeaturesKHR = VkPhysicalDeviceMultiviewFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMultiviewFeaturesKHR"
+pattern VkPhysicalDeviceMultiviewFeaturesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("multiview" ::: VkBool32) -> ("multiviewGeometryShader" ::: VkBool32) -> ("multiviewTessellationShader" ::: VkBool32) -> VkPhysicalDeviceMultiviewFeaturesKHR
+pattern VkPhysicalDeviceMultiviewFeaturesKHR vkSType vkPNext vkMultiview vkMultiviewGeometryShader vkMultiviewTessellationShader = VkPhysicalDeviceMultiviewFeatures vkSType vkPNext vkMultiview vkMultiviewGeometryShader vkMultiviewTessellationShader
+-- No documentation found for TopLevel "VkPhysicalDeviceMultiviewPropertiesKHR"
+type VkPhysicalDeviceMultiviewPropertiesKHR = VkPhysicalDeviceMultiviewProperties
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceMultiviewPropertiesKHR"
+pattern VkPhysicalDeviceMultiviewPropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("maxMultiviewViewCount" ::: Word32) -> ("maxMultiviewInstanceIndex" ::: Word32) -> VkPhysicalDeviceMultiviewPropertiesKHR
+pattern VkPhysicalDeviceMultiviewPropertiesKHR vkSType vkPNext vkMaxMultiviewViewCount vkMaxMultiviewInstanceIndex = VkPhysicalDeviceMultiviewProperties vkSType vkPNext vkMaxMultiviewViewCount vkMaxMultiviewInstanceIndex
+-- No documentation found for TopLevel "VkRenderPassMultiviewCreateInfoKHR"
+type VkRenderPassMultiviewCreateInfoKHR = VkRenderPassMultiviewCreateInfo
+
+
+-- No documentation found for TopLevel "VkRenderPassMultiviewCreateInfoKHR"
+pattern VkRenderPassMultiviewCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("subpassCount" ::: Word32) -> ("pViewMasks" ::: Ptr Word32) -> ("dependencyCount" ::: Word32) -> ("pViewOffsets" ::: Ptr Int32) -> ("correlationMaskCount" ::: Word32) -> ("pCorrelationMasks" ::: Ptr Word32) -> VkRenderPassMultiviewCreateInfoKHR
+pattern VkRenderPassMultiviewCreateInfoKHR vkSType vkPNext vkSubpassCount vkPViewMasks vkDependencyCount vkPViewOffsets vkCorrelationMaskCount vkPCorrelationMasks = VkRenderPassMultiviewCreateInfo vkSType vkPNext vkSubpassCount vkPViewMasks vkDependencyCount vkPViewOffsets vkCorrelationMaskCount vkPCorrelationMasks
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES
+-- No documentation found for TopLevel "VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR"
+pattern VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR :: VkDependencyFlagBits
+pattern VK_DEPENDENCY_VIEW_LOCAL_BIT_KHR = VK_DEPENDENCY_VIEW_LOCAL_BIT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_push_descriptor.hs
@@ -0,0 +1,397 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_push_descriptor
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR
+  , pattern VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR
+  , pattern VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR
+  , pattern VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION
+  , pattern VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME
+  , vkCmdPushDescriptorSetKHR
+  , vkCmdPushDescriptorSetWithTemplateKHR
+  , VkPhysicalDevicePushDescriptorPropertiesKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkWriteDescriptorSet(..)
+  , VkDescriptorSetLayoutCreateFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkPipelineBindPoint(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkPipelineLayout
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template
+  ( VkDescriptorUpdateTemplate
+  , VkDescriptorUpdateTemplateType(..)
+  )
+
+
+-- 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"
+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"
+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"
+pattern VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_PUSH_DESCRIPTOR_SPEC_VERSION = 2
+-- No documentation found for TopLevel "VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME"
+pattern VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_PUSH_DESCRIPTOR_EXTENSION_NAME = "VK_KHR_push_descriptor"
+-- | vkCmdPushDescriptorSetKHR - Pushes descriptor updates into a command
+-- buffer
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @commandBuffer@ is the command buffer that the descriptors will be
+--     recorded in.
+--
+-- -   @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 push descriptor bindings for
+--     each of graphics and compute, so binding one does not disturb the
+--     other.
+--
+-- -   @layout@ is a @VkPipelineLayout@ object used to program the
+--     bindings.
+--
+-- -   @set@ is the set number of the descriptor set in the pipeline layout
+--     that will be updated.
+--
+-- -   @descriptorWriteCount@ is the number of elements in the
+--     @pDescriptorWrites@ array.
+--
+-- -   @pDescriptorWrites@ is a pointer to an array of
+--     'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet'
+--     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
+-- a descriptor set and later bound to a command buffer. Push descriptors
+-- allow for incremental updates of descriptors without managing the
+-- lifetime of descriptor sets.
+--
+-- When a command buffer begins recording, all push descriptors have
+-- undefined contents. Push descriptors /can/ be updated incrementally and
+-- 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>.
+-- When the set is disturbed or push descriptors with a different
+-- descriptor set layout are set, all push descriptors become invalid.
+--
+-- Valid descriptors /must/ be pushed for all bindings that any shaders in
+-- a pipeline access, at the time that a draw or dispatch command is
+-- recorded to execute using that pipeline. This includes immutable sampler
+-- descriptors, which /must/ be pushed before they are accessed by a
+-- pipeline. However, if none of the shaders in a pipeline statically use
+-- certain bindings in the push descriptor set, then those descriptors need
+-- not be valid.
+--
+-- Push descriptors do not use dynamic offsets. Instead, the corresponding
+-- non-dynamic descriptor types /can/ be used and the @offset@ member of
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkDescriptorBufferInfo' /can/ be
+-- changed each time the descriptor is written.
+--
+-- Each element of @pDescriptorWrites@ is interpreted as in
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet', except the
+-- @dstSet@ member is ignored.
+--
+-- To push an immutable sampler, use a
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet' with
+-- @dstBinding@ and @dstArrayElement@ selecting the immutable sampler’s
+-- binding. If the descriptor type is @VK_DESCRIPTOR_TYPE_SAMPLER@, the
+-- @pImageInfo@ parameter is ignored and the immutable sampler is taken
+-- from the push descriptor set layout in the pipeline layout. If the
+-- descriptor type is @VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER@, the
+-- @sampler@ member of the @pImageInfo@ parameter is ignored and the
+-- immutable sampler is taken from the push descriptor set layout in the
+-- pipeline layout.
+--
+-- == Valid Usage
+--
+-- -   @pipelineBindPoint@ /must/ be supported by the @commandBuffer@’s
+--     parent @VkCommandPool@’s queue family
+--
+-- -   @set@ /must/ be less than
+--     @VkPipelineLayoutCreateInfo@::@setLayoutCount@ provided when
+--     @layout@ was created
+--
+-- -   @set@ /must/ be the unique set number in the pipeline layout that
+--     uses a descriptor set layout that was created with
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@
+--
+-- == 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
+--
+-- -   @pDescriptorWrites@ /must/ be a valid pointer to an array of
+--     @descriptorWriteCount@ valid @VkWriteDescriptorSet@ structures
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <#commandbuffers-lifecycle recording state>
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics, or compute operations
+--
+-- -   @descriptorWriteCount@ /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.Pass.VkPipelineBindPoint',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout',
+-- 'Graphics.Vulkan.Core10.DescriptorSet.VkWriteDescriptorSet'
+foreign import ccall "vkCmdPushDescriptorSetKHR" vkCmdPushDescriptorSetKHR :: ("commandBuffer" ::: VkCommandBuffer) -> ("pipelineBindPoint" ::: VkPipelineBindPoint) -> ("layout" ::: VkPipelineLayout) -> ("set" ::: Word32) -> ("descriptorWriteCount" ::: Word32) -> ("pDescriptorWrites" ::: Ptr VkWriteDescriptorSet) -> IO ()
+-- | vkCmdPushDescriptorSetWithTemplateKHR - Pushes descriptor updates into a
+-- command buffer using a descriptor update template
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @commandBuffer@ is the command buffer that the descriptors will be
+--     recorded in.
+--
+-- -   @descriptorUpdateTemplate@ A descriptor update template which
+--     defines how to interpret the descriptor information in pData.
+--
+-- -   @layout@ is a @VkPipelineLayout@ object used to program the
+--     bindings. It /must/ be compatible with the layout used to create the
+--     @descriptorUpdateTemplate@ handle.
+--
+-- -   @set@ is the set number of the descriptor set in the pipeline layout
+--     that will be updated. This /must/ be the same number used to create
+--     the @descriptorUpdateTemplate@ handle.
+--
+-- -   @pData@ Points to memory which contains the descriptors for the
+--     templated update.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   The pipelineBindPoint specified during the creation of the
+--     descriptor update template /must/ be supported by the
+--     @commandBuffer@’s parent @VkCommandPool@’s queue family
+--
+-- -   @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
+--     'Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template.vkCreateDescriptorUpdateTemplateKHR'
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @descriptorUpdateTemplate@ /must/ be a valid
+--     @VkDescriptorUpdateTemplate@ handle
+--
+-- -   @layout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   @commandBuffer@ /must/ be in the
+--     <#commandbuffers-lifecycle recording state>
+--
+-- -   The @VkCommandPool@ that @commandBuffer@ was allocated from /must/
+--     support graphics, or compute operations
+--
+-- -   Each of @commandBuffer@, @descriptorUpdateTemplate@, and @layout@
+--     /must/ have been created, allocated, or retrieved from the same
+--     @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         |                 |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- __API example.__
+--
+-- > struct AppBufferView {
+-- >     VkBufferView bufferView;
+-- >     uint32_t     applicationRelatedInformation;
+-- > };
+-- >
+-- > struct AppDataStructure
+-- > {
+-- >     VkDescriptorImageInfo  imageInfo;          // a single image info
+-- >     // ... 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.
+-- >     }
+-- >
+-- > };
+-- >
+-- > // 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
+-- >     1,                                                             // descriptorUpdateEntryCount
+-- >     descriptorUpdateTemplateEntries,                               // pDescriptorUpdateEntries
+-- >     VK_DESCRIPTOR_UPDATE_TEMPLATE_TYPE_PUSH_DESCRIPTORS_KHR,       // templateType
+-- >     0,                                                             // descriptorSetLayout, ignored by given templateType
+-- >     VK_PIPELINE_BIND_POINT_GRAPHICS,                               // pipelineBindPoint
+-- >     myPipelineLayout,                                              // pipelineLayout
+-- >     0,                                                             // set
+-- > };
+-- >
+-- > VkDescriptorUpdateTemplate myDescriptorUpdateTemplate;
+-- > myResult = vkCreateDescriptorUpdateTemplate(
+-- >     myDevice,
+-- >     &createInfo,
+-- >     NULL,
+-- >     &myDescriptorUpdateTemplate);
+-- > }
+-- >
+-- > AppDataStructure appData;
+-- > // fill appData here or cache it in your engine
+-- > 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',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkPipelineLayout'
+foreign import ccall "vkCmdPushDescriptorSetWithTemplateKHR" vkCmdPushDescriptorSetWithTemplateKHR :: ("commandBuffer" ::: VkCommandBuffer) -> ("descriptorUpdateTemplate" ::: VkDescriptorUpdateTemplate) -> ("layout" ::: VkPipelineLayout) -> ("set" ::: Word32) -> ("pData" ::: Ptr ()) -> IO ()
+-- | VkPhysicalDevicePushDescriptorPropertiesKHR - Structure describing push
+-- 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
+--     @VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR@ set.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDevicePushDescriptorPropertiesKHR" "vkMaxPushDescriptors"
+  vkMaxPushDescriptors :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDevicePushDescriptorPropertiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDevicePushDescriptorPropertiesKHR <$> peek (ptr `plusPtr` 0)
+                                                         <*> peek (ptr `plusPtr` 8)
+                                                         <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDevicePushDescriptorPropertiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDevicePushDescriptorPropertiesKHR))
+                *> poke (ptr `plusPtr` 16) (vkMaxPushDescriptors (poked :: VkPhysicalDevicePushDescriptorPropertiesKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_relaxed_block_layout.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout
+  ( pattern VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION
+  , pattern VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION"
+pattern VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_RELAXED_BLOCK_LAYOUT_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME"
+pattern VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_RELAXED_BLOCK_LAYOUT_EXTENSION_NAME = "VK_KHR_relaxed_block_layout"
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_mirror_clamp_to_edge.hs
@@ -0,0 +1,33 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
+  ( pattern VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE
+  , pattern VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION
+  , pattern VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Core10.Sampler
+  ( VkSamplerAddressMode(..)
+  )
+
+
+-- | @VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE@ specifies that the mirror
+-- clamp to edge wrap mode will be used. This is only valid if the
+-- @{html_spec_relative}#VK_KHR_sampler_mirror_clamp_to_edge@ extension is
+-- enabled.
+pattern VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE :: VkSamplerAddressMode
+pattern VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = VkSamplerAddressMode 4
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION"
+pattern VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME"
+pattern VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME = "VK_KHR_sampler_mirror_clamp_to_edge"
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_sampler_ycbcr_conversion.hs
@@ -0,0 +1,457 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
+  ( pattern VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION
+  , pattern VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME
+  , vkCreateSamplerYcbcrConversionKHR
+  , vkDestroySamplerYcbcrConversionKHR
+  , VkSamplerYcbcrModelConversionKHR
+  , VkSamplerYcbcrRangeKHR
+  , VkChromaLocationKHR
+  , VkSamplerYcbcrConversionKHR
+  , VkSamplerYcbcrConversionInfoKHR
+  , pattern VkSamplerYcbcrConversionInfoKHR
+  , VkSamplerYcbcrConversionCreateInfoKHR
+  , pattern VkSamplerYcbcrConversionCreateInfoKHR
+  , VkBindImagePlaneMemoryInfoKHR
+  , pattern VkBindImagePlaneMemoryInfoKHR
+  , VkImagePlaneMemoryRequirementsInfoKHR
+  , pattern VkImagePlaneMemoryRequirementsInfoKHR
+  , VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR
+  , pattern VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR
+  , VkSamplerYcbcrConversionImageFormatPropertiesKHR
+  , pattern VkSamplerYcbcrConversionImageFormatPropertiesKHR
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT
+  , pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR
+  , pattern VK_FORMAT_G8B8G8R8_422_UNORM_KHR
+  , pattern VK_FORMAT_B8G8R8G8_422_UNORM_KHR
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR
+  , pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR
+  , pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR
+  , pattern VK_FORMAT_R10X6_UNORM_PACK16_KHR
+  , pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR
+  , pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR
+  , pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR
+  , pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_R12X4_UNORM_PACK16_KHR
+  , pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR
+  , pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR
+  , pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR
+  , pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR
+  , pattern VK_FORMAT_G16B16G16R16_422_UNORM_KHR
+  , pattern VK_FORMAT_B16G16R16G16_422_UNORM_KHR
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR
+  , pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR
+  , pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR
+  , pattern VK_IMAGE_ASPECT_PLANE_0_BIT_KHR
+  , pattern VK_IMAGE_ASPECT_PLANE_1_BIT_KHR
+  , pattern VK_IMAGE_ASPECT_PLANE_2_BIT_KHR
+  , pattern VK_IMAGE_CREATE_DISJOINT_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_DISJOINT_BIT_KHR
+  , pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR
+  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR
+  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR
+  , pattern VK_CHROMA_LOCATION_COSITED_EVEN_KHR
+  , pattern VK_CHROMA_LOCATION_MIDPOINT_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkObjectType(..)
+  , VkBool32(..)
+  , VkFormat(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkFormatFeatureFlagBits(..)
+  , VkImageCreateFlagBits(..)
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.ImageView
+  ( VkComponentMapping(..)
+  )
+import Graphics.Vulkan.Core10.Sampler
+  ( VkFilter(..)
+  )
+import Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+  ( VkImageAspectFlagBits(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion
+  ( pattern VK_CHROMA_LOCATION_MIDPOINT
+  , pattern VK_CHROMA_LOCATION_COSITED_EVEN
+  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW
+  , pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
+  , pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
+  , pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
+  , pattern VK_FORMAT_FEATURE_DISJOINT_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
+  , pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
+  , pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
+  , pattern VK_IMAGE_CREATE_DISJOINT_BIT
+  , pattern VK_IMAGE_ASPECT_PLANE_2_BIT
+  , pattern VK_IMAGE_ASPECT_PLANE_1_BIT
+  , pattern VK_IMAGE_ASPECT_PLANE_0_BIT
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
+  , pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
+  , pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
+  , pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
+  , pattern VK_FORMAT_B16G16R16G16_422_UNORM
+  , pattern VK_FORMAT_G16B16G16R16_422_UNORM
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
+  , pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
+  , pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
+  , pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16
+  , pattern VK_FORMAT_R12X4_UNORM_PACK16
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
+  , pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
+  , pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
+  , pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
+  , pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16
+  , pattern VK_FORMAT_R10X6_UNORM_PACK16
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
+  , pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
+  , pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
+  , pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
+  , pattern VK_FORMAT_B8G8R8G8_422_UNORM
+  , pattern VK_FORMAT_G8B8G8R8_422_UNORM
+  , pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
+  , pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
+  , pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
+  , VkSamplerYcbcrConversionImageFormatProperties(..)
+  , VkPhysicalDeviceSamplerYcbcrConversionFeatures(..)
+  , VkImagePlaneMemoryRequirementsInfo(..)
+  , VkBindImagePlaneMemoryInfo(..)
+  , VkSamplerYcbcrConversionInfo(..)
+  , VkChromaLocation(..)
+  , VkSamplerYcbcrRange(..)
+  , VkSamplerYcbcrModelConversion(..)
+  , vkDestroySamplerYcbcrConversion
+  , VkSamplerYcbcrConversion
+  , VkSamplerYcbcrConversionCreateInfo(..)
+  , vkCreateSamplerYcbcrConversion
+  )
+import Graphics.Vulkan.Extensions.VK_EXT_debug_report
+  ( VkDebugReportObjectTypeEXT(..)
+  , pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION"
+pattern VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_SAMPLER_YCBCR_CONVERSION_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME"
+pattern VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_SAMPLER_YCBCR_CONVERSION_EXTENSION_NAME = "VK_KHR_sampler_ycbcr_conversion"
+-- No documentation found for TopLevel "vkCreateSamplerYcbcrConversionKHR"
+vkCreateSamplerYcbcrConversionKHR :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkSamplerYcbcrConversionCreateInfo) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pYcbcrConversion" ::: Ptr VkSamplerYcbcrConversion) -> IO VkResult
+vkCreateSamplerYcbcrConversionKHR = vkCreateSamplerYcbcrConversion
+-- No documentation found for TopLevel "vkDestroySamplerYcbcrConversionKHR"
+vkDestroySamplerYcbcrConversionKHR :: ("device" ::: VkDevice) -> ("ycbcrConversion" ::: VkSamplerYcbcrConversion) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+vkDestroySamplerYcbcrConversionKHR = vkDestroySamplerYcbcrConversion
+-- No documentation found for TopLevel "VkSamplerYcbcrModelConversionKHR"
+type VkSamplerYcbcrModelConversionKHR = VkSamplerYcbcrModelConversion
+-- No documentation found for TopLevel "VkSamplerYcbcrRangeKHR"
+type VkSamplerYcbcrRangeKHR = VkSamplerYcbcrRange
+-- No documentation found for TopLevel "VkChromaLocationKHR"
+type VkChromaLocationKHR = VkChromaLocation
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionKHR"
+type VkSamplerYcbcrConversionKHR = VkSamplerYcbcrConversion
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionInfoKHR"
+type VkSamplerYcbcrConversionInfoKHR = VkSamplerYcbcrConversionInfo
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionInfoKHR"
+pattern VkSamplerYcbcrConversionInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("conversion" ::: VkSamplerYcbcrConversion) -> VkSamplerYcbcrConversionInfoKHR
+pattern VkSamplerYcbcrConversionInfoKHR vkSType vkPNext vkConversion = VkSamplerYcbcrConversionInfo vkSType vkPNext vkConversion
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionCreateInfoKHR"
+type VkSamplerYcbcrConversionCreateInfoKHR = VkSamplerYcbcrConversionCreateInfo
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionCreateInfoKHR"
+pattern VkSamplerYcbcrConversionCreateInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("format" ::: VkFormat) -> ("ycbcrModel" ::: VkSamplerYcbcrModelConversion) -> ("ycbcrRange" ::: VkSamplerYcbcrRange) -> ("components" ::: VkComponentMapping) -> ("xChromaOffset" ::: VkChromaLocation) -> ("yChromaOffset" ::: VkChromaLocation) -> ("chromaFilter" ::: VkFilter) -> ("forceExplicitReconstruction" ::: VkBool32) -> VkSamplerYcbcrConversionCreateInfoKHR
+pattern VkSamplerYcbcrConversionCreateInfoKHR vkSType vkPNext vkFormat vkYcbcrModel vkYcbcrRange vkComponents vkXChromaOffset vkYChromaOffset vkChromaFilter vkForceExplicitReconstruction = VkSamplerYcbcrConversionCreateInfo vkSType vkPNext vkFormat vkYcbcrModel vkYcbcrRange vkComponents vkXChromaOffset vkYChromaOffset vkChromaFilter vkForceExplicitReconstruction
+-- No documentation found for TopLevel "VkBindImagePlaneMemoryInfoKHR"
+type VkBindImagePlaneMemoryInfoKHR = VkBindImagePlaneMemoryInfo
+
+
+-- No documentation found for TopLevel "VkBindImagePlaneMemoryInfoKHR"
+pattern VkBindImagePlaneMemoryInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("planeAspect" ::: VkImageAspectFlagBits) -> VkBindImagePlaneMemoryInfoKHR
+pattern VkBindImagePlaneMemoryInfoKHR vkSType vkPNext vkPlaneAspect = VkBindImagePlaneMemoryInfo vkSType vkPNext vkPlaneAspect
+-- No documentation found for TopLevel "VkImagePlaneMemoryRequirementsInfoKHR"
+type VkImagePlaneMemoryRequirementsInfoKHR = VkImagePlaneMemoryRequirementsInfo
+
+
+-- No documentation found for TopLevel "VkImagePlaneMemoryRequirementsInfoKHR"
+pattern VkImagePlaneMemoryRequirementsInfoKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("planeAspect" ::: VkImageAspectFlagBits) -> VkImagePlaneMemoryRequirementsInfoKHR
+pattern VkImagePlaneMemoryRequirementsInfoKHR vkSType vkPNext vkPlaneAspect = VkImagePlaneMemoryRequirementsInfo vkSType vkPNext vkPlaneAspect
+-- No documentation found for TopLevel "VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"
+type VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR = VkPhysicalDeviceSamplerYcbcrConversionFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR"
+pattern VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("samplerYcbcrConversion" ::: VkBool32) -> VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR
+pattern VkPhysicalDeviceSamplerYcbcrConversionFeaturesKHR vkSType vkPNext vkSamplerYcbcrConversion = VkPhysicalDeviceSamplerYcbcrConversionFeatures vkSType vkPNext vkSamplerYcbcrConversion
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionImageFormatPropertiesKHR"
+type VkSamplerYcbcrConversionImageFormatPropertiesKHR = VkSamplerYcbcrConversionImageFormatProperties
+
+
+-- No documentation found for TopLevel "VkSamplerYcbcrConversionImageFormatPropertiesKHR"
+pattern VkSamplerYcbcrConversionImageFormatPropertiesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("combinedImageSamplerDescriptorCount" ::: Word32) -> VkSamplerYcbcrConversionImageFormatPropertiesKHR
+pattern VkSamplerYcbcrConversionImageFormatPropertiesKHR vkSType vkPNext vkCombinedImageSamplerDescriptorCount = VkSamplerYcbcrConversionImageFormatProperties vkSType vkPNext vkCombinedImageSamplerDescriptorCount
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR"
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES
+-- No documentation found for TopLevel "VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT"
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT :: VkDebugReportObjectTypeEXT
+pattern VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT
+-- No documentation found for TopLevel "VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR"
+pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR :: VkObjectType
+pattern VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION
+-- No documentation found for TopLevel "VK_FORMAT_G8B8G8R8_422_UNORM_KHR"
+pattern VK_FORMAT_G8B8G8R8_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_B8G8R8G8_422_UNORM_KHR"
+pattern VK_FORMAT_B8G8R8G8_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR"
+pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR"
+pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR"
+pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR"
+pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR"
+pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_R10X6_UNORM_PACK16_KHR"
+pattern VK_FORMAT_R10X6_UNORM_PACK16_KHR :: VkFormat
+pattern VK_FORMAT_R10X6_UNORM_PACK16_KHR = VK_FORMAT_R10X6_UNORM_PACK16
+-- No documentation found for TopLevel "VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR"
+pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR :: VkFormat
+pattern VK_FORMAT_R10X6G10X6_UNORM_2PACK16_KHR = VK_FORMAT_R10X6G10X6_UNORM_2PACK16
+-- No documentation found for TopLevel "VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR"
+pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR :: VkFormat
+pattern VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16_KHR = VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR"
+pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16
+-- No documentation found for TopLevel "VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR"
+pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR :: VkFormat
+pattern VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_R12X4_UNORM_PACK16_KHR"
+pattern VK_FORMAT_R12X4_UNORM_PACK16_KHR :: VkFormat
+pattern VK_FORMAT_R12X4_UNORM_PACK16_KHR = VK_FORMAT_R12X4_UNORM_PACK16
+-- No documentation found for TopLevel "VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR"
+pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR :: VkFormat
+pattern VK_FORMAT_R12X4G12X4_UNORM_2PACK16_KHR = VK_FORMAT_R12X4G12X4_UNORM_2PACK16
+-- No documentation found for TopLevel "VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR"
+pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR :: VkFormat
+pattern VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16_KHR = VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR"
+pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16
+-- No documentation found for TopLevel "VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR"
+pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR :: VkFormat
+pattern VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR"
+pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR :: VkFormat
+pattern VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16
+-- No documentation found for TopLevel "VK_FORMAT_G16B16G16R16_422_UNORM_KHR"
+pattern VK_FORMAT_G16B16G16R16_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G16B16G16R16_422_UNORM_KHR = VK_FORMAT_G16B16G16R16_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_B16G16R16G16_422_UNORM_KHR"
+pattern VK_FORMAT_B16G16R16G16_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_B16G16R16G16_422_UNORM_KHR = VK_FORMAT_B16G16R16G16_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR"
+pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR"
+pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR"
+pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR"
+pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM
+-- No documentation found for TopLevel "VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR"
+pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR :: VkFormat
+pattern VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM
+-- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_0_BIT_KHR"
+pattern VK_IMAGE_ASPECT_PLANE_0_BIT_KHR :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT
+-- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_1_BIT_KHR"
+pattern VK_IMAGE_ASPECT_PLANE_1_BIT_KHR :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT
+-- No documentation found for TopLevel "VK_IMAGE_ASPECT_PLANE_2_BIT_KHR"
+pattern VK_IMAGE_ASPECT_PLANE_2_BIT_KHR :: VkImageAspectFlagBits
+pattern VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT
+-- No documentation found for TopLevel "VK_IMAGE_CREATE_DISJOINT_BIT_KHR"
+pattern VK_IMAGE_CREATE_DISJOINT_BIT_KHR :: VkImageCreateFlagBits
+pattern VK_IMAGE_CREATE_DISJOINT_BIT_KHR = VK_IMAGE_CREATE_DISJOINT_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR"
+pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR"
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_DISJOINT_BIT_KHR"
+pattern VK_FORMAT_FEATURE_DISJOINT_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_DISJOINT_BIT_KHR = VK_FORMAT_FEATURE_DISJOINT_BIT
+-- No documentation found for TopLevel "VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR"
+pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR :: VkFormatFeatureFlagBits
+pattern VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT_KHR = VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_RGB_IDENTITY
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_IDENTITY
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_709
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_601
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR"
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR :: VkSamplerYcbcrModelConversion
+pattern VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020_KHR = VK_SAMPLER_YCBCR_MODEL_CONVERSION_YCBCR_2020
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR"
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR :: VkSamplerYcbcrRange
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_FULL_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_FULL
+-- No documentation found for TopLevel "VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR"
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR :: VkSamplerYcbcrRange
+pattern VK_SAMPLER_YCBCR_RANGE_ITU_NARROW_KHR = VK_SAMPLER_YCBCR_RANGE_ITU_NARROW
+-- No documentation found for TopLevel "VK_CHROMA_LOCATION_COSITED_EVEN_KHR"
+pattern VK_CHROMA_LOCATION_COSITED_EVEN_KHR :: VkChromaLocation
+pattern VK_CHROMA_LOCATION_COSITED_EVEN_KHR = VK_CHROMA_LOCATION_COSITED_EVEN
+-- No documentation found for TopLevel "VK_CHROMA_LOCATION_MIDPOINT_KHR"
+pattern VK_CHROMA_LOCATION_MIDPOINT_KHR :: VkChromaLocation
+pattern VK_CHROMA_LOCATION_MIDPOINT_KHR = VK_CHROMA_LOCATION_MIDPOINT
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_shader_draw_parameters.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters
+  ( pattern VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION
+  , pattern VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION"
+pattern VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_SHADER_DRAW_PARAMETERS_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME"
+pattern VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_SHADER_DRAW_PARAMETERS_EXTENSION_NAME = "VK_KHR_shader_draw_parameters"
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_shared_presentable_image.hs
@@ -0,0 +1,156 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image
+  ( pattern VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR
+  , pattern VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR
+  , pattern VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR
+  , pattern VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR
+  , pattern VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION
+  , pattern VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME
+  , vkGetSwapchainStatusKHR
+  , VkSharedPresentSurfaceCapabilitiesKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageUsageFlags
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkPresentModeKHR(..)
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_swapchain
+  ( VkSwapchainKHR
+  )
+
+
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR"
+pattern VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR = VkImageLayout 1000111000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR"
+pattern VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR = VkStructureType 1000111000
+-- No documentation found for Nested "VkPresentModeKHR" "VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"
+pattern VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR :: VkPresentModeKHR
+pattern VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR = VkPresentModeKHR 1000111000
+-- No documentation found for Nested "VkPresentModeKHR" "VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"
+pattern VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR :: VkPresentModeKHR
+pattern VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR = VkPresentModeKHR 1000111001
+-- No documentation found for TopLevel "VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION"
+pattern VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_SHARED_PRESENTABLE_IMAGE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME"
+pattern VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_SHARED_PRESENTABLE_IMAGE_EXTENSION_NAME = "VK_KHR_shared_presentable_image"
+-- | 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
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_SUBOPTIMAL_KHR@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_OUT_OF_DATE_KHR@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainKHR'
+foreign import ccall "vkGetSwapchainStatusKHR" vkGetSwapchainStatusKHR :: ("device" ::: VkDevice) -> ("swapchain" ::: VkSwapchainKHR) -> IO VkResult
+-- | 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSharedPresentSurfaceCapabilitiesKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSharedPresentSurfaceCapabilitiesKHR" "vkSharedPresentSupportedUsageFlags"
+  vkSharedPresentSupportedUsageFlags :: VkImageUsageFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSharedPresentSurfaceCapabilitiesKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkSharedPresentSurfaceCapabilitiesKHR <$> peek (ptr `plusPtr` 0)
+                                                   <*> peek (ptr `plusPtr` 8)
+                                                   <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSharedPresentSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSharedPresentSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 16) (vkSharedPresentSupportedUsageFlags (poked :: VkSharedPresentSurfaceCapabilitiesKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_storage_buffer_storage_class.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_storage_buffer_storage_class.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_storage_buffer_storage_class.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
+  ( pattern VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION
+  , pattern VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION"
+pattern VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME"
+pattern VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_STORAGE_BUFFER_STORAGE_CLASS_EXTENSION_NAME = "VK_KHR_storage_buffer_storage_class"
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_surface.hs
@@ -0,0 +1,924 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkColorSpaceKHR(..)
+  , pattern VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
+  , VkPresentModeKHR(..)
+  , pattern VK_PRESENT_MODE_IMMEDIATE_KHR
+  , pattern VK_PRESENT_MODE_MAILBOX_KHR
+  , pattern VK_PRESENT_MODE_FIFO_KHR
+  , pattern VK_PRESENT_MODE_FIFO_RELAXED_KHR
+  , VkCompositeAlphaFlagBitsKHR(..)
+  , pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR
+  , pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR
+  , pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR
+  , pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR
+  , VkSurfaceTransformFlagBitsKHR(..)
+  , pattern VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR
+  , pattern VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR
+  , pattern VK_ERROR_SURFACE_LOST_KHR
+  , pattern VK_ERROR_NATIVE_WINDOW_IN_USE_KHR
+  , pattern VK_OBJECT_TYPE_SURFACE_KHR
+  , pattern VK_KHR_SURFACE_SPEC_VERSION
+  , pattern VK_KHR_SURFACE_EXTENSION_NAME
+  , pattern VK_COLORSPACE_SRGB_NONLINEAR_KHR
+  , VkSurfaceKHR
+  , vkDestroySurfaceKHR
+  , vkGetPhysicalDeviceSurfaceSupportKHR
+  , vkGetPhysicalDeviceSurfaceCapabilitiesKHR
+  , vkGetPhysicalDeviceSurfaceFormatsKHR
+  , vkGetPhysicalDeviceSurfacePresentModesKHR
+  , VkSurfaceCapabilitiesKHR(..)
+  , VkSurfaceFormatKHR(..)
+  , VkCompositeAlphaFlagsKHR
+  , VkSurfaceTransformFlagsKHR
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  , VkBool32(..)
+  , VkObjectType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageUsageFlags
+  , VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkExtent2D(..)
+  )
+
+
+-- ** VkColorSpaceKHR
+
+-- | VkColorSpaceKHR - supported color space of the presentation engine
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSurfaceFormatKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
+newtype VkColorSpaceKHR = VkColorSpaceKHR Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkColorSpaceKHR where
+  showsPrec _ VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = showString "VK_COLOR_SPACE_SRGB_NONLINEAR_KHR"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkColorSpaceKHR 1000104001) = showString "VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104002) = showString "VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104003) = showString "VK_COLOR_SPACE_DCI_P3_LINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104004) = showString "VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104005) = showString "VK_COLOR_SPACE_BT709_LINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104006) = showString "VK_COLOR_SPACE_BT709_NONLINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104007) = showString "VK_COLOR_SPACE_BT2020_LINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104008) = showString "VK_COLOR_SPACE_HDR10_ST2084_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104009) = showString "VK_COLOR_SPACE_DOLBYVISION_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104010) = showString "VK_COLOR_SPACE_HDR10_HLG_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104011) = showString "VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104012) = showString "VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104013) = showString "VK_COLOR_SPACE_PASS_THROUGH_EXT"
+  showsPrec _ (VkColorSpaceKHR 1000104014) = showString "VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT"
+  showsPrec p (VkColorSpaceKHR x) = showParen (p >= 11) (showString "VkColorSpaceKHR " . showsPrec 11 x)
+
+instance Read VkColorSpaceKHR where
+  readPrec = parens ( choose [ ("VK_COLOR_SPACE_SRGB_NONLINEAR_KHR", pure VK_COLOR_SPACE_SRGB_NONLINEAR_KHR)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_COLOR_SPACE_DISPLAY_P3_NONLINEAR_EXT",    pure (VkColorSpaceKHR 1000104001))
+                             , ("VK_COLOR_SPACE_EXTENDED_SRGB_LINEAR_EXT",    pure (VkColorSpaceKHR 1000104002))
+                             , ("VK_COLOR_SPACE_DCI_P3_LINEAR_EXT",           pure (VkColorSpaceKHR 1000104003))
+                             , ("VK_COLOR_SPACE_DCI_P3_NONLINEAR_EXT",        pure (VkColorSpaceKHR 1000104004))
+                             , ("VK_COLOR_SPACE_BT709_LINEAR_EXT",            pure (VkColorSpaceKHR 1000104005))
+                             , ("VK_COLOR_SPACE_BT709_NONLINEAR_EXT",         pure (VkColorSpaceKHR 1000104006))
+                             , ("VK_COLOR_SPACE_BT2020_LINEAR_EXT",           pure (VkColorSpaceKHR 1000104007))
+                             , ("VK_COLOR_SPACE_HDR10_ST2084_EXT",            pure (VkColorSpaceKHR 1000104008))
+                             , ("VK_COLOR_SPACE_DOLBYVISION_EXT",             pure (VkColorSpaceKHR 1000104009))
+                             , ("VK_COLOR_SPACE_HDR10_HLG_EXT",               pure (VkColorSpaceKHR 1000104010))
+                             , ("VK_COLOR_SPACE_ADOBERGB_LINEAR_EXT",         pure (VkColorSpaceKHR 1000104011))
+                             , ("VK_COLOR_SPACE_ADOBERGB_NONLINEAR_EXT",      pure (VkColorSpaceKHR 1000104012))
+                             , ("VK_COLOR_SPACE_PASS_THROUGH_EXT",            pure (VkColorSpaceKHR 1000104013))
+                             , ("VK_COLOR_SPACE_EXTENDED_SRGB_NONLINEAR_EXT", pure (VkColorSpaceKHR 1000104014))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkColorSpaceKHR")
+                        v <- step readPrec
+                        pure (VkColorSpaceKHR v)
+                        )
+                    )
+
+-- | @VK_COLOR_SPACE_SRGB_NONLINEAR_KHR@ specifies support for the sRGB color
+-- space.
+pattern VK_COLOR_SPACE_SRGB_NONLINEAR_KHR :: VkColorSpaceKHR
+pattern VK_COLOR_SPACE_SRGB_NONLINEAR_KHR = VkColorSpaceKHR 0
+-- ** VkPresentModeKHR
+
+-- | 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
+--     current image, meaning this mode /may/ result in visible tearing. No
+--     internal queuing of presentation requests is needed, as the requests
+--     are applied immediately.
+--
+-- -   @VK_PRESENT_MODE_MAILBOX_KHR@ specifies that the presentation engine
+--     waits for the next vertical blanking period to update the current
+--     image. Tearing /cannot/ be observed. An internal single-entry queue
+--     is used to hold pending presentation requests. If the queue is full
+--     when a new presentation request is received, the new request
+--     replaces the existing entry, and any images associated with the
+--     prior entry become available for re-use by the application. One
+--     request is removed from the queue and processed during each vertical
+--     blanking period in which the queue is non-empty.
+--
+-- -   @VK_PRESENT_MODE_FIFO_KHR@ specifies that the presentation engine
+--     waits for the next vertical blanking period to update the current
+--     image. Tearing /cannot/ be observed. An internal queue is used to
+--     hold pending presentation requests. New requests are appended to the
+--     end of the queue, and one request is removed from the beginning of
+--     the queue and processed during each vertical blanking period in
+--     which the queue is non-empty. This is the only value of
+--     @presentMode@ that is /required/ to be supported.
+--
+-- -   @VK_PRESENT_MODE_FIFO_RELAXED_KHR@ specifies that the presentation
+--     engine generally waits for the next vertical blanking period to
+--     update the current image. If a vertical blanking period has already
+--     passed since the last update of the current image then the
+--     presentation engine does not wait for another vertical blanking
+--     period for the update, meaning this mode /may/ result in visible
+--     tearing in this case. This mode is useful for reducing visual
+--     stutter with an application that will mostly present a new image
+--     before the next vertical blanking period, but may occasionally be
+--     late, and present a new image just after the next vertical blanking
+--     period. An internal queue is used to hold pending presentation
+--     requests. New requests are appended to the end of the queue, and one
+--     request is removed from the beginning of the queue and processed
+--     during or after each vertical blanking period in which the queue is
+--     non-empty.
+--
+-- __Note__
+--
+-- For reference, the mode indicated by @VK_PRESENT_MODE_FIFO_KHR@ is
+-- equivalent to the behavior of {wgl|glX|egl}SwapBuffers with a swap
+-- interval of 1, while the mode indicated by
+-- @VK_PRESENT_MODE_FIFO_RELAXED_KHR@ is equivalent to the behavior of
+-- {wgl|glX}SwapBuffers with a swap interval of -1 (from the
+-- {WGL|GLX}_EXT_swap_control_tear extensions).
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR',
+-- 'vkGetPhysicalDeviceSurfacePresentModesKHR'
+newtype VkPresentModeKHR = VkPresentModeKHR Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkPresentModeKHR where
+  showsPrec _ VK_PRESENT_MODE_IMMEDIATE_KHR = showString "VK_PRESENT_MODE_IMMEDIATE_KHR"
+  showsPrec _ VK_PRESENT_MODE_MAILBOX_KHR = showString "VK_PRESENT_MODE_MAILBOX_KHR"
+  showsPrec _ VK_PRESENT_MODE_FIFO_KHR = showString "VK_PRESENT_MODE_FIFO_KHR"
+  showsPrec _ VK_PRESENT_MODE_FIFO_RELAXED_KHR = showString "VK_PRESENT_MODE_FIFO_RELAXED_KHR"
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkPresentModeKHR 1000111000) = showString "VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR"
+  showsPrec _ (VkPresentModeKHR 1000111001) = showString "VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR"
+  showsPrec p (VkPresentModeKHR x) = showParen (p >= 11) (showString "VkPresentModeKHR " . showsPrec 11 x)
+
+instance Read VkPresentModeKHR where
+  readPrec = parens ( choose [ ("VK_PRESENT_MODE_IMMEDIATE_KHR",    pure VK_PRESENT_MODE_IMMEDIATE_KHR)
+                             , ("VK_PRESENT_MODE_MAILBOX_KHR",      pure VK_PRESENT_MODE_MAILBOX_KHR)
+                             , ("VK_PRESENT_MODE_FIFO_KHR",         pure VK_PRESENT_MODE_FIFO_KHR)
+                             , ("VK_PRESENT_MODE_FIFO_RELAXED_KHR", pure VK_PRESENT_MODE_FIFO_RELAXED_KHR)
+                             , -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_PRESENT_MODE_SHARED_DEMAND_REFRESH_KHR",     pure (VkPresentModeKHR 1000111000))
+                             , ("VK_PRESENT_MODE_SHARED_CONTINUOUS_REFRESH_KHR", pure (VkPresentModeKHR 1000111001))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPresentModeKHR")
+                        v <- step readPrec
+                        pure (VkPresentModeKHR v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkPresentModeKHR" "VK_PRESENT_MODE_IMMEDIATE_KHR"
+pattern VK_PRESENT_MODE_IMMEDIATE_KHR :: VkPresentModeKHR
+pattern VK_PRESENT_MODE_IMMEDIATE_KHR = VkPresentModeKHR 0
+
+-- No documentation found for Nested "VkPresentModeKHR" "VK_PRESENT_MODE_MAILBOX_KHR"
+pattern VK_PRESENT_MODE_MAILBOX_KHR :: VkPresentModeKHR
+pattern VK_PRESENT_MODE_MAILBOX_KHR = VkPresentModeKHR 1
+
+-- No documentation found for Nested "VkPresentModeKHR" "VK_PRESENT_MODE_FIFO_KHR"
+pattern VK_PRESENT_MODE_FIFO_KHR :: VkPresentModeKHR
+pattern VK_PRESENT_MODE_FIFO_KHR = VkPresentModeKHR 2
+
+-- No documentation found for Nested "VkPresentModeKHR" "VK_PRESENT_MODE_FIFO_RELAXED_KHR"
+pattern VK_PRESENT_MODE_FIFO_RELAXED_KHR :: VkPresentModeKHR
+pattern VK_PRESENT_MODE_FIFO_RELAXED_KHR = VkPresentModeKHR 3
+-- ** VkCompositeAlphaFlagBitsKHR
+
+-- | VkCompositeAlphaFlagBitsKHR - alpha compositing modes supported on a
+-- device
+--
+-- = Description
+-- #_description#
+--
+-- These values are described as follows:
+--
+-- -   @VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR@: The alpha channel, if it
+--     exists, of the images is ignored in the compositing process.
+--     Instead, the image is treated as if it has a constant alpha of 1.0.
+--
+-- -   @VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR@: The alpha channel, if
+--     it exists, of the images is respected in the compositing process.
+--     The non-alpha channels of the image are expected to already be
+--     multiplied by the alpha channel by the application.
+--
+-- -   @VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR@: The alpha channel, if
+--     it exists, of the images is respected in the compositing process.
+--     The non-alpha channels of the image are not expected to already be
+--     multiplied by the alpha channel by the application; instead, the
+--     compositor will multiply the non-alpha channels of the image by the
+--     alpha channel during compositing.
+--
+-- -   @VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR@: The way in which the
+--     presentation engine treats the alpha channel in the images is
+--     unknown to the Vulkan API. Instead, the application is responsible
+--     for setting the composite alpha blending mode using native window
+--     system commands. If the application does not set the blending mode
+--     using native window system commands, then a platform-specific
+--     default will be used.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCompositeAlphaFlagsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
+newtype VkCompositeAlphaFlagBitsKHR = VkCompositeAlphaFlagBitsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkCompositeAlphaFlagBitsKHR where
+  showsPrec _ VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = showString "VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
+  showsPrec _ VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = showString "VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
+  showsPrec _ VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = showString "VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
+  showsPrec _ VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = showString "VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"
+  showsPrec p (VkCompositeAlphaFlagBitsKHR x) = showParen (p >= 11) (showString "VkCompositeAlphaFlagBitsKHR " . showsPrec 11 x)
+
+instance Read VkCompositeAlphaFlagBitsKHR where
+  readPrec = parens ( choose [ ("VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR",          pure VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR)
+                             , ("VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR",  pure VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR)
+                             , ("VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR", pure VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR)
+                             , ("VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR",         pure VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCompositeAlphaFlagBitsKHR")
+                        v <- step readPrec
+                        pure (VkCompositeAlphaFlagBitsKHR v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkCompositeAlphaFlagBitsKHR" "VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
+pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR :: VkCompositeAlphaFlagBitsKHR
+pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x00000001
+
+-- No documentation found for Nested "VkCompositeAlphaFlagBitsKHR" "VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
+pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR :: VkCompositeAlphaFlagBitsKHR
+pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x00000002
+
+-- No documentation found for Nested "VkCompositeAlphaFlagBitsKHR" "VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
+pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR :: VkCompositeAlphaFlagBitsKHR
+pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x00000004
+
+-- No documentation found for Nested "VkCompositeAlphaFlagBitsKHR" "VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"
+pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR :: VkCompositeAlphaFlagBitsKHR
+pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x00000008
+-- ** VkSurfaceTransformFlagBitsKHR
+
+-- | VkSurfaceTransformFlagBitsKHR - presentation transforms supported on a
+-- device
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.VkDisplaySurfaceCreateInfoKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.VkSurfaceCapabilities2EXT',
+-- 'VkSurfaceCapabilitiesKHR', 'VkSurfaceTransformFlagsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.VkSwapchainCreateInfoKHR'
+newtype VkSurfaceTransformFlagBitsKHR = VkSurfaceTransformFlagBitsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSurfaceTransformFlagBitsKHR where
+  showsPrec _ VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = showString "VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = showString "VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = showString "VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = showString "VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"
+  showsPrec _ VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = showString "VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"
+  showsPrec p (VkSurfaceTransformFlagBitsKHR x) = showParen (p >= 11) (showString "VkSurfaceTransformFlagBitsKHR " . showsPrec 11 x)
+
+instance Read VkSurfaceTransformFlagBitsKHR where
+  readPrec = parens ( choose [ ("VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR",                     pure VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR",                    pure VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR",                   pure VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR",                   pure VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR",            pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR",  pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR", pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR", pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR)
+                             , ("VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR",                      pure VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSurfaceTransformFlagBitsKHR")
+                        v <- step readPrec
+                        pure (VkSurfaceTransformFlagBitsKHR v)
+                        )
+                    )
+
+-- | @VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR@ specifies that image content is
+-- presented without being transformed.
+pattern VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000001
+
+-- | @VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR@ specifies that image content is
+-- rotated 90 degrees clockwise.
+pattern VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000002
+
+-- | @VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR@ specifies that image content
+-- is rotated 180 degrees clockwise.
+pattern VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000004
+
+-- | @VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR@ specifies that image content
+-- is rotated 270 degrees clockwise.
+pattern VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000008
+
+-- | @VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR@ specifies that image
+-- content is mirrored horizontally.
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000010
+
+-- | @VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR@ specifies
+-- that image content is mirrored horizontally, then rotated 90 degrees
+-- clockwise.
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000020
+
+-- | @VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR@ specifies
+-- that image content is mirrored horizontally, then rotated 180 degrees
+-- clockwise.
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000040
+
+-- | @VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR@ specifies
+-- that image content is mirrored horizontally, then rotated 270 degrees
+-- clockwise.
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000080
+
+-- | @VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR@ specifies that the presentation
+-- transform is not specified, and is instead determined by
+-- platform-specific considerations and mechanisms outside Vulkan.
+pattern VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR :: VkSurfaceTransformFlagBitsKHR
+pattern VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x00000100
+-- No documentation found for Nested "VkResult" "VK_ERROR_SURFACE_LOST_KHR"
+pattern VK_ERROR_SURFACE_LOST_KHR :: VkResult
+pattern VK_ERROR_SURFACE_LOST_KHR = VkResult (-1000000000)
+-- No documentation found for Nested "VkResult" "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR"
+pattern VK_ERROR_NATIVE_WINDOW_IN_USE_KHR :: VkResult
+pattern VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = VkResult (-1000000001)
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_SURFACE_KHR"
+pattern VK_OBJECT_TYPE_SURFACE_KHR :: VkObjectType
+pattern VK_OBJECT_TYPE_SURFACE_KHR = VkObjectType 1000000000
+-- No documentation found for TopLevel "VK_KHR_SURFACE_SPEC_VERSION"
+pattern VK_KHR_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_SURFACE_SPEC_VERSION = 25
+-- No documentation found for TopLevel "VK_KHR_SURFACE_EXTENSION_NAME"
+pattern VK_KHR_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_SURFACE_EXTENSION_NAME = "VK_KHR_surface"
+-- No documentation found for TopLevel "VK_COLORSPACE_SRGB_NONLINEAR_KHR"
+pattern VK_COLORSPACE_SRGB_NONLINEAR_KHR :: VkColorSpaceKHR
+pattern VK_COLORSPACE_SRGB_NONLINEAR_KHR = VK_COLOR_SPACE_SRGB_NONLINEAR_KHR
+-- | Dummy data to tag the 'Ptr' with
+data VkSurfaceKHR_T
+-- | 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
+-- platform-specific extensions each provide a function for creating a
+-- @VkSurfaceKHR@ object for the respective platform. From the
+-- application’s perspective this is an opaque handle, just like the
+-- 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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_android_surface.vkCreateAndroidSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display.vkCreateDisplayPlaneSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_MVK_ios_surface.vkCreateIOSSurfaceMVK',
+-- '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',
+-- 'vkDestroySurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetDeviceGroupSurfacePresentModesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkGetPhysicalDevicePresentRectanglesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter.vkGetPhysicalDeviceSurfaceCapabilities2EXT',
+-- 'vkGetPhysicalDeviceSurfaceCapabilitiesKHR',
+-- 'vkGetPhysicalDeviceSurfaceFormatsKHR',
+-- 'vkGetPhysicalDeviceSurfacePresentModesKHR',
+-- 'vkGetPhysicalDeviceSurfaceSupportKHR'
+type VkSurfaceKHR = Ptr VkSurfaceKHR_T
+-- | vkDestroySurfaceKHR - Destroy a VkSurfaceKHR object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance used to create the surface.
+--
+-- -   @surface@ is the surface to destroy.
+--
+-- -   @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>).
+--
+-- = Description
+-- #_description#
+--
+-- Destroying a @VkSurfaceKHR@ merely severs the connection between Vulkan
+-- and the native surface, and does not imply destroying the native
+-- surface, closing a window, or similar behavior.
+--
+-- == Valid Usage
+--
+-- -   All @VkSwapchainKHR@ objects created for @surface@ /must/ have been
+--     destroyed prior to destroying @surface@
+--
+-- -   If @VkAllocationCallbacks@ were provided when @surface@ was created,
+--     a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @surface@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   If @surface@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @surface@ /must/
+--     be a valid @VkSurfaceKHR@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   If @surface@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @instance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @surface@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance', 'VkSurfaceKHR'
+foreign import ccall "vkDestroySurfaceKHR" vkDestroySurfaceKHR :: ("instance" ::: VkInstance) -> ("surface" ::: VkSurfaceKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkGetPhysicalDeviceSurfaceSupportKHR - Query if presentation is
+-- supported
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family.
+--
+-- -   @surface@ is the surface.
+--
+-- -   @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@
+--     returned by @vkGetPhysicalDeviceQueueFamilyProperties@ for the given
+--     @physicalDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @pSupported@ /must/ be a valid pointer to a @VkBool32@ value
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- @VkBool32@,
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkSurfaceKHR'
+foreign import ccall "vkGetPhysicalDeviceSurfaceSupportKHR" vkGetPhysicalDeviceSurfaceSupportKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("queueFamilyIndex" ::: Word32) -> ("surface" ::: VkSurfaceKHR) -> ("pSupported" ::: Ptr VkBool32) -> IO VkResult
+-- | vkGetPhysicalDeviceSurfaceCapabilitiesKHR - Query surface capabilities
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @surface@ is the surface that will be associated with the swapchain.
+--
+-- -   @pSurfaceCapabilities@ is a pointer to an instance of the
+--     'VkSurfaceCapabilitiesKHR' structure in which the capabilities are
+--     returned.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @pSurfaceCapabilities@ /must/ be a valid pointer to a
+--     @VkSurfaceCapabilitiesKHR@ structure
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkSurfaceCapabilitiesKHR', 'VkSurfaceKHR'
+foreign import ccall "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" vkGetPhysicalDeviceSurfaceCapabilitiesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("surface" ::: VkSurfaceKHR) -> ("pSurfaceCapabilities" ::: Ptr VkSurfaceCapabilitiesKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceSurfaceFormatsKHR - Query color formats supported by
+-- surface
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @surface@ is the surface that will be associated with the swapchain.
+--
+-- -   @pSurfaceFormatCount@ is a pointer to an integer related to the
+--     number of format pairs available or queried, as described below.
+--
+-- -   @pSurfaceFormats@ is either @NULL@ or a pointer to an array of
+--     @VkSurfaceFormatKHR@ structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pSurfaceFormats@ is @NULL@, then the number of format pairs
+-- supported for the given @surface@ is returned in @pSurfaceFormatCount@.
+-- The number of format pairs supported will be greater than or equal to 1.
+-- Otherwise, @pSurfaceFormatCount@ /must/ point to a variable set by the
+-- user to the number of elements in the @pSurfaceFormats@ array, and on
+-- return the variable is overwritten with the number of structures
+-- actually written to @pSurfaceFormats@. If the value of
+-- @pSurfaceFormatCount@ is less than the number of format pairs supported,
+-- at most @pSurfaceFormatCount@ structures will be written. If
+-- @pSurfaceFormatCount@ is smaller than the number of format pairs
+-- supported for the given @surface@, @VK_INCOMPLETE@ will be returned
+-- instead of @VK_SUCCESS@ to indicate that not all the available values
+-- were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @pSurfaceFormatCount@ /must/ be a valid pointer to a @uint32_t@
+--     value
+--
+-- -   If the value referenced by @pSurfaceFormatCount@ is not @0@, and
+--     @pSurfaceFormats@ is not @NULL@, @pSurfaceFormats@ /must/ be a valid
+--     pointer to an array of @pSurfaceFormatCount@ @VkSurfaceFormatKHR@
+--     structures
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == 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_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkSurfaceFormatKHR', 'VkSurfaceKHR'
+foreign import ccall "vkGetPhysicalDeviceSurfaceFormatsKHR" vkGetPhysicalDeviceSurfaceFormatsKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("surface" ::: VkSurfaceKHR) -> ("pSurfaceFormatCount" ::: Ptr Word32) -> ("pSurfaceFormats" ::: Ptr VkSurfaceFormatKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceSurfacePresentModesKHR - Query supported presentation
+-- modes
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device that will be associated with
+--     the swapchain to be created, as described for
+--     'Graphics.Vulkan.Extensions.VK_KHR_swapchain.vkCreateSwapchainKHR'.
+--
+-- -   @surface@ is the surface that will be associated with the swapchain.
+--
+-- -   @pPresentModeCount@ is a pointer to an integer related to the number
+--     of presentation modes available or queried, as described below.
+--
+-- -   @pPresentModes@ is either @NULL@ or a pointer to an array of
+--     'VkPresentModeKHR' values, indicating the supported presentation
+--     modes.
+--
+-- = Description
+-- #_description#
+--
+-- If @pPresentModes@ is @NULL@, then the number of presentation modes
+-- supported for the given @surface@ is returned in @pPresentModeCount@.
+-- Otherwise, @pPresentModeCount@ /must/ point to a variable set by the
+-- user to the number of elements in the @pPresentModes@ array, and on
+-- return the variable is overwritten with the number of values actually
+-- written to @pPresentModes@. If the value of @pPresentModeCount@ is less
+-- than the number of presentation modes supported, at most
+-- @pPresentModeCount@ values will be written. If @pPresentModeCount@ is
+-- smaller than the number of presentation modes supported for the given
+-- @surface@, @VK_INCOMPLETE@ will be returned instead of @VK_SUCCESS@ to
+-- indicate that not all the available values were returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @pPresentModeCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pPresentModeCount@ is not @0@, and
+--     @pPresentModes@ is not @NULL@, @pPresentModes@ /must/ be a valid
+--     pointer to an array of @pPresentModeCount@ 'VkPresentModeKHR' values
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == 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_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice',
+-- 'VkPresentModeKHR', 'VkSurfaceKHR'
+foreign import ccall "vkGetPhysicalDeviceSurfacePresentModesKHR" vkGetPhysicalDeviceSurfacePresentModesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("surface" ::: VkSurfaceKHR) -> ("pPresentModeCount" ::: Ptr Word32) -> ("pPresentModes" ::: Ptr VkPresentModeKHR) -> IO VkResult
+-- | VkSurfaceCapabilitiesKHR - Structure describing capabilities of a
+-- surface
+--
+-- = Description
+-- #_description#
+--
+-- __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',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.VkSurfaceCapabilities2KHR',
+-- 'VkSurfaceTransformFlagBitsKHR', 'VkSurfaceTransformFlagsKHR',
+-- 'vkGetPhysicalDeviceSurfaceCapabilitiesKHR'
+data VkSurfaceCapabilitiesKHR = VkSurfaceCapabilitiesKHR
+  { -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMinImageCount"
+  vkMinImageCount :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMaxImageCount"
+  vkMaxImageCount :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkCurrentExtent"
+  vkCurrentExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMinImageExtent"
+  vkMinImageExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMaxImageExtent"
+  vkMaxImageExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkMaxImageArrayLayers"
+  vkMaxImageArrayLayers :: Word32
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkSupportedTransforms"
+  vkSupportedTransforms :: VkSurfaceTransformFlagsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkCurrentTransform"
+  vkCurrentTransform :: VkSurfaceTransformFlagBitsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkSupportedCompositeAlpha"
+  vkSupportedCompositeAlpha :: VkCompositeAlphaFlagsKHR
+  , -- No documentation found for Nested "VkSurfaceCapabilitiesKHR" "vkSupportedUsageFlags"
+  vkSupportedUsageFlags :: VkImageUsageFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSurfaceCapabilitiesKHR where
+  sizeOf ~_ = 52
+  alignment ~_ = 4
+  peek ptr = VkSurfaceCapabilitiesKHR <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 4)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 24)
+                                      <*> peek (ptr `plusPtr` 32)
+                                      <*> peek (ptr `plusPtr` 36)
+                                      <*> peek (ptr `plusPtr` 40)
+                                      <*> peek (ptr `plusPtr` 44)
+                                      <*> peek (ptr `plusPtr` 48)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkMinImageCount (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 4) (vkMaxImageCount (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkCurrentExtent (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 16) (vkMinImageExtent (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 24) (vkMaxImageExtent (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 32) (vkMaxImageArrayLayers (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 36) (vkSupportedTransforms (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 40) (vkCurrentTransform (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 44) (vkSupportedCompositeAlpha (poked :: VkSurfaceCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 48) (vkSupportedUsageFlags (poked :: VkSurfaceCapabilitiesKHR))
+-- | 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"
+  vkFormat :: VkFormat
+  , -- No documentation found for Nested "VkSurfaceFormatKHR" "vkColorSpace"
+  vkColorSpace :: VkColorSpaceKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSurfaceFormatKHR where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkSurfaceFormatKHR <$> peek (ptr `plusPtr` 0)
+                                <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkFormat (poked :: VkSurfaceFormatKHR))
+                *> poke (ptr `plusPtr` 4) (vkColorSpace (poked :: VkSurfaceFormatKHR))
+-- | 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',
+-- 'VkSurfaceCapabilitiesKHR'
+type VkCompositeAlphaFlagsKHR = VkCompositeAlphaFlagBitsKHR
+-- | 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',
+-- 'VkSurfaceCapabilitiesKHR', 'VkSurfaceTransformFlagBitsKHR'
+type VkSurfaceTransformFlagsKHR = VkSurfaceTransformFlagBitsKHR
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_swapchain.hs
@@ -0,0 +1,1900 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_swapchain
+  ( VkSwapchainCreateFlagBitsKHR(..)
+  , VkDeviceGroupPresentModeFlagBitsKHR(..)
+  , pattern VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR
+  , pattern VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR
+  , pattern VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR
+  , pattern VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR
+  , pattern VK_IMAGE_LAYOUT_PRESENT_SRC_KHR
+  , pattern VK_SUBOPTIMAL_KHR
+  , pattern VK_ERROR_OUT_OF_DATE_KHR
+  , pattern VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_PRESENT_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR
+  , pattern VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR
+  , pattern VK_OBJECT_TYPE_SWAPCHAIN_KHR
+  , pattern VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR
+  , pattern VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR
+  , pattern VK_KHR_SWAPCHAIN_SPEC_VERSION
+  , pattern VK_KHR_SWAPCHAIN_EXTENSION_NAME
+  , VkSwapchainKHR
+  , vkCreateSwapchainKHR
+  , vkDestroySwapchainKHR
+  , vkGetSwapchainImagesKHR
+  , vkAcquireNextImageKHR
+  , vkQueuePresentKHR
+  , vkGetDeviceGroupPresentCapabilitiesKHR
+  , vkGetDeviceGroupSurfacePresentModesKHR
+  , vkAcquireNextImage2KHR
+  , vkGetPhysicalDevicePresentRectanglesKHR
+  , VkSwapchainCreateInfoKHR(..)
+  , VkPresentInfoKHR(..)
+  , VkDeviceGroupPresentCapabilitiesKHR(..)
+  , VkImageSwapchainCreateInfoKHR(..)
+  , VkBindImageMemorySwapchainInfoKHR(..)
+  , VkAcquireNextImageInfoKHR(..)
+  , VkDeviceGroupPresentInfoKHR(..)
+  , VkDeviceGroupSwapchainCreateInfoKHR(..)
+  , VkSwapchainCreateFlagsKHR
+  , VkDeviceGroupPresentModeFlagsKHR
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Vector.Storable.Sized
+  ( Vector
+  )
+import Data.Word
+  ( Word32
+  , Word64
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Buffer
+  ( VkSharingMode(..)
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkFormat(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageUsageFlags
+  , VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.Image
+  ( VkImageLayout(..)
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkImage
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkExtent2D(..)
+  , VkRect2D(..)
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkQueue
+  , VkFence
+  , VkSemaphore
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation
+  ( VK_MAX_DEVICE_GROUP_SIZE
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkPresentModeKHR(..)
+  , VkCompositeAlphaFlagBitsKHR(..)
+  , VkSurfaceTransformFlagBitsKHR(..)
+  , VkColorSpaceKHR(..)
+  , VkSurfaceKHR
+  )
+
+
+-- ** VkSwapchainCreateFlagBitsKHR
+
+-- | VkSwapchainCreateFlagBitsKHR - Bitmask controlling swapchain creation
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkSwapchainCreateFlagsKHR'
+newtype VkSwapchainCreateFlagBitsKHR = VkSwapchainCreateFlagBitsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkSwapchainCreateFlagBitsKHR where
+  -- The following values are from extensions, the patterns themselves are exported from the extension modules
+  showsPrec _ (VkSwapchainCreateFlagBitsKHR 0x00000001) = showString "VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR"
+  showsPrec _ (VkSwapchainCreateFlagBitsKHR 0x00000002) = showString "VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR"
+  showsPrec p (VkSwapchainCreateFlagBitsKHR x) = showParen (p >= 11) (showString "VkSwapchainCreateFlagBitsKHR " . showsPrec 11 x)
+
+instance Read VkSwapchainCreateFlagBitsKHR where
+  readPrec = parens ( choose [ -- The following values are from extensions, the patterns themselves are exported from the extension modules
+                               ("VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR", pure (VkSwapchainCreateFlagBitsKHR 0x00000001))
+                             , ("VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR",                   pure (VkSwapchainCreateFlagBitsKHR 0x00000002))
+                             , ("VK_SWAPCHAIN_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR", pure (VkSwapchainCreateFlagBitsKHR 0x00000001))
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkSwapchainCreateFlagBitsKHR")
+                        v <- step readPrec
+                        pure (VkSwapchainCreateFlagBitsKHR v)
+                        )
+                    )
+
+
+-- ** VkDeviceGroupPresentModeFlagBitsKHR
+
+-- | VkDeviceGroupPresentModeFlagBitsKHR - Bitmask specifying supported
+-- device group present modes
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDeviceGroupPresentInfoKHR', 'VkDeviceGroupPresentModeFlagsKHR'
+newtype VkDeviceGroupPresentModeFlagBitsKHR = VkDeviceGroupPresentModeFlagBitsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkDeviceGroupPresentModeFlagBitsKHR where
+  showsPrec _ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = showString "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR"
+  showsPrec _ VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = showString "VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR"
+  showsPrec _ VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = showString "VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR"
+  showsPrec _ VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = showString "VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR"
+  showsPrec p (VkDeviceGroupPresentModeFlagBitsKHR x) = showParen (p >= 11) (showString "VkDeviceGroupPresentModeFlagBitsKHR " . showsPrec 11 x)
+
+instance Read VkDeviceGroupPresentModeFlagBitsKHR where
+  readPrec = parens ( choose [ ("VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR",              pure VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR)
+                             , ("VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR",             pure VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR)
+                             , ("VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR",                pure VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR)
+                             , ("VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR", pure VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkDeviceGroupPresentModeFlagBitsKHR")
+                        v <- step readPrec
+                        pure (VkDeviceGroupPresentModeFlagBitsKHR v)
+                        )
+                    )
+
+-- | @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@ specifies that any physical
+-- device with a presentation engine /can/ present its own swapchain
+-- images.
+pattern VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR :: VkDeviceGroupPresentModeFlagBitsKHR
+pattern VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR = VkDeviceGroupPresentModeFlagBitsKHR 0x00000001
+
+-- | @VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR@ specifies that any
+-- physical device with a presentation engine /can/ present swapchain
+-- images from any physical device in its @presentMask@.
+pattern VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR :: VkDeviceGroupPresentModeFlagBitsKHR
+pattern VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR = VkDeviceGroupPresentModeFlagBitsKHR 0x00000002
+
+-- | @VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR@ specifies that any physical
+-- device with a presentation engine /can/ present the sum of swapchain
+-- images from any physical devices in its @presentMask@.
+pattern VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR :: VkDeviceGroupPresentModeFlagBitsKHR
+pattern VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR = VkDeviceGroupPresentModeFlagBitsKHR 0x00000004
+
+-- | @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR@ specifies that
+-- multiple physical devices with a presentation engine /can/ each present
+-- their own swapchain images.
+pattern VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR :: VkDeviceGroupPresentModeFlagBitsKHR
+pattern VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR = VkDeviceGroupPresentModeFlagBitsKHR 0x00000008
+-- No documentation found for Nested "VkImageLayout" "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR"
+pattern VK_IMAGE_LAYOUT_PRESENT_SRC_KHR :: VkImageLayout
+pattern VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = VkImageLayout 1000001002
+-- No documentation found for Nested "VkResult" "VK_SUBOPTIMAL_KHR"
+pattern VK_SUBOPTIMAL_KHR :: VkResult
+pattern VK_SUBOPTIMAL_KHR = VkResult 1000001003
+-- No documentation found for Nested "VkResult" "VK_ERROR_OUT_OF_DATE_KHR"
+pattern VK_ERROR_OUT_OF_DATE_KHR :: VkResult
+pattern VK_ERROR_OUT_OF_DATE_KHR = VkResult (-1000001004)
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = VkStructureType 1000001000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PRESENT_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_PRESENT_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = VkStructureType 1000001001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = VkStructureType 1000060007
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR = VkStructureType 1000060008
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR = VkStructureType 1000060009
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR = VkStructureType 1000060010
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR = VkStructureType 1000060011
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR = VkStructureType 1000060012
+-- 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"
+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"
+pattern VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR :: VkSwapchainCreateFlagBitsKHR
+pattern VK_SWAPCHAIN_CREATE_PROTECTED_BIT_KHR = VkSwapchainCreateFlagBitsKHR 0x00000002
+-- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_SPEC_VERSION"
+pattern VK_KHR_SWAPCHAIN_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_SWAPCHAIN_SPEC_VERSION = 70
+-- No documentation found for TopLevel "VK_KHR_SWAPCHAIN_EXTENSION_NAME"
+pattern VK_KHR_SWAPCHAIN_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_SWAPCHAIN_EXTENSION_NAME = "VK_KHR_swapchain"
+-- | Dummy data to tag the 'Ptr' with
+data VkSwapchainKHR_T
+-- | 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
+-- @VkImage@ objects created by the platform. One image (which /can/ be an
+-- array image for multiview\/stereoscopic-3D surfaces) is displayed at a
+-- time, but multiple images /can/ be queued for presentation. An
+-- application renders to the image, and then queues the image for
+-- presentation to the surface.
+--
+-- A native window /cannot/ be associated with more than one swapchain at a
+-- time. Further, swapchains /cannot/ be created for native windows that
+-- have a non-Vulkan graphics API surface associated with them.
+--
+-- __Note__
+--
+-- The presentation engine is an abstraction for the platform’s compositor
+-- or display engine.
+--
+-- The presentation engine /may/ be synchronous or asynchronous with
+-- respect to the application and\/or logical device.
+--
+-- Some implementations /may/ use the device’s graphics queue or dedicated
+-- presentation hardware to perform presentation.
+--
+-- The presentable images of a swapchain are owned by the presentation
+-- engine. An application /can/ acquire use of a presentable image from the
+-- presentation engine. Use of a presentable image /must/ occur only after
+-- the image is returned by @vkAcquireNextImageKHR@, and before it is
+-- presented by @vkQueuePresentKHR@. This includes transitioning the image
+-- layout and rendering commands.
+--
+-- An application /can/ acquire use of a presentable image with
+-- @vkAcquireNextImageKHR@. After acquiring a presentable image and before
+-- modifying it, the application /must/ use a synchronization primitive to
+-- ensure that the presentation engine has finished reading from the image.
+-- The application /can/ then transition the image’s layout, queue
+-- rendering commands to it, etc. Finally, the application presents the
+-- image with @vkQueuePresentKHR@, which releases the acquisition of the
+-- image.
+--
+-- The presentation engine controls the order in which presentable images
+-- are acquired for use by the application.
+--
+-- __Note__
+--
+-- This allows the platform to handle situations which require out-of-order
+-- return of images after presentation. At the same time, it allows the
+-- application to generate command buffers referencing all of the images in
+-- the swapchain at initialization time, rather than in its main loop.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAcquireNextImageInfoKHR', 'VkBindImageMemorySwapchainInfoKHR',
+-- 'VkImageSwapchainCreateInfoKHR', 'VkPresentInfoKHR',
+-- 'VkSwapchainCreateInfoKHR', 'vkAcquireNextImageKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR',
+-- 'vkCreateSwapchainKHR', 'vkDestroySwapchainKHR',
+-- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetPastPresentationTimingGOOGLE',
+-- 'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.vkGetRefreshCycleDurationGOOGLE',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_display_control.vkGetSwapchainCounterEXT',
+-- 'vkGetSwapchainImagesKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image.vkGetSwapchainStatusKHR',
+-- 'Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata.vkSetHdrMetadataEXT'
+type VkSwapchainKHR = Ptr VkSwapchainKHR_T
+-- | vkCreateSwapchainKHR - Create a swapchain
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device to create the swapchain for.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkSwapchainCreateInfoKHR' structure specifying the parameters of
+--     the created swapchain.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkSwapchainCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSwapchain@ /must/ be a valid pointer to a @VkSwapchainKHR@ handle
+--
+-- == Host Synchronization
+--
+-- -   Host access to @pCreateInfo.surface@ /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pCreateInfo.oldSwapchain@ /must/ be externally
+--     synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+--     -   @VK_ERROR_NATIVE_WINDOW_IN_USE_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkSwapchainCreateInfoKHR', 'VkSwapchainKHR'
+foreign import ccall "vkCreateSwapchainKHR" vkCreateSwapchainKHR :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkSwapchainCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSwapchain" ::: Ptr VkSwapchainKHR) -> IO VkResult
+-- | vkDestroySwapchainKHR - Destroy a swapchain object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the @VkDevice@ associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to destroy.
+--
+-- -   @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>).
+--
+-- = Description
+-- #_description#
+--
+-- The application /must/ not destroy a swapchain until after completion of
+-- all outstanding operations on images that were acquired from the
+-- swapchain. @swapchain@ and all associated @VkImage@ handles are
+-- destroyed, and /must/ not be acquired or used any more by the
+-- application. The memory of each @VkImage@ will only be freed after that
+-- image is no longer used by the presentation engine. For example, if one
+-- image of the swapchain is being displayed in a window, the memory for
+-- that image /may/ not be freed until the window is destroyed, or another
+-- swapchain is created for the window. Destroying the swapchain does not
+-- invalidate the parent @VkSurfaceKHR@, and a new swapchain /can/ be
+-- created with it.
+--
+-- == Valid Usage
+--
+-- -   All uses of presentable images acquired from @swapchain@ /must/ have
+--     completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @swapchain@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @swapchain@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   If @swapchain@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @swapchain@
+--     /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   Both of @device@, and @swapchain@ that are valid handles /must/ have
+--     been created, allocated, or retrieved from the same @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice', 'VkSwapchainKHR'
+foreign import ccall "vkDestroySwapchainKHR" vkDestroySwapchainKHR :: ("device" ::: VkDevice) -> ("swapchain" ::: VkSwapchainKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkGetSwapchainImagesKHR - Obtain the array of presentable images
+-- associated with a swapchain
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the swapchain to query.
+--
+-- -   @pSwapchainImageCount@ is a pointer to an integer related to the
+--     number of presentable images available or queried, as described
+--     below.
+--
+-- -   @pSwapchainImages@ is either @NULL@ or a pointer to an array of
+--     @VkImage@ handles.
+--
+-- = Description
+-- #_description#
+--
+-- If @pSwapchainImages@ is @NULL@, then the number of presentable images
+-- for @swapchain@ is returned in @pSwapchainImageCount@. Otherwise,
+-- @pSwapchainImageCount@ /must/ point to a variable set by the user to the
+-- number of elements in the @pSwapchainImages@ array, and on return the
+-- variable is overwritten with the number of structures actually written
+-- to @pSwapchainImages@. If the value of @pSwapchainImageCount@ is less
+-- than the number of presentable images for @swapchain@, at most
+-- @pSwapchainImageCount@ structures will be written. If
+-- @pSwapchainImageCount@ is smaller than the number of presentable images
+-- for @swapchain@, @VK_INCOMPLETE@ will be returned instead of
+-- @VK_SUCCESS@ to indicate that not all the available values were
+-- returned.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   @pSwapchainImageCount@ /must/ be a valid pointer to a @uint32_t@
+--     value
+--
+-- -   If the value referenced by @pSwapchainImageCount@ is not @0@, and
+--     @pSwapchainImages@ is not @NULL@, @pSwapchainImages@ /must/ be a
+--     valid pointer to an array of @pSwapchainImageCount@ @VkImage@
+--     handles
+--
+-- -   Both of @device@, and @swapchain@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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'
+foreign import ccall "vkGetSwapchainImagesKHR" vkGetSwapchainImagesKHR :: ("device" ::: VkDevice) -> ("swapchain" ::: VkSwapchainKHR) -> ("pSwapchainImageCount" ::: Ptr Word32) -> ("pSwapchainImages" ::: Ptr VkImage) -> IO VkResult
+-- | vkAcquireNextImageKHR - Retrieve the index of the next available
+-- presentable image
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @swapchain@ is the non-retired swapchain from which an image is
+--     being acquired.
+--
+-- -   @timeout@ specifies how long the function waits, in nanoseconds, if
+--     no image is available.
+--
+-- -   @semaphore@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or
+--     a semaphore to signal.
+--
+-- -   @fence@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' or a
+--     fence to signal.
+--
+-- -   @pImageIndex@ is a pointer to a @uint32_t@ that is set to the index
+--     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
+--
+-- -   If @semaphore@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' it /must/ be
+--     unsignaled
+--
+-- -   If @semaphore@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' it /must/ not have
+--     any uncompleted signal or wait operations pending
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--     it /must/ be unsignaled and /must/ not be associated with any other
+--     queue command that has not yet completed execution on that queue
+--
+-- -   @semaphore@ and @fence@ /must/ not both be equal to
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   If the number of currently acquired images is greater than the
+--     difference between the number of images in @swapchain@ and the value
+--     of
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR'::@minImageCount@
+--     as returned by a call to
+--     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceCapabilities2KHR'
+--     with the @surface@ used to create @swapchain@, @timeout@ /must/ not
+--     be @UINT64_MAX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   If @semaphore@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @semaphore@
+--     /must/ be a valid @VkSemaphore@ handle
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   @pImageIndex@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If @semaphore@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- -   If @fence@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @device@
+--
+-- -   Both of @device@, and @swapchain@ that are valid handles /must/ have
+--     been created, allocated, or retrieved from the same @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- -   Host access to @semaphore@ /must/ be externally synchronized
+--
+-- -   Host access to @fence@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_TIMEOUT@
+--
+--     -   @VK_NOT_READY@
+--
+--     -   @VK_SUBOPTIMAL_KHR@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_OUT_OF_DATE_KHR@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'Graphics.Vulkan.Core10.Queue.VkFence',
+-- 'Graphics.Vulkan.Core10.Queue.VkSemaphore', 'VkSwapchainKHR'
+foreign import ccall "vkAcquireNextImageKHR" vkAcquireNextImageKHR :: ("device" ::: VkDevice) -> ("swapchain" ::: VkSwapchainKHR) -> ("timeout" ::: Word64) -> ("semaphore" ::: VkSemaphore) -> ("fence" ::: VkFence) -> ("pImageIndex" ::: Ptr Word32) -> IO VkResult
+-- | 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.
+--
+-- -   @pPresentInfo@ is a pointer to an instance of the 'VkPresentInfoKHR'
+--     structure specifying the parameters of the presentation.
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- There is no requirement for an application to present images in the same
+-- order that they were acquired - applications can arbitrarily present any
+-- image that is currently acquired.
+--
+-- == Valid Usage
+--
+-- -   Each element of @pSwapchains@ member of @pPresentInfo@ /must/ be a
+--     swapchain that is created for a surface for which presentation is
+--     supported from @queue@ as determined using a call to
+--     @vkGetPhysicalDeviceSurfaceSupportKHR@
+--
+-- -   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>
+--     previously submitted for execution.
+--
+-- Any writes to memory backing the images referenced by the
+-- @pImageIndices@ and @pSwapchains@ members of @pPresentInfo@, that are
+-- available before 'vkQueuePresentKHR' is executed, are automatically made
+-- visible to the read access performed by the presentation engine. This
+-- automatic visibility operation for an image happens-after the semaphore
+-- signal operation, and happens-before the presentation engine accesses
+-- the image.
+--
+-- Queueing an image for presentation defines a set of /queue operations/,
+-- including waiting on the semaphores and submitting a presentation
+-- request to the presentation engine. However, the scope of this set of
+-- queue operations does not include the actual processing of the image by
+-- the presentation engine.
+--
+-- If @vkQueuePresentKHR@ fails to enqueue the corresponding set of queue
+-- operations, it /may/ return @VK_ERROR_OUT_OF_HOST_MEMORY@ or
+-- @VK_ERROR_OUT_OF_DEVICE_MEMORY@. If it does, the implementation /must/
+-- ensure that the state and contents of any resources or synchronization
+-- primitives referenced is unaffected by the call or its failure.
+--
+-- If @vkQueuePresentKHR@ fails in such a way that the implementation is
+-- unable to make that guarantee, the implementation /must/ return
+-- @VK_ERROR_DEVICE_LOST@.
+--
+-- However, if the presentation request is rejected by the presentation
+-- engine with an error @VK_ERROR_OUT_OF_DATE_KHR@ or
+-- @VK_ERROR_SURFACE_LOST_KHR@, the set of queue operations are still
+-- considered to be enqueued and thus any semaphore to be waited on gets
+-- unsignaled when the corresponding queue operation is complete.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @queue@ /must/ be a valid @VkQueue@ handle
+--
+-- -   @pPresentInfo@ /must/ be a valid pointer to a valid
+--     @VkPresentInfoKHR@ structure
+--
+-- == Host Synchronization
+--
+-- -   Host access to @queue@ /must/ be externally synchronized
+--
+-- -   Host access to @pPresentInfo.pWaitSemaphores@[] /must/ be externally
+--     synchronized
+--
+-- -   Host access to @pPresentInfo.pSwapchains@[] /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>       |
+-- > +=================+=================+=================+=================+
+-- > | -               | -               | Any             | -               |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_SUBOPTIMAL_KHR@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_OUT_OF_DATE_KHR@
+--
+--     -   @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
+-- | vkGetDeviceGroupPresentCapabilitiesKHR - Query present capabilities from
+-- other physical devices
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device.
+--
+-- -   @pDeviceGroupPresentCapabilities@ is a pointer to a structure of
+--     type 'VkDeviceGroupPresentCapabilitiesKHR' that is filled with the
+--     logical device’s capabilities.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pDeviceGroupPresentCapabilities@ /must/ be a valid pointer to a
+--     @VkDeviceGroupPresentCapabilitiesKHR@ structure
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDeviceGroupPresentCapabilitiesKHR'
+foreign import ccall "vkGetDeviceGroupPresentCapabilitiesKHR" vkGetDeviceGroupPresentCapabilitiesKHR :: ("device" ::: VkDevice) -> ("pDeviceGroupPresentCapabilities" ::: Ptr VkDeviceGroupPresentCapabilitiesKHR) -> IO VkResult
+-- | vkGetDeviceGroupSurfacePresentModesKHR - Query present capabilities for
+-- a surface
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device.
+--
+-- -   @surface@ is the surface.
+--
+-- -   @pModes@ is a pointer to a value of type
+--     @VkDeviceGroupPresentModeFlagsKHR@ that is filled with the supported
+--     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
+-- modes /must/ be a subset of the modes returned by
+-- 'vkGetDeviceGroupPresentCapabilitiesKHR'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @pModes@ /must/ be a valid pointer to a
+--     'VkDeviceGroupPresentModeFlagsKHR' value
+--
+-- -   Both of @device@, and @surface@ /must/ have been created, allocated,
+--     or retrieved from the same @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @surface@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkDeviceGroupPresentModeFlagsKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkGetDeviceGroupSurfacePresentModesKHR" vkGetDeviceGroupSurfacePresentModesKHR :: ("device" ::: VkDevice) -> ("surface" ::: VkSurfaceKHR) -> ("pModes" ::: Ptr VkDeviceGroupPresentModeFlagsKHR) -> IO VkResult
+-- | vkAcquireNextImage2KHR - Retrieve the index of the next available
+-- presentable image
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the device associated with @swapchain@.
+--
+-- -   @pAcquireInfo@ is a pointer to a structure of type
+--     'VkAcquireNextImageInfoKHR' containing parameters of the acquire.
+--
+-- -   @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
+--     difference between the number of images in the @swapchain@ member of
+--     @pAcquireInfo@ and the value of
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceCapabilitiesKHR'::@minImageCount@
+--     as returned by a call to
+--     'Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2.vkGetPhysicalDeviceSurfaceCapabilities2KHR'
+--     with the @surface@ used to create @swapchain@, the @timeout@ member
+--     of @pAcquireInfo@ /must/ not be @UINT64_MAX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @pAcquireInfo@ /must/ be a valid pointer to a valid
+--     @VkAcquireNextImageInfoKHR@ structure
+--
+-- -   @pImageIndex@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_TIMEOUT@
+--
+--     -   @VK_NOT_READY@
+--
+--     -   @VK_SUBOPTIMAL_KHR@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+--     -   @VK_ERROR_DEVICE_LOST@
+--
+--     -   @VK_ERROR_OUT_OF_DATE_KHR@
+--
+--     -   @VK_ERROR_SURFACE_LOST_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkAcquireNextImageInfoKHR',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice'
+foreign import ccall "vkAcquireNextImage2KHR" vkAcquireNextImage2KHR :: ("device" ::: VkDevice) -> ("pAcquireInfo" ::: Ptr VkAcquireNextImageInfoKHR) -> ("pImageIndex" ::: Ptr Word32) -> IO VkResult
+-- | vkGetPhysicalDevicePresentRectanglesKHR - Query present rectangles for a
+-- surface on a physical device
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @surface@ is the surface.
+--
+-- -   @pRectCount@ is a pointer to an integer related to the number of
+--     rectangles available or queried, as described below.
+--
+-- -   @pRects@ is either @NULL@ or a pointer to an array of @VkRect2D@
+--     structures.
+--
+-- = Description
+-- #_description#
+--
+-- If @pRects@ is @NULL@, then the number of rectangles used when
+-- presenting the given @surface@ is returned in @pRectCount@. Otherwise,
+-- @pRectCount@ /must/ point to a variable set by the user to the number of
+-- elements in the @pRects@ array, and on return the variable is
+-- overwritten with the number of structures actually written to @pRects@.
+-- If the value of @pRectCount@ is less than the number of rectangles, at
+-- most @pRectCount@ structures will be written. If @pRectCount@ is smaller
+-- than the number of rectangles used for the given @surface@,
+-- @VK_INCOMPLETE@ will be returned instead of @VK_SUCCESS@ to indicate
+-- that not all the available values were returned.
+--
+-- The values returned by this command are not invariant, and /may/ change
+-- in response to the surface being moved, resized, or occluded.
+--
+-- The rectangles returned by this command /must/ not overlap.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @pRectCount@ /must/ be a valid pointer to a @uint32_t@ value
+--
+-- -   If the value referenced by @pRectCount@ is not @0@, and @pRects@ is
+--     not @NULL@, @pRects@ /must/ be a valid pointer to an array of
+--     @pRectCount@ @VkRect2D@ structures
+--
+-- -   Both of @physicalDevice@, and @surface@ /must/ have been created,
+--     allocated, or retrieved from the same @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @surface@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+--     -   @VK_INCOMPLETE@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkGetPhysicalDevicePresentRectanglesKHR" vkGetPhysicalDevicePresentRectanglesKHR :: ("physicalDevice" ::: VkPhysicalDevice) -> ("surface" ::: VkSurfaceKHR) -> ("pRectCount" ::: Ptr Word32) -> ("pRects" ::: Ptr VkRect2D) -> IO VkResult
+-- | VkSwapchainCreateInfoKHR - Structure specifying parameters of a newly
+-- created swapchain object
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- On some platforms, it is normal that @maxImageExtent@ /may/ become @(0,
+-- 0)@, for example when the window is minimized. In such a case, it is not
+-- possible to create a swapchain due to the Valid Usage requirements.
+--
+-- -   @imageArrayLayers@ is the number of views in a multiview\/stereo
+--     surface. For non-stereoscopic-3D applications, this value is 1.
+--
+-- -   @imageUsage@ is a bitmask of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+--     describing the intended usage of the (acquired) swapchain images.
+--
+-- -   @imageSharingMode@ is the sharing mode used for the image(s) of the
+--     swapchain.
+--
+-- -   @queueFamilyIndexCount@ is the number of queue families having
+--     access to the image(s) of the swapchain when @imageSharingMode@ is
+--     @VK_SHARING_MODE_CONCURRENT@.
+--
+-- -   @pQueueFamilyIndices@ is an array of queue family indices having
+--     access to the images(s) of the swapchain when @imageSharingMode@ is
+--     @VK_SHARING_MODE_CONCURRENT@.
+--
+-- -   @preTransform@ is a
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR'
+--     value describing the transform, relative to the presentation
+--     engine’s natural orientation, applied to the image content prior to
+--     presentation. If it does not match the @currentTransform@ value
+--     returned by @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@, the
+--     presentation engine will transform the image content as part of the
+--     presentation operation.
+--
+-- -   @compositeAlpha@ is a
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkCompositeAlphaFlagBitsKHR'
+--     value indicating the alpha compositing mode to use when this surface
+--     is composited together with other surfaces on certain window
+--     systems.
+--
+-- -   @presentMode@ is the presentation mode the swapchain will use. A
+--     swapchain’s present mode determines how incoming present requests
+--     will be processed and queued internally.
+--
+-- -   @clipped@ specifies whether the Vulkan implementation is allowed to
+--     discard rendering operations that affect regions of the surface that
+--     are not visible.
+--
+--     -   If set to @VK_TRUE@, the presentable images associated with the
+--         swapchain /may/ not own all of their pixels. Pixels in the
+--         presentable images that correspond to regions of the target
+--         surface obscured by another window on the desktop, or subject to
+--         some other clipping mechanism will have undefined content when
+--         read back. Pixel shaders /may/ not execute for these pixels, and
+--         thus any side effects they would have had will not occur.
+--         @VK_TRUE@ value does not guarantee any clipping will occur, but
+--         allows more optimal presentation methods to be used on some
+--         platforms.
+--
+--     -   If set to @VK_FALSE@, presentable images associated with the
+--         swapchain will own all of the pixels they contain.
+--
+-- __Note__
+--
+-- Applications /should/ set this value to @VK_TRUE@ if they do not expect
+-- to read back the content of presentable images before presenting them or
+-- after reacquiring them, and if their pixel shaders do not have any side
+-- effects that require them to run for all pixels in the presentable
+-- image.
+--
+-- -   @oldSwapchain@ is 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     or the existing non-retired swapchain currently associated with
+--     @surface@. Providing a valid @oldSwapchain@ /may/ aid in the
+--     resource reuse, and also allows the application to still present any
+--     images that are already acquired from it.
+--
+-- Upon calling @vkCreateSwapchainKHR@ with an @oldSwapchain@ that is not
+-- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @oldSwapchain@ is
+-- retired — even if creation of the new swapchain fails. The new swapchain
+-- is created in the non-retired state whether or not @oldSwapchain@ is
+-- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'.
+--
+-- Upon calling @vkCreateSwapchainKHR@ with an @oldSwapchain@ that is not
+-- 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', any images from
+-- @oldSwapchain@ that are not acquired by the application /may/ be freed
+-- by the implementation, which /may/ occur even if creation of the new
+-- swapchain fails. The application /can/ destroy @oldSwapchain@ to free
+-- all memory associated with @oldSwapchain@.
+--
+-- __Note__
+--
+-- Multiple retired swapchains /can/ be associated with the same
+-- @VkSurfaceKHR@ through multiple uses of @oldSwapchain@ that outnumber
+-- calls to 'vkDestroySwapchainKHR'.
+--
+-- After @oldSwapchain@ is retired, the application /can/ pass to
+-- 'vkQueuePresentKHR' any images it had already acquired from
+-- @oldSwapchain@. E.g., an application may present an image from the old
+-- swapchain before an image from the new swapchain is ready to be
+-- presented. As usual, 'vkQueuePresentKHR' /may/ fail if @oldSwapchain@
+-- has entered a state that causes @VK_ERROR_OUT_OF_DATE_KHR@ to be
+-- returned.
+--
+-- == Valid Usage
+--
+-- -   @surface@ /must/ be a surface that is supported by the device as
+--     determined using @vkGetPhysicalDeviceSurfaceSupportKHR@
+--
+-- -   @minImageCount@ /must/ be greater than or equal to the value
+--     returned in the @minImageCount@ member of the
+--     @VkSurfaceCapabilitiesKHR@ structure returned by
+--     @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@ for the surface
+--
+-- -   @minImageCount@ /must/ be less than or equal to the value returned
+--     in the @maxImageCount@ member of the @VkSurfaceCapabilitiesKHR@
+--     structure returned by @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@
+--     for the surface if the returned @maxImageCount@ is not zero
+--
+-- -   @imageFormat@ and @imageColorSpace@ /must/ match the @format@ and
+--     @colorSpace@ members, respectively, of one of the
+--     @VkSurfaceFormatKHR@ structures returned by
+--     @vkGetPhysicalDeviceSurfaceFormatsKHR@ for the surface
+--
+-- -   @imageExtent@ /must/ be between @minImageExtent@ and
+--     @maxImageExtent@, inclusive, where @minImageExtent@ and
+--     @maxImageExtent@ are members of the @VkSurfaceCapabilitiesKHR@
+--     structure returned by @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@
+--     for the surface
+--
+-- -   @imageExtent@ members @width@ and @height@ /must/ both be non-zero
+--
+-- -   @imageArrayLayers@ /must/ be greater than @0@ and less than or equal
+--     to the @maxImageArrayLayers@ member of the
+--     @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 @imageSharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
+--     @pQueueFamilyIndices@ /must/ be a valid pointer to an array of
+--     @queueFamilyIndexCount@ @uint32_t@ values
+--
+-- -   If @imageSharingMode@ is @VK_SHARING_MODE_CONCURRENT@,
+--     @queueFamilyIndexCount@ /must/ be greater than @1@
+--
+-- -   If @imageSharingMode@ is @VK_SHARING_MODE_CONCURRENT@, each element
+--     of @pQueueFamilyIndices@ /must/ be unique and /must/ be less than
+--     @pQueueFamilyPropertyCount@ returned by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceQueueFamilyProperties'
+--     for the @physicalDevice@ that was used to create @device@
+--
+-- -   @preTransform@ /must/ be one of the bits present in the
+--     @supportedTransforms@ member of the @VkSurfaceCapabilitiesKHR@
+--     structure returned by @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@
+--     for the surface
+--
+-- -   @compositeAlpha@ /must/ be one of the bits present in the
+--     @supportedCompositeAlpha@ member of the @VkSurfaceCapabilitiesKHR@
+--     structure returned by @vkGetPhysicalDeviceSurfaceCapabilitiesKHR@
+--     for the surface
+--
+-- -   @presentMode@ /must/ be one of the
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkPresentModeKHR' values
+--     returned by @vkGetPhysicalDeviceSurfacePresentModesKHR@ for the
+--     surface
+--
+-- -   @oldSwapchain@ /must/ not be in the retired state
+--
+-- -   @imageFormat@, @imageUsage@, @imageExtent@, and @imageArrayLayers@
+--     /must/ be supported for @VK_IMAGE_TYPE_2D@ @VK_IMAGE_TILING_OPTIMAL@
+--     images as reported by
+--     'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of 'VkDeviceGroupSwapchainCreateInfoKHR' or
+--     'Graphics.Vulkan.Extensions.VK_EXT_display_control.VkSwapchainCounterCreateInfoEXT'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkSwapchainCreateFlagBitsKHR' values
+--
+-- -   @surface@ /must/ be a valid @VkSurfaceKHR@ handle
+--
+-- -   @imageFormat@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Core.VkFormat' value
+--
+-- -   @imageColorSpace@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkColorSpaceKHR' value
+--
+-- -   @imageUsage@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlagBits'
+--     values
+--
+-- -   @imageUsage@ /must/ not be @0@
+--
+-- -   @imageSharingMode@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Buffer.VkSharingMode' value
+--
+-- -   @preTransform@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR'
+--     value
+--
+-- -   @compositeAlpha@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkCompositeAlphaFlagBitsKHR'
+--     value
+--
+-- -   @presentMode@ /must/ be a valid
+--     'Graphics.Vulkan.Extensions.VK_KHR_surface.VkPresentModeKHR' value
+--
+-- -   If @oldSwapchain@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @oldSwapchain@
+--     /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   If @oldSwapchain@ is a valid handle, it /must/ have been created,
+--     allocated, or retrieved from @surface@
+--
+-- -   Both of @oldSwapchain@, and @surface@ that are valid handles /must/
+--     have been created, allocated, or retrieved from the same
+--     @VkInstance@
+--
+-- = See Also
+-- #_see_also#
+--
+-- @VkBool32@, 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkColorSpaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkCompositeAlphaFlagBitsKHR',
+-- 'Graphics.Vulkan.Core10.Pipeline.VkExtent2D',
+-- 'Graphics.Vulkan.Core10.Core.VkFormat',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkImageUsageFlags',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkPresentModeKHR',
+-- 'Graphics.Vulkan.Core10.Buffer.VkSharingMode',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceTransformFlagBitsKHR',
+-- 'VkSwapchainCreateFlagsKHR', 'VkSwapchainKHR',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.vkCreateSharedSwapchainsKHR',
+-- 'vkCreateSwapchainKHR'
+data VkSwapchainCreateInfoKHR = VkSwapchainCreateInfoKHR
+  { -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkFlags"
+  vkFlags :: VkSwapchainCreateFlagsKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkSurface"
+  vkSurface :: VkSurfaceKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkMinImageCount"
+  vkMinImageCount :: Word32
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageFormat"
+  vkImageFormat :: VkFormat
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageColorSpace"
+  vkImageColorSpace :: VkColorSpaceKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageExtent"
+  vkImageExtent :: VkExtent2D
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageArrayLayers"
+  vkImageArrayLayers :: Word32
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageUsage"
+  vkImageUsage :: VkImageUsageFlags
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkImageSharingMode"
+  vkImageSharingMode :: VkSharingMode
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkQueueFamilyIndexCount"
+  vkQueueFamilyIndexCount :: Word32
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPQueueFamilyIndices"
+  vkPQueueFamilyIndices :: Ptr Word32
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPreTransform"
+  vkPreTransform :: VkSurfaceTransformFlagBitsKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkCompositeAlpha"
+  vkCompositeAlpha :: VkCompositeAlphaFlagBitsKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkPresentMode"
+  vkPresentMode :: VkPresentModeKHR
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkClipped"
+  vkClipped :: VkBool32
+  , -- No documentation found for Nested "VkSwapchainCreateInfoKHR" "vkOldSwapchain"
+  vkOldSwapchain :: VkSwapchainKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkSwapchainCreateInfoKHR where
+  sizeOf ~_ = 104
+  alignment ~_ = 8
+  peek ptr = VkSwapchainCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                      <*> peek (ptr `plusPtr` 8)
+                                      <*> peek (ptr `plusPtr` 16)
+                                      <*> peek (ptr `plusPtr` 24)
+                                      <*> peek (ptr `plusPtr` 32)
+                                      <*> peek (ptr `plusPtr` 36)
+                                      <*> peek (ptr `plusPtr` 40)
+                                      <*> peek (ptr `plusPtr` 44)
+                                      <*> peek (ptr `plusPtr` 52)
+                                      <*> peek (ptr `plusPtr` 56)
+                                      <*> peek (ptr `plusPtr` 60)
+                                      <*> peek (ptr `plusPtr` 64)
+                                      <*> peek (ptr `plusPtr` 72)
+                                      <*> peek (ptr `plusPtr` 80)
+                                      <*> peek (ptr `plusPtr` 84)
+                                      <*> peek (ptr `plusPtr` 88)
+                                      <*> peek (ptr `plusPtr` 92)
+                                      <*> peek (ptr `plusPtr` 96)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkSurface (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkMinImageCount (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 36) (vkImageFormat (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkImageColorSpace (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 52) (vkImageArrayLayers (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 56) (vkImageUsage (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 60) (vkImageSharingMode (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 80) (vkPreTransform (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 84) (vkCompositeAlpha (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 88) (vkPresentMode (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 92) (vkClipped (poked :: VkSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 96) (vkOldSwapchain (poked :: VkSwapchainCreateInfoKHR))
+-- | VkPresentInfoKHR - Structure describing parameters of a queue
+-- 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.
+--
+-- __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
+-- '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@.
+--
+-- == Valid Usage
+--
+-- -   Each element of @pImageIndices@ /must/ be the index of a presentable
+--     image acquired from the swapchain specified by the corresponding
+--     element of the @pSwapchains@ array, and the presented image
+--     subresource /must/ be in the @VK_IMAGE_LAYOUT_PRESENT_SRC_KHR@
+--     layout at the time the operation is executed on a @VkDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_PRESENT_INFO_KHR@
+--
+-- -   Each @pNext@ member of any structure (including this one) in the
+--     @pNext@ chain /must/ be either @NULL@ or a pointer to a valid
+--     instance of 'VkDeviceGroupPresentInfoKHR',
+--     'Graphics.Vulkan.Extensions.VK_KHR_display_swapchain.VkDisplayPresentInfoKHR',
+--     'Graphics.Vulkan.Extensions.VK_KHR_incremental_present.VkPresentRegionsKHR',
+--     or
+--     'Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing.VkPresentTimesInfoGOOGLE'
+--
+-- -   Each @sType@ member in the @pNext@ chain /must/ be unique
+--
+-- -   If @waitSemaphoreCount@ is not @0@, @pWaitSemaphores@ /must/ be a
+--     valid pointer to an array of @waitSemaphoreCount@ valid
+--     @VkSemaphore@ handles
+--
+-- -   @pSwapchains@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ valid @VkSwapchainKHR@ handles
+--
+-- -   @pImageIndices@ /must/ be a valid pointer to an array of
+--     @swapchainCount@ @uint32_t@ values
+--
+-- -   If @pResults@ is not @NULL@, @pResults@ /must/ be a valid pointer to
+--     an array of @swapchainCount@ 'Graphics.Vulkan.Core10.Core.VkResult'
+--     values
+--
+-- -   @swapchainCount@ /must/ be greater than @0@
+--
+-- -   Both of the elements of @pSwapchains@, and the elements of
+--     @pWaitSemaphores@ that are valid handles /must/ have been created,
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPresentInfoKHR" "vkWaitSemaphoreCount"
+  vkWaitSemaphoreCount :: Word32
+  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPWaitSemaphores"
+  vkPWaitSemaphores :: Ptr VkSemaphore
+  , -- No documentation found for Nested "VkPresentInfoKHR" "vkSwapchainCount"
+  vkSwapchainCount :: Word32
+  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPSwapchains"
+  vkPSwapchains :: Ptr VkSwapchainKHR
+  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPImageIndices"
+  vkPImageIndices :: Ptr Word32
+  , -- No documentation found for Nested "VkPresentInfoKHR" "vkPResults"
+  vkPResults :: Ptr VkResult
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPresentInfoKHR where
+  sizeOf ~_ = 64
+  alignment ~_ = 8
+  peek ptr = VkPresentInfoKHR <$> 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 :: VkPresentInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPresentInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkPresentInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkPresentInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkSwapchainCount (poked :: VkPresentInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkPSwapchains (poked :: VkPresentInfoKHR))
+                *> poke (ptr `plusPtr` 48) (vkPImageIndices (poked :: VkPresentInfoKHR))
+                *> poke (ptr `plusPtr` 56) (vkPResults (poked :: VkPresentInfoKHR))
+-- | VkDeviceGroupPresentCapabilitiesKHR - Present capabilities from other
+-- physical devices
+--
+-- = Description
+-- #_description#
+--
+-- @modes@ always has @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@ set.
+--
+-- The present mode flags are also used when presenting an image, in
+-- 'VkDeviceGroupPresentInfoKHR'::@mode@.
+--
+-- If a device group only includes a single physical device, then @modes@
+-- /must/ equal @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupPresentCapabilitiesKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupPresentCapabilitiesKHR" "vkPresentMask"
+  vkPresentMask :: Vector VK_MAX_DEVICE_GROUP_SIZE Word32
+  , -- No documentation found for Nested "VkDeviceGroupPresentCapabilitiesKHR" "vkModes"
+  vkModes :: VkDeviceGroupPresentModeFlagsKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupPresentCapabilitiesKHR where
+  sizeOf ~_ = 152
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupPresentCapabilitiesKHR <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+                                                 <*> peek (ptr `plusPtr` 144)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceGroupPresentCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupPresentCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 16) (vkPresentMask (poked :: VkDeviceGroupPresentCapabilitiesKHR))
+                *> poke (ptr `plusPtr` 144) (vkModes (poked :: VkDeviceGroupPresentCapabilitiesKHR))
+-- | 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>
+--     of the swapchain
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR@
+--
+-- -   If @swapchain@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @swapchain@
+--     /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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImageSwapchainCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImageSwapchainCreateInfoKHR" "vkSwapchain"
+  vkSwapchain :: VkSwapchainKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImageSwapchainCreateInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkImageSwapchainCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSwapchain (poked :: VkImageSwapchainCreateInfoKHR))
+-- | VkBindImageMemorySwapchainInfoKHR - Structure specifying swapchain image
+-- 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@
+-- and @memoryOffset@.
+--
+-- Memory /can/ be bound to a swapchain and use the @pDeviceIndices@ or
+-- @pSplitInstanceBindRegions@ members of
+-- 'Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2.VkBindImageMemoryDeviceGroupInfo'.
+--
+-- == Valid Usage
+--
+-- -   @imageIndex@ /must/ be less than the number of images in @swapchain@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR@
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- == Host Synchronization
+--
+-- -   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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkBindImageMemorySwapchainInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkBindImageMemorySwapchainInfoKHR" "vkSwapchain"
+  vkSwapchain :: VkSwapchainKHR
+  , -- No documentation found for Nested "VkBindImageMemorySwapchainInfoKHR" "vkImageIndex"
+  vkImageIndex :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkBindImageMemorySwapchainInfoKHR where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkBindImageMemorySwapchainInfoKHR <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+                                               <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindImageMemorySwapchainInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindImageMemorySwapchainInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSwapchain (poked :: VkBindImageMemorySwapchainInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkImageIndex (poked :: VkBindImageMemorySwapchainInfoKHR))
+-- | VkAcquireNextImageInfoKHR - Structure specifying parameters of the
+-- acquire
+--
+-- = Description
+-- #_description#
+--
+-- If 'vkAcquireNextImageKHR' is used, the device mask is considered to
+-- include all physical devices in the logical device.
+--
+-- __Note__
+--
+-- 'vkAcquireNextImage2KHR' signals at most one semaphore, even if the
+-- application requests waiting for multiple physical devices to be ready
+-- via the @deviceMask@. However, only a single physical device /can/ wait
+-- on that semaphore, since the semaphore becomes unsignaled when the wait
+-- succeeds. For other physical devices to wait for the image to be ready,
+-- it is necessary for the application to submit semaphore signal
+-- operation(s) to that first physical device to signal additional
+-- semaphore(s) after the wait succeeds, which the other physical device(s)
+-- /can/ wait upon.
+--
+-- == Valid Usage
+--
+-- -   @swapchain@ /must/ not be in the retired state
+--
+-- -   If @semaphore@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' it /must/ be
+--     unsignaled
+--
+-- -   If @semaphore@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE' it /must/ not have
+--     any uncompleted signal or wait operations pending
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--     it /must/ be unsignaled and /must/ not be associated with any other
+--     queue command that has not yet completed execution on that queue
+--
+-- -   @semaphore@ and @fence@ /must/ not both be equal to
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'
+--
+-- -   @deviceMask@ /must/ be a valid device mask
+--
+-- -   @deviceMask@ /must/ not be zero
+--
+-- -   @semaphore@ and @fence@ /must/ not both be equal to
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE'.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @swapchain@ /must/ be a valid @VkSwapchainKHR@ handle
+--
+-- -   If @semaphore@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', @semaphore@
+--     /must/ be a valid @VkSemaphore@ handle
+--
+-- -   If @fence@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @fence@ /must/ be a valid @VkFence@ handle
+--
+-- -   Each of @fence@, @semaphore@, and @swapchain@ that are valid handles
+--     /must/ have been created, allocated, or retrieved from the same
+--     @VkInstance@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @swapchain@ /must/ be externally synchronized
+--
+-- -   Host access to @semaphore@ /must/ be externally synchronized
+--
+-- -   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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkSwapchain"
+  vkSwapchain :: VkSwapchainKHR
+  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkTimeout"
+  vkTimeout :: Word64
+  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkSemaphore"
+  vkSemaphore :: VkSemaphore
+  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkFence"
+  vkFence :: VkFence
+  , -- No documentation found for Nested "VkAcquireNextImageInfoKHR" "vkDeviceMask"
+  vkDeviceMask :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkAcquireNextImageInfoKHR where
+  sizeOf ~_ = 56
+  alignment ~_ = 8
+  peek ptr = VkAcquireNextImageInfoKHR <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkAcquireNextImageInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkAcquireNextImageInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSwapchain (poked :: VkAcquireNextImageInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkTimeout (poked :: VkAcquireNextImageInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkSemaphore (poked :: VkAcquireNextImageInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkFence (poked :: VkAcquireNextImageInfoKHR))
+                *> poke (ptr `plusPtr` 48) (vkDeviceMask (poked :: VkAcquireNextImageInfoKHR))
+-- | VkDeviceGroupPresentInfoKHR - Mode and mask controlling which physical
+-- 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
+-- is presented. Each element of @pDeviceMasks@ /must/ have exactly one bit
+-- set, and the corresponding physical device /must/ have a presentation
+-- engine as reported by 'VkDeviceGroupPresentCapabilitiesKHR'.
+--
+-- If @mode@ is @VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR@, then each
+-- element of @pDeviceMasks@ selects which instance of the swapchain image
+-- is presented. Each element of @pDeviceMasks@ /must/ have exactly one bit
+-- set, and some physical device in the logical device /must/ include that
+-- bit in its 'VkDeviceGroupPresentCapabilitiesKHR'::@presentMask@.
+--
+-- If @mode@ is @VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR@, then each
+-- element of @pDeviceMasks@ selects which instances of the swapchain image
+-- are component-wise summed and the sum of those images is presented. If
+-- the sum in any component is outside the representable range, the value
+-- of that component is undefined. Each element of @pDeviceMasks@ /must/
+-- have a value for which all set bits are set in one of the elements of
+-- 'VkDeviceGroupPresentCapabilitiesKHR'::@presentMask@.
+--
+-- If @mode@ is @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR@,
+-- then each element of @pDeviceMasks@ selects which instance(s) of the
+-- swapchain images are presented. For each bit set in each element of
+-- @pDeviceMasks@, the corresponding physical device /must/ have a
+-- presentation engine as reported by
+-- 'VkDeviceGroupPresentCapabilitiesKHR'.
+--
+-- If @VkDeviceGroupPresentInfoKHR@ is not provided or @swapchainCount@ is
+-- zero then the masks are considered to be @1@. If
+-- @VkDeviceGroupPresentInfoKHR@ is not provided, @mode@ is considered to
+-- be @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@.
+--
+-- == Valid Usage
+--
+-- -   @swapchainCount@ /must/ equal @0@ or
+--     'VkPresentInfoKHR'::@swapchainCount@
+--
+-- -   If @mode@ is @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_BIT_KHR@, then each
+--     element of @pDeviceMasks@ /must/ have exactly one bit set, and the
+--     corresponding element of
+--     'VkDeviceGroupPresentCapabilitiesKHR'::@presentMask@ /must/ be
+--     non-zero
+--
+-- -   If @mode@ is @VK_DEVICE_GROUP_PRESENT_MODE_REMOTE_BIT_KHR@, then
+--     each element of @pDeviceMasks@ /must/ have exactly one bit set, and
+--     some physical device in the logical device /must/ include that bit
+--     in its 'VkDeviceGroupPresentCapabilitiesKHR'::@presentMask@.
+--
+-- -   If @mode@ is @VK_DEVICE_GROUP_PRESENT_MODE_SUM_BIT_KHR@, then each
+--     element of @pDeviceMasks@ /must/ have a value for which all set bits
+--     are set in one of the elements of
+--     'VkDeviceGroupPresentCapabilitiesKHR'::@presentMask@
+--
+-- -   If @mode@ is
+--     @VK_DEVICE_GROUP_PRESENT_MODE_LOCAL_MULTI_DEVICE_BIT_KHR@, then for
+--     each bit set in each element of @pDeviceMasks@, the corresponding
+--     element of 'VkDeviceGroupPresentCapabilitiesKHR'::@presentMask@
+--     /must/ be non-zero
+--
+-- -   The value of each element of @pDeviceMasks@ /must/ be equal to the
+--     device mask passed in 'VkAcquireNextImageInfoKHR'::@deviceMask@ when
+--     the image index was last acquired
+--
+-- -   @mode@ /must/ have exactly one bit set, and that bit /must/ have
+--     been included in 'VkDeviceGroupSwapchainCreateInfoKHR'::@modes@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR@
+--
+-- -   If @swapchainCount@ is not @0@, @pDeviceMasks@ /must/ be a valid
+--     pointer to an array of @swapchainCount@ @uint32_t@ values
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkSwapchainCount"
+  vkSwapchainCount :: Word32
+  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkPDeviceMasks"
+  vkPDeviceMasks :: Ptr Word32
+  , -- No documentation found for Nested "VkDeviceGroupPresentInfoKHR" "vkMode"
+  vkMode :: VkDeviceGroupPresentModeFlagBitsKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupPresentInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupPresentInfoKHR <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+                                         <*> peek (ptr `plusPtr` 24)
+                                         <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceGroupPresentInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupPresentInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkSwapchainCount (poked :: VkDeviceGroupPresentInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkPDeviceMasks (poked :: VkDeviceGroupPresentInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkMode (poked :: VkDeviceGroupPresentInfoKHR))
+-- | VkDeviceGroupSwapchainCreateInfoKHR - Structure specifying parameters of
+-- 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@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR@
+--
+-- -   @modes@ /must/ be a valid combination of
+--     'VkDeviceGroupPresentModeFlagBitsKHR' values
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGroupSwapchainCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGroupSwapchainCreateInfoKHR" "vkModes"
+  vkModes :: VkDeviceGroupPresentModeFlagsKHR
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGroupSwapchainCreateInfoKHR where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDeviceGroupSwapchainCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceGroupSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGroupSwapchainCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkModes (poked :: VkDeviceGroupSwapchainCreateInfoKHR))
+-- | 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
+-- | VkDeviceGroupPresentModeFlagsKHR - Bitmask of
+-- VkDeviceGroupPresentModeFlagBitsKHR
+--
+-- = Description
+-- #_description#
+--
+-- @VkDeviceGroupPresentModeFlagsKHR@ is a bitmask type for setting a mask
+-- of zero or more 'VkDeviceGroupPresentModeFlagBitsKHR'.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDeviceGroupPresentCapabilitiesKHR',
+-- 'VkDeviceGroupPresentModeFlagBitsKHR',
+-- 'VkDeviceGroupSwapchainCreateInfoKHR',
+-- 'vkGetDeviceGroupSurfacePresentModesKHR'
+type VkDeviceGroupPresentModeFlagsKHR = VkDeviceGroupPresentModeFlagBitsKHR
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_variable_pointers.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_variable_pointers.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_variable_pointers.hs
@@ -0,0 +1,52 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_variable_pointers
+  ( pattern VK_KHR_VARIABLE_POINTERS_SPEC_VERSION
+  , pattern VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME
+  , VkPhysicalDeviceVariablePointerFeaturesKHR
+  , pattern VkPhysicalDeviceVariablePointerFeaturesKHR
+  , pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( Ptr
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
+  , VkPhysicalDeviceVariablePointerFeatures(..)
+  )
+
+
+-- No documentation found for TopLevel "VK_KHR_VARIABLE_POINTERS_SPEC_VERSION"
+pattern VK_KHR_VARIABLE_POINTERS_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_VARIABLE_POINTERS_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME"
+pattern VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_VARIABLE_POINTERS_EXTENSION_NAME = "VK_KHR_variable_pointers"
+-- No documentation found for TopLevel "VkPhysicalDeviceVariablePointerFeaturesKHR"
+type VkPhysicalDeviceVariablePointerFeaturesKHR = VkPhysicalDeviceVariablePointerFeatures
+
+
+-- No documentation found for TopLevel "VkPhysicalDeviceVariablePointerFeaturesKHR"
+pattern VkPhysicalDeviceVariablePointerFeaturesKHR :: ("sType" ::: VkStructureType) -> ("pNext" ::: Ptr ()) -> ("variablePointersStorageBuffer" ::: VkBool32) -> ("variablePointers" ::: VkBool32) -> VkPhysicalDeviceVariablePointerFeaturesKHR
+pattern VkPhysicalDeviceVariablePointerFeaturesKHR vkSType vkPNext vkVariablePointersStorageBuffer vkVariablePointers = VkPhysicalDeviceVariablePointerFeatures vkSType vkPNext vkVariablePointersStorageBuffer vkVariablePointers
+-- No documentation found for TopLevel "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR"
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_wayland_surface.hs
@@ -0,0 +1,252 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_wayland_surface
+  ( Wl_display
+  , Wl_surface
+  , VkWaylandSurfaceCreateFlagsKHR(..)
+  , pattern VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR
+  , pattern VK_KHR_WAYLAND_SURFACE_SPEC_VERSION
+  , pattern VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME
+  , vkCreateWaylandSurfaceKHR
+  , vkGetPhysicalDeviceWaylandPresentationSupportKHR
+  , VkWaylandSurfaceCreateInfoKHR(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- | Opaque data
+data Wl_display
+-- | Opaque data
+data Wl_surface
+-- ** VkWaylandSurfaceCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkWaylandSurfaceCreateFlagsKHR"
+newtype VkWaylandSurfaceCreateFlagsKHR = VkWaylandSurfaceCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkWaylandSurfaceCreateFlagsKHR where
+  
+  showsPrec p (VkWaylandSurfaceCreateFlagsKHR x) = showParen (p >= 11) (showString "VkWaylandSurfaceCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkWaylandSurfaceCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkWaylandSurfaceCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkWaylandSurfaceCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR = VkStructureType 1000006000
+-- No documentation found for TopLevel "VK_KHR_WAYLAND_SURFACE_SPEC_VERSION"
+pattern VK_KHR_WAYLAND_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_WAYLAND_SURFACE_SPEC_VERSION = 6
+-- No documentation found for TopLevel "VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME"
+pattern VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME = "VK_KHR_wayland_surface"
+-- | vkCreateWaylandSurfaceKHR - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' object for a
+-- Wayland window
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkWaylandSurfaceCreateInfoKHR' structure containing parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkWaylandSurfaceCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR',
+-- 'VkWaylandSurfaceCreateInfoKHR'
+foreign import ccall "vkCreateWaylandSurfaceKHR" vkCreateWaylandSurfaceKHR :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkWaylandSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceWaylandPresentationSupportKHR - Query physical device
+-- for presentation to Wayland
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family index.
+--
+-- -   @display@ is a pointer to the @wl_display@ associated with a Wayland
+--     compositor.
+--
+-- = Description
+-- #_description#
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by @vkGetPhysicalDeviceQueueFamilyProperties@ for the given
+--     @physicalDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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@.
+--
+-- -   @surface@ /must/ point to a valid Wayland @wl_surface@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkFlags"
+  vkFlags :: VkWaylandSurfaceCreateFlagsKHR
+  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkDisplay"
+  vkDisplay :: Ptr Wl_display
+  , -- No documentation found for Nested "VkWaylandSurfaceCreateInfoKHR" "vkSurface"
+  vkSurface :: Ptr Wl_surface
+  }
+  deriving (Eq, Show)
+
+instance Storable VkWaylandSurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkWaylandSurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 8)
+                                           <*> peek (ptr `plusPtr` 16)
+                                           <*> peek (ptr `plusPtr` 24)
+                                           <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWaylandSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWaylandSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkWaylandSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkDisplay (poked :: VkWaylandSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkSurface (poked :: VkWaylandSurfaceCreateInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_keyed_mutex.hs
@@ -0,0 +1,133 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_win32_keyed_mutex
+  ( pattern VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR
+  , pattern VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION
+  , pattern VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME
+  , VkWin32KeyedMutexAcquireReleaseInfoKHR(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  , Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR = VkStructureType 1000075000
+-- No documentation found for TopLevel "VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION"
+pattern VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_WIN32_KEYED_MUTEX_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME"
+pattern VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_KHR_win32_keyed_mutex"
+-- | VkWin32KeyedMutexAcquireReleaseInfoKHR - Use the Windows keyed mutex
+-- mechanism to synchronize work
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   Each member of @pAcquireSyncs@ and @pReleaseSyncs@ /must/ be a
+--     device memory object imported by setting
+--     'Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32.VkImportMemoryWin32HandleInfoKHR'::@handleType@
+--     to @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_BIT@ or
+--     @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_TEXTURE_KMT_BIT@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR@
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid
+--     pointer to an array of @acquireCount@ valid @VkDeviceMemory@ handles
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireKeys@ /must/ be a valid
+--     pointer to an array of @acquireCount@ @uint64_t@ values
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireTimeouts@ /must/ be a valid
+--     pointer to an array of @acquireCount@ @uint32_t@ values
+--
+-- -   If @releaseCount@ is not @0@, @pReleaseSyncs@ /must/ be a valid
+--     pointer to an array of @releaseCount@ valid @VkDeviceMemory@ handles
+--
+-- -   If @releaseCount@ is not @0@, @pReleaseKeys@ /must/ be a valid
+--     pointer to an array of @releaseCount@ @uint64_t@ values
+--
+-- -   Both of the elements of @pAcquireSyncs@, and the elements of
+--     @pReleaseSyncs@ that are valid handles /must/ have been created,
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkAcquireCount"
+  vkAcquireCount :: Word32
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPAcquireSyncs"
+  vkPAcquireSyncs :: Ptr VkDeviceMemory
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPAcquireKeys"
+  vkPAcquireKeys :: Ptr Word64
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPAcquireTimeouts"
+  vkPAcquireTimeouts :: Ptr Word32
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkReleaseCount"
+  vkReleaseCount :: Word32
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPReleaseSyncs"
+  vkPReleaseSyncs :: Ptr VkDeviceMemory
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoKHR" "vkPReleaseKeys"
+  vkPReleaseKeys :: Ptr Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkWin32KeyedMutexAcquireReleaseInfoKHR where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkWin32KeyedMutexAcquireReleaseInfoKHR <$> 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)
+                                                    <*> peek (ptr `plusPtr` 64)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkAcquireCount (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkPAcquireSyncs (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkPAcquireKeys (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 40) (vkPAcquireTimeouts (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 48) (vkReleaseCount (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 56) (vkPReleaseSyncs (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
+                *> poke (ptr `plusPtr` 64) (vkPReleaseKeys (poked :: VkWin32KeyedMutexAcquireReleaseInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_win32_surface.hs
@@ -0,0 +1,246 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_win32_surface
+  ( HINSTANCE
+  , HWND
+  , VkWin32SurfaceCreateFlagsKHR(..)
+  , pattern VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR
+  , pattern VK_KHR_WIN32_SURFACE_SPEC_VERSION
+  , pattern VK_KHR_WIN32_SURFACE_EXTENSION_NAME
+  , vkCreateWin32SurfaceKHR
+  , vkGetPhysicalDeviceWin32PresentationSupportKHR
+  , VkWin32SurfaceCreateInfoKHR(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- No documentation found for TopLevel "HINSTANCE"
+type HINSTANCE = Ptr ()
+-- No documentation found for TopLevel "HWND"
+type HWND = Ptr ()
+-- ** VkWin32SurfaceCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkWin32SurfaceCreateFlagsKHR"
+newtype VkWin32SurfaceCreateFlagsKHR = VkWin32SurfaceCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkWin32SurfaceCreateFlagsKHR where
+  
+  showsPrec p (VkWin32SurfaceCreateFlagsKHR x) = showParen (p >= 11) (showString "VkWin32SurfaceCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkWin32SurfaceCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkWin32SurfaceCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkWin32SurfaceCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR = VkStructureType 1000009000
+-- No documentation found for TopLevel "VK_KHR_WIN32_SURFACE_SPEC_VERSION"
+pattern VK_KHR_WIN32_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_WIN32_SURFACE_SPEC_VERSION = 6
+-- No documentation found for TopLevel "VK_KHR_WIN32_SURFACE_EXTENSION_NAME"
+pattern VK_KHR_WIN32_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_WIN32_SURFACE_EXTENSION_NAME = "VK_KHR_win32_surface"
+-- | vkCreateWin32SurfaceKHR - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' object for an
+-- Win32 native window
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkWin32SurfaceCreateInfoKHR@ structure containing parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkWin32SurfaceCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR',
+-- 'VkWin32SurfaceCreateInfoKHR'
+foreign import ccall "vkCreateWin32SurfaceKHR" vkCreateWin32SurfaceKHR :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkWin32SurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceWin32PresentationSupportKHR - query queue family
+-- 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.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by @vkGetPhysicalDeviceQueueFamilyProperties@ for the given
+--     @physicalDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @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@.
+--
+-- -   @hwnd@ /must/ be a valid Win32 @HWND@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkFlags"
+  vkFlags :: VkWin32SurfaceCreateFlagsKHR
+  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkHinstance"
+  vkHinstance :: HINSTANCE
+  , -- No documentation found for Nested "VkWin32SurfaceCreateInfoKHR" "vkHwnd"
+  vkHwnd :: HWND
+  }
+  deriving (Eq, Show)
+
+instance Storable VkWin32SurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkWin32SurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+                                         <*> peek (ptr `plusPtr` 24)
+                                         <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWin32SurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWin32SurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkWin32SurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkHinstance (poked :: VkWin32SurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkHwnd (poked :: VkWin32SurfaceCreateInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_xcb_surface.hs
@@ -0,0 +1,254 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_xcb_surface
+  ( Xcb_connection_t
+  , Xcb_visualid_t
+  , Xcb_window_t
+  , VkXcbSurfaceCreateFlagsKHR(..)
+  , pattern VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR
+  , pattern VK_KHR_XCB_SURFACE_SPEC_VERSION
+  , pattern VK_KHR_XCB_SURFACE_EXTENSION_NAME
+  , vkCreateXcbSurfaceKHR
+  , vkGetPhysicalDeviceXcbPresentationSupportKHR
+  , VkXcbSurfaceCreateInfoKHR(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- | Opaque data
+data Xcb_connection_t
+-- No documentation found for TopLevel "Xcb_visualid_t"
+type Xcb_visualid_t = Word32
+-- No documentation found for TopLevel "Xcb_window_t"
+type Xcb_window_t = Word32
+-- ** VkXcbSurfaceCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkXcbSurfaceCreateFlagsKHR"
+newtype VkXcbSurfaceCreateFlagsKHR = VkXcbSurfaceCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkXcbSurfaceCreateFlagsKHR where
+  
+  showsPrec p (VkXcbSurfaceCreateFlagsKHR x) = showParen (p >= 11) (showString "VkXcbSurfaceCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkXcbSurfaceCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkXcbSurfaceCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkXcbSurfaceCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR = VkStructureType 1000005000
+-- No documentation found for TopLevel "VK_KHR_XCB_SURFACE_SPEC_VERSION"
+pattern VK_KHR_XCB_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_XCB_SURFACE_SPEC_VERSION = 6
+-- No documentation found for TopLevel "VK_KHR_XCB_SURFACE_EXTENSION_NAME"
+pattern VK_KHR_XCB_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_XCB_SURFACE_EXTENSION_NAME = "VK_KHR_xcb_surface"
+-- | vkCreateXcbSurfaceKHR - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' object for a
+-- X11 window, using the XCB client-side library
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkXcbSurfaceCreateInfoKHR@ structure containing parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkXcbSurfaceCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR',
+-- 'VkXcbSurfaceCreateInfoKHR'
+foreign import ccall "vkCreateXcbSurfaceKHR" vkCreateXcbSurfaceKHR :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkXcbSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceXcbPresentationSupportKHR - Query physical device for
+-- presentation to X11 server using XCB
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family index.
+--
+-- -   @connection@ is a pointer to an @xcb_connection_t@ to the X server.
+--     @visual_id@ is an X11 visual (@xcb_visualid_t@).
+--
+-- = Description
+-- #_description#
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by @vkGetPhysicalDeviceQueueFamilyProperties@ for the given
+--     @physicalDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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@.
+--
+-- -   @window@ /must/ be a valid X11 @xcb_window_t@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkFlags"
+  vkFlags :: VkXcbSurfaceCreateFlagsKHR
+  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkConnection"
+  vkConnection :: Ptr Xcb_connection_t
+  , -- No documentation found for Nested "VkXcbSurfaceCreateInfoKHR" "vkWindow"
+  vkWindow :: Xcb_window_t
+  }
+  deriving (Eq, Show)
+
+instance Storable VkXcbSurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkXcbSurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 8)
+                                       <*> peek (ptr `plusPtr` 16)
+                                       <*> peek (ptr `plusPtr` 24)
+                                       <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkXcbSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkXcbSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkXcbSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkConnection (poked :: VkXcbSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkWindow (poked :: VkXcbSurfaceCreateInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs b/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_KHR_xlib_surface.hs
@@ -0,0 +1,256 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_KHR_xlib_surface
+  ( Display(..)
+  , VisualID
+  , Window
+  , VkXlibSurfaceCreateFlagsKHR(..)
+  , pattern VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR
+  , pattern VK_KHR_XLIB_SURFACE_SPEC_VERSION
+  , pattern VK_KHR_XLIB_SURFACE_EXTENSION_NAME
+  , vkCreateXlibSurfaceKHR
+  , vkGetPhysicalDeviceXlibPresentationSupportKHR
+  , VkXlibSurfaceCreateInfoKHR(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  , Word64
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- No documentation found for TopLevel "Display"
+newtype Display = Display (Ptr Display)
+-- No documentation found for TopLevel "VisualID"
+type VisualID = Word64
+-- No documentation found for TopLevel "Window"
+type Window = Word64
+-- ** VkXlibSurfaceCreateFlagsKHR
+
+-- No documentation found for TopLevel "VkXlibSurfaceCreateFlagsKHR"
+newtype VkXlibSurfaceCreateFlagsKHR = VkXlibSurfaceCreateFlagsKHR VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkXlibSurfaceCreateFlagsKHR where
+  
+  showsPrec p (VkXlibSurfaceCreateFlagsKHR x) = showParen (p >= 11) (showString "VkXlibSurfaceCreateFlagsKHR " . showsPrec 11 x)
+
+instance Read VkXlibSurfaceCreateFlagsKHR where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkXlibSurfaceCreateFlagsKHR")
+                        v <- step readPrec
+                        pure (VkXlibSurfaceCreateFlagsKHR v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"
+pattern VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR :: VkStructureType
+pattern VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR = VkStructureType 1000004000
+-- No documentation found for TopLevel "VK_KHR_XLIB_SURFACE_SPEC_VERSION"
+pattern VK_KHR_XLIB_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_KHR_XLIB_SURFACE_SPEC_VERSION = 6
+-- No documentation found for TopLevel "VK_KHR_XLIB_SURFACE_EXTENSION_NAME"
+pattern VK_KHR_XLIB_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_KHR_XLIB_SURFACE_EXTENSION_NAME = "VK_KHR_xlib_surface"
+-- | vkCreateXlibSurfaceKHR - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' object for an
+-- X11 window, using the Xlib client-side library
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance to associate the surface with.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkXlibSurfaceCreateInfoKHR@ structure containing the parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkXlibSurfaceCreateInfoKHR@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR',
+-- 'VkXlibSurfaceCreateInfoKHR'
+foreign import ccall "vkCreateXlibSurfaceKHR" vkCreateXlibSurfaceKHR :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkXlibSurfaceCreateInfoKHR) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | vkGetPhysicalDeviceXlibPresentationSupportKHR - Query physical device
+-- for presentation to X11 server using Xlib
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device.
+--
+-- -   @queueFamilyIndex@ is the queue family index.
+--
+-- -   @dpy@ is a pointer to an Xlib @Display@ connection to the server.
+--
+-- -   @visualId@ is an X11 visual (@VisualID@).
+--
+-- = Description
+-- #_description#
+--
+-- This platform-specific function /can/ be called prior to creating a
+-- surface.
+--
+-- == Valid Usage
+--
+-- -   @queueFamilyIndex@ /must/ be less than @pQueueFamilyPropertyCount@
+--     returned by @vkGetPhysicalDeviceQueueFamilyProperties@ for the given
+--     @physicalDevice@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @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@.
+--
+-- -   @window@ /must/ be a valid Xlib @Window@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkFlags"
+  vkFlags :: VkXlibSurfaceCreateFlagsKHR
+  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkDpy"
+  vkDpy :: Ptr Display
+  , -- No documentation found for Nested "VkXlibSurfaceCreateInfoKHR" "vkWindow"
+  vkWindow :: Window
+  }
+  deriving (Eq, Show)
+
+instance Storable VkXlibSurfaceCreateInfoKHR where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkXlibSurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+                                        <*> peek (ptr `plusPtr` 24)
+                                        <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkXlibSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkXlibSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkXlibSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 24) (vkDpy (poked :: VkXlibSurfaceCreateInfoKHR))
+                *> poke (ptr `plusPtr` 32) (vkWindow (poked :: VkXlibSurfaceCreateInfoKHR))
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs b/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_MVK_ios_surface.hs
@@ -0,0 +1,198 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_MVK_ios_surface
+  ( VkIOSSurfaceCreateFlagsMVK(..)
+  , pattern VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK
+  , pattern VK_MVK_IOS_SURFACE_SPEC_VERSION
+  , pattern VK_MVK_IOS_SURFACE_EXTENSION_NAME
+  , vkCreateIOSSurfaceMVK
+  , VkIOSSurfaceCreateInfoMVK(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- ** VkIOSSurfaceCreateFlagsMVK
+
+-- No documentation found for TopLevel "VkIOSSurfaceCreateFlagsMVK"
+newtype VkIOSSurfaceCreateFlagsMVK = VkIOSSurfaceCreateFlagsMVK VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkIOSSurfaceCreateFlagsMVK where
+  
+  showsPrec p (VkIOSSurfaceCreateFlagsMVK x) = showParen (p >= 11) (showString "VkIOSSurfaceCreateFlagsMVK " . showsPrec 11 x)
+
+instance Read VkIOSSurfaceCreateFlagsMVK where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkIOSSurfaceCreateFlagsMVK")
+                        v <- step readPrec
+                        pure (VkIOSSurfaceCreateFlagsMVK v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK"
+pattern VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK = VkStructureType 1000122000
+-- No documentation found for TopLevel "VK_MVK_IOS_SURFACE_SPEC_VERSION"
+pattern VK_MVK_IOS_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_MVK_IOS_SURFACE_SPEC_VERSION = 2
+-- No documentation found for TopLevel "VK_MVK_IOS_SURFACE_EXTENSION_NAME"
+pattern VK_MVK_IOS_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_MVK_IOS_SURFACE_EXTENSION_NAME = "VK_MVK_ios_surface"
+-- | vkCreateIOSSurfaceMVK - Create a VkSurfaceKHR object for an iOS UIView
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkIOSSurfaceCreateInfoMVK' structure containing parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkIOSSurfaceCreateInfoMVK@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ 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_NATIVE_WINDOW_IN_USE_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'VkIOSSurfaceCreateInfoMVK',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkCreateIOSSurfaceMVK" vkCreateIOSSurfaceMVK :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkIOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | 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
+--     @CALayer@ instance of type @CAMetalLayer@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_IOS_SURFACE_CREATE_INFO_MVK@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkIOSSurfaceCreateInfoMVK" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkIOSSurfaceCreateInfoMVK" "vkFlags"
+  vkFlags :: VkIOSSurfaceCreateFlagsMVK
+  , -- No documentation found for Nested "VkIOSSurfaceCreateInfoMVK" "vkPView"
+  vkPView :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkIOSSurfaceCreateInfoMVK where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkIOSSurfaceCreateInfoMVK <$> peek (ptr `plusPtr` 0)
+                                       <*> peek (ptr `plusPtr` 8)
+                                       <*> peek (ptr `plusPtr` 16)
+                                       <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkIOSSurfaceCreateInfoMVK))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkIOSSurfaceCreateInfoMVK))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkIOSSurfaceCreateInfoMVK))
+                *> poke (ptr `plusPtr` 24) (vkPView (poked :: VkIOSSurfaceCreateInfoMVK))
diff --git a/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs b/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_MVK_macos_surface.hs
@@ -0,0 +1,199 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_MVK_macos_surface
+  ( VkMacOSSurfaceCreateFlagsMVK(..)
+  , pattern VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK
+  , pattern VK_MVK_MACOS_SURFACE_SPEC_VERSION
+  , pattern VK_MVK_MACOS_SURFACE_EXTENSION_NAME
+  , vkCreateMacOSSurfaceMVK
+  , VkMacOSSurfaceCreateInfoMVK(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- ** VkMacOSSurfaceCreateFlagsMVK
+
+-- No documentation found for TopLevel "VkMacOSSurfaceCreateFlagsMVK"
+newtype VkMacOSSurfaceCreateFlagsMVK = VkMacOSSurfaceCreateFlagsMVK VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkMacOSSurfaceCreateFlagsMVK where
+  
+  showsPrec p (VkMacOSSurfaceCreateFlagsMVK x) = showParen (p >= 11) (showString "VkMacOSSurfaceCreateFlagsMVK " . showsPrec 11 x)
+
+instance Read VkMacOSSurfaceCreateFlagsMVK where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkMacOSSurfaceCreateFlagsMVK")
+                        v <- step readPrec
+                        pure (VkMacOSSurfaceCreateFlagsMVK v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK"
+pattern VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK :: VkStructureType
+pattern VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK = VkStructureType 1000123000
+-- No documentation found for TopLevel "VK_MVK_MACOS_SURFACE_SPEC_VERSION"
+pattern VK_MVK_MACOS_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_MVK_MACOS_SURFACE_SPEC_VERSION = 2
+-- No documentation found for TopLevel "VK_MVK_MACOS_SURFACE_EXTENSION_NAME"
+pattern VK_MVK_MACOS_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_MVK_MACOS_SURFACE_EXTENSION_NAME = "VK_MVK_macos_surface"
+-- | vkCreateMacOSSurfaceMVK - Create a VkSurfaceKHR object for a macOS
+-- NSView
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     'VkMacOSSurfaceCreateInfoMVK' structure containing parameters
+--     affecting the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkMacOSSurfaceCreateInfoMVK@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ 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_NATIVE_WINDOW_IN_USE_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
+-- 'VkMacOSSurfaceCreateInfoMVK',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR'
+foreign import ccall "vkCreateMacOSSurfaceMVK" vkCreateMacOSSurfaceMVK :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkMacOSSurfaceCreateInfoMVK) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | 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
+--     @CALayer@ instance of type @CAMetalLayer@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_MACOS_SURFACE_CREATE_INFO_MVK@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkMacOSSurfaceCreateInfoMVK" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkMacOSSurfaceCreateInfoMVK" "vkFlags"
+  vkFlags :: VkMacOSSurfaceCreateFlagsMVK
+  , -- No documentation found for Nested "VkMacOSSurfaceCreateInfoMVK" "vkPView"
+  vkPView :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkMacOSSurfaceCreateInfoMVK where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkMacOSSurfaceCreateInfoMVK <$> peek (ptr `plusPtr` 0)
+                                         <*> peek (ptr `plusPtr` 8)
+                                         <*> peek (ptr `plusPtr` 16)
+                                         <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMacOSSurfaceCreateInfoMVK))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMacOSSurfaceCreateInfoMVK))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkMacOSSurfaceCreateInfoMVK))
+                *> poke (ptr `plusPtr` 24) (vkPView (poked :: VkMacOSSurfaceCreateInfoMVK))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs b/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NN_vi_surface.hs
@@ -0,0 +1,210 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NN_vi_surface
+  ( VkViSurfaceCreateFlagsNN(..)
+  , pattern VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN
+  , pattern VK_NN_VI_SURFACE_SPEC_VERSION
+  , pattern VK_NN_VI_SURFACE_EXTENSION_NAME
+  , vkCreateViSurfaceNN
+  , VkViSurfaceCreateInfoNN(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkAllocationCallbacks(..)
+  , VkInstance
+  )
+import Graphics.Vulkan.Extensions.VK_KHR_surface
+  ( VkSurfaceKHR
+  )
+
+
+-- ** VkViSurfaceCreateFlagsNN
+
+-- No documentation found for TopLevel "VkViSurfaceCreateFlagsNN"
+newtype VkViSurfaceCreateFlagsNN = VkViSurfaceCreateFlagsNN VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkViSurfaceCreateFlagsNN where
+  
+  showsPrec p (VkViSurfaceCreateFlagsNN x) = showParen (p >= 11) (showString "VkViSurfaceCreateFlagsNN " . showsPrec 11 x)
+
+instance Read VkViSurfaceCreateFlagsNN where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkViSurfaceCreateFlagsNN")
+                        v <- step readPrec
+                        pure (VkViSurfaceCreateFlagsNN v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN"
+pattern VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN :: VkStructureType
+pattern VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = VkStructureType 1000062000
+-- No documentation found for TopLevel "VK_NN_VI_SURFACE_SPEC_VERSION"
+pattern VK_NN_VI_SURFACE_SPEC_VERSION :: Integral a => a
+pattern VK_NN_VI_SURFACE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NN_VI_SURFACE_EXTENSION_NAME"
+pattern VK_NN_VI_SURFACE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NN_VI_SURFACE_EXTENSION_NAME = "VK_NN_vi_surface"
+-- | vkCreateViSurfaceNN - Create a
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR' object for a VI
+-- layer
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @instance@ is the instance with which to associate the surface.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkViSurfaceCreateInfoNN@ structure containing parameters affecting
+--     the creation of the surface object.
+--
+-- -   @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>).
+--
+-- -   @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
+-- for the same @nn@::@vi@::@Layer@ and any attempts to connect to the same
+-- @nn@::@vi@::@Layer@ through other platform mechanisms will have
+-- undefined results.
+--
+-- The @currentExtent@ of a VI surface is always undefined. Applications
+-- are expected to choose an appropriate size for the swapchain’s
+-- @imageExtent@ (e.g., by matching the the result of a call to
+-- @nn@::@vi@::@GetDisplayResolution@).
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @instance@ /must/ be a valid @VkInstance@ handle
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkViSurfaceCreateInfoNN@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pSurface@ /must/ be a valid pointer to a @VkSurfaceKHR@ 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_NATIVE_WINDOW_IN_USE_KHR@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkInstance',
+-- 'Graphics.Vulkan.Extensions.VK_KHR_surface.VkSurfaceKHR',
+-- 'VkViSurfaceCreateInfoNN'
+foreign import ccall "vkCreateViSurfaceNN" vkCreateViSurfaceNN :: ("instance" ::: VkInstance) -> ("pCreateInfo" ::: Ptr VkViSurfaceCreateInfoNN) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pSurface" ::: Ptr VkSurfaceKHR) -> IO VkResult
+-- | VkViSurfaceCreateInfoNN - Structure specifying parameters of a newly
+-- created VI surface object
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @window@ /must/ be a valid @nn@::@vi@::@NativeWindowHandle@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkViSurfaceCreateInfoNN" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkViSurfaceCreateInfoNN" "vkFlags"
+  vkFlags :: VkViSurfaceCreateFlagsNN
+  , -- No documentation found for Nested "VkViSurfaceCreateInfoNN" "vkWindow"
+  vkWindow :: Ptr ()
+  }
+  deriving (Eq, Show)
+
+instance Storable VkViSurfaceCreateInfoNN where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkViSurfaceCreateInfoNN <$> peek (ptr `plusPtr` 0)
+                                     <*> peek (ptr `plusPtr` 8)
+                                     <*> peek (ptr `plusPtr` 16)
+                                     <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkViSurfaceCreateInfoNN))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkViSurfaceCreateInfoNN))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkViSurfaceCreateInfoNN))
+                *> poke (ptr `plusPtr` 24) (vkWindow (poked :: VkViSurfaceCreateInfoNN))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NVX_device_generated_commands.hs b/src/Graphics/Vulkan/Extensions/VK_NVX_device_generated_commands.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NVX_device_generated_commands.hs
@@ -0,0 +1,1907 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands
+  ( VkIndirectCommandsTokenTypeNVX(..)
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX
+  , pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX
+  , VkObjectEntryTypeNVX(..)
+  , pattern VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX
+  , pattern VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX
+  , pattern VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX
+  , pattern VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX
+  , pattern VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX
+  , VkIndirectCommandsLayoutUsageFlagBitsNVX(..)
+  , pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX
+  , pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX
+  , pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX
+  , pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX
+  , VkObjectEntryUsageFlagBitsNVX(..)
+  , pattern VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX
+  , pattern VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX
+  , pattern VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX
+  , pattern VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX
+  , pattern VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX
+  , pattern VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX
+  , pattern VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX
+  , pattern VK_OBJECT_TYPE_OBJECT_TABLE_NVX
+  , pattern VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX
+  , pattern VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX
+  , pattern VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX
+  , pattern VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX
+  , pattern VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION
+  , pattern VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME
+  , VkObjectTableNVX
+  , VkIndirectCommandsLayoutNVX
+  , vkCmdProcessCommandsNVX
+  , vkCmdReserveSpaceForCommandsNVX
+  , vkCreateIndirectCommandsLayoutNVX
+  , vkDestroyIndirectCommandsLayoutNVX
+  , vkCreateObjectTableNVX
+  , vkDestroyObjectTableNVX
+  , vkRegisterObjectsNVX
+  , vkUnregisterObjectsNVX
+  , vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX
+  , VkDeviceGeneratedCommandsFeaturesNVX(..)
+  , VkDeviceGeneratedCommandsLimitsNVX(..)
+  , VkIndirectCommandsTokenNVX(..)
+  , VkIndirectCommandsLayoutTokenNVX(..)
+  , VkIndirectCommandsLayoutCreateInfoNVX(..)
+  , VkCmdProcessCommandsInfoNVX(..)
+  , VkCmdReserveSpaceForCommandsInfoNVX(..)
+  , VkObjectTableCreateInfoNVX(..)
+  , VkObjectTableEntryNVX(..)
+  , VkObjectTablePipelineEntryNVX(..)
+  , VkObjectTableDescriptorSetEntryNVX(..)
+  , VkObjectTableVertexBufferEntryNVX(..)
+  , VkObjectTableIndexBufferEntryNVX(..)
+  , VkObjectTablePushConstantEntryNVX(..)
+  , VkIndirectCommandsLayoutUsageFlagsNVX
+  , VkObjectEntryUsageFlagsNVX
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.CommandBufferBuilding
+  ( VkIndexType(..)
+  )
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkResult(..)
+  , VkObjectType(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DescriptorSet
+  ( VkDescriptorSet
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDeviceSize
+  , VkPhysicalDevice
+  , VkAllocationCallbacks(..)
+  , VkDevice
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkPipelineBindPoint(..)
+  , VkAccessFlagBits(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkPipelineLayout
+  , VkPipeline
+  )
+import Graphics.Vulkan.Core10.PipelineLayout
+  ( VkShaderStageFlags
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  , VkPipelineStageFlagBits(..)
+  )
+
+
+-- ** VkIndirectCommandsTokenTypeNVX
+
+-- | 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
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkIndirectCommandsLayoutTokenNVX', 'VkIndirectCommandsTokenNVX'
+newtype VkIndirectCommandsTokenTypeNVX = VkIndirectCommandsTokenTypeNVX Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkIndirectCommandsTokenTypeNVX where
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX = showString "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX"
+  showsPrec p (VkIndirectCommandsTokenTypeNVX x) = showParen (p >= 11) (showString "VkIndirectCommandsTokenTypeNVX " . showsPrec 11 x)
+
+instance Read VkIndirectCommandsTokenTypeNVX where
+  readPrec = parens ( choose [ ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX",       pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX)
+                             , ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX", pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX)
+                             , ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX",   pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX)
+                             , ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX",  pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX)
+                             , ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX",  pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX)
+                             , ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX",   pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX)
+                             , ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX",           pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX)
+                             , ("VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX",       pure VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkIndirectCommandsTokenTypeNVX")
+                        v <- step readPrec
+                        pure (VkIndirectCommandsTokenTypeNVX v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX = VkIndirectCommandsTokenTypeNVX 0
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DESCRIPTOR_SET_NVX = VkIndirectCommandsTokenTypeNVX 1
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_INDEX_BUFFER_NVX = VkIndirectCommandsTokenTypeNVX 2
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_VERTEX_BUFFER_NVX = VkIndirectCommandsTokenTypeNVX 3
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_PUSH_CONSTANT_NVX = VkIndirectCommandsTokenTypeNVX 4
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX = VkIndirectCommandsTokenTypeNVX 5
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX = VkIndirectCommandsTokenTypeNVX 6
+
+-- No documentation found for Nested "VkIndirectCommandsTokenTypeNVX" "VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX"
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX :: VkIndirectCommandsTokenTypeNVX
+pattern VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX = VkIndirectCommandsTokenTypeNVX 7
+-- ** VkObjectEntryTypeNVX
+
+-- | VkObjectEntryTypeNVX - Enum specifying object table entry type
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkObjectTableCreateInfoNVX', 'VkObjectTableDescriptorSetEntryNVX',
+-- 'VkObjectTableEntryNVX', 'VkObjectTableIndexBufferEntryNVX',
+-- 'VkObjectTablePipelineEntryNVX', 'VkObjectTablePushConstantEntryNVX',
+-- 'VkObjectTableVertexBufferEntryNVX', 'vkUnregisterObjectsNVX'
+newtype VkObjectEntryTypeNVX = VkObjectEntryTypeNVX Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkObjectEntryTypeNVX where
+  showsPrec _ VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX = showString "VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX"
+  showsPrec _ VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX = showString "VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX"
+  showsPrec _ VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX = showString "VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX"
+  showsPrec _ VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX = showString "VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX"
+  showsPrec _ VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX = showString "VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX"
+  showsPrec p (VkObjectEntryTypeNVX x) = showParen (p >= 11) (showString "VkObjectEntryTypeNVX " . showsPrec 11 x)
+
+instance Read VkObjectEntryTypeNVX where
+  readPrec = parens ( choose [ ("VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX", pure VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX)
+                             , ("VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX",       pure VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX)
+                             , ("VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX",   pure VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX)
+                             , ("VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX",  pure VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX)
+                             , ("VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX",  pure VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkObjectEntryTypeNVX")
+                        v <- step readPrec
+                        pure (VkObjectEntryTypeNVX v)
+                        )
+                    )
+
+-- | @VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX@ specifies a @VkDescriptorSet@
+-- resource entry that is registered via
+-- @VkObjectTableDescriptorSetEntryNVX@.
+pattern VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX :: VkObjectEntryTypeNVX
+pattern VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX = VkObjectEntryTypeNVX 0
+
+-- | @VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX@ specifies a @VkPipeline@ resource
+-- entry that is registered via @VkObjectTablePipelineEntryNVX@.
+pattern VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX :: VkObjectEntryTypeNVX
+pattern VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX = VkObjectEntryTypeNVX 1
+
+-- | @VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX@ specifies a @VkBuffer@ resource
+-- entry that is registered via @VkObjectTableIndexBufferEntryNVX@.
+pattern VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX :: VkObjectEntryTypeNVX
+pattern VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX = VkObjectEntryTypeNVX 2
+
+-- | @VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX@ specifies a @VkBuffer@ resource
+-- entry that is registered via @VkObjectTableVertexBufferEntryNVX@.
+pattern VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX :: VkObjectEntryTypeNVX
+pattern VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX = VkObjectEntryTypeNVX 3
+
+-- | @VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX@ specifies the resource entry is
+-- registered via @VkObjectTablePushConstantEntryNVX@.
+pattern VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX :: VkObjectEntryTypeNVX
+pattern VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX = VkObjectEntryTypeNVX 4
+-- ** VkIndirectCommandsLayoutUsageFlagBitsNVX
+
+-- | VkIndirectCommandsLayoutUsageFlagBitsNVX - Bitmask specifying allowed
+-- usage of a indirect commands layout
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkIndirectCommandsLayoutUsageFlagsNVX'
+newtype VkIndirectCommandsLayoutUsageFlagBitsNVX = VkIndirectCommandsLayoutUsageFlagBitsNVX VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkIndirectCommandsLayoutUsageFlagBitsNVX where
+  showsPrec _ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = showString "VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = showString "VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = showString "VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX"
+  showsPrec _ VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = showString "VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX"
+  showsPrec p (VkIndirectCommandsLayoutUsageFlagBitsNVX x) = showParen (p >= 11) (showString "VkIndirectCommandsLayoutUsageFlagBitsNVX " . showsPrec 11 x)
+
+instance Read VkIndirectCommandsLayoutUsageFlagBitsNVX where
+  readPrec = parens ( choose [ ("VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX", pure VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX)
+                             , ("VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX",    pure VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX)
+                             , ("VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX",    pure VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX)
+                             , ("VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX",   pure VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkIndirectCommandsLayoutUsageFlagBitsNVX")
+                        v <- step readPrec
+                        pure (VkIndirectCommandsLayoutUsageFlagBitsNVX v)
+                        )
+                    )
+
+-- | @VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX@
+-- specifies that the processing of sequences /can/ happen at an
+-- implementation-dependent order, which is not guaranteed to be coherent
+-- across multiple invocations.
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX :: VkIndirectCommandsLayoutUsageFlagBitsNVX
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX = VkIndirectCommandsLayoutUsageFlagBitsNVX 0x00000001
+
+-- | @VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX@ specifies
+-- that there is likely a high difference between allocated number of
+-- sequences and actually used.
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX :: VkIndirectCommandsLayoutUsageFlagBitsNVX
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX = VkIndirectCommandsLayoutUsageFlagBitsNVX 0x00000002
+
+-- | @VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX@ specifies
+-- that there are likely many draw or dispatch calls that are zero-sized
+-- (zero grid dimension, no primitives to render).
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX :: VkIndirectCommandsLayoutUsageFlagBitsNVX
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX = VkIndirectCommandsLayoutUsageFlagBitsNVX 0x00000004
+
+-- | @VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX@ specifies
+-- that the input data for the sequences is not implicitly indexed from
+-- 0..sequencesUsed but a user provided @VkBuffer@ encoding the index is
+-- provided.
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX :: VkIndirectCommandsLayoutUsageFlagBitsNVX
+pattern VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX = VkIndirectCommandsLayoutUsageFlagBitsNVX 0x00000008
+-- ** VkObjectEntryUsageFlagBitsNVX
+
+-- | VkObjectEntryUsageFlagBitsNVX - Bitmask specifying allowed usage of an
+-- object entry
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkObjectEntryUsageFlagsNVX'
+newtype VkObjectEntryUsageFlagBitsNVX = VkObjectEntryUsageFlagBitsNVX VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkObjectEntryUsageFlagBitsNVX where
+  showsPrec _ VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = showString "VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX"
+  showsPrec _ VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = showString "VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX"
+  showsPrec p (VkObjectEntryUsageFlagBitsNVX x) = showParen (p >= 11) (showString "VkObjectEntryUsageFlagBitsNVX " . showsPrec 11 x)
+
+instance Read VkObjectEntryUsageFlagBitsNVX where
+  readPrec = parens ( choose [ ("VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX", pure VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX)
+                             , ("VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX",  pure VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkObjectEntryUsageFlagBitsNVX")
+                        v <- step readPrec
+                        pure (VkObjectEntryUsageFlagBitsNVX v)
+                        )
+                    )
+
+-- | @VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX@ specifies that the resource is
+-- bound to @VK_PIPELINE_BIND_POINT_GRAPHICS@
+pattern VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX :: VkObjectEntryUsageFlagBitsNVX
+pattern VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX = VkObjectEntryUsageFlagBitsNVX 0x00000001
+
+-- | @VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX@ specifies that the resource is
+-- bound to @VK_PIPELINE_BIND_POINT_COMPUTE@
+pattern VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX :: VkObjectEntryUsageFlagBitsNVX
+pattern VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX = VkObjectEntryUsageFlagBitsNVX 0x00000002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX"
+pattern VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX :: VkStructureType
+pattern VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX = VkStructureType 1000086000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX"
+pattern VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX :: VkStructureType
+pattern VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX = VkStructureType 1000086001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX"
+pattern VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX :: VkStructureType
+pattern VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX = VkStructureType 1000086002
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX"
+pattern VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX :: VkStructureType
+pattern VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX = VkStructureType 1000086003
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX"
+pattern VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX = VkStructureType 1000086004
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX"
+pattern VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX = VkStructureType 1000086005
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_OBJECT_TABLE_NVX"
+pattern VK_OBJECT_TYPE_OBJECT_TABLE_NVX :: VkObjectType
+pattern VK_OBJECT_TYPE_OBJECT_TABLE_NVX = VkObjectType 1000086000
+-- No documentation found for Nested "VkObjectType" "VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX"
+pattern VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX :: VkObjectType
+pattern VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX = VkObjectType 1000086001
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX"
+pattern VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX :: VkAccessFlagBits
+pattern VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX = VkAccessFlagBits 0x00020000
+-- No documentation found for Nested "VkAccessFlagBits" "VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX"
+pattern VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX :: VkAccessFlagBits
+pattern VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX = VkAccessFlagBits 0x00040000
+-- No documentation found for Nested "VkPipelineStageFlagBits" "VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"
+pattern VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX :: VkPipelineStageFlagBits
+pattern VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX = VkPipelineStageFlagBits 0x00020000
+-- No documentation found for TopLevel "VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"
+pattern VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION :: Integral a => a
+pattern VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION = 3
+-- No documentation found for TopLevel "VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"
+pattern VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME = "VK_NVX_device_generated_commands"
+-- | Dummy data to tag the 'Ptr' with
+data VkObjectTableNVX_T
+-- | VkObjectTableNVX - Opaque handle to an object table
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCmdProcessCommandsInfoNVX', 'VkCmdReserveSpaceForCommandsInfoNVX',
+-- 'vkCreateObjectTableNVX', 'vkDestroyObjectTableNVX',
+-- 'vkRegisterObjectsNVX', 'vkUnregisterObjectsNVX'
+type VkObjectTableNVX = Ptr VkObjectTableNVX_T
+-- | Dummy data to tag the 'Ptr' with
+data VkIndirectCommandsLayoutNVX_T
+-- | VkIndirectCommandsLayoutNVX - Opaque handle to an indirect commands
+-- layout object
+--
+-- = Description
+-- #_description#
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCmdProcessCommandsInfoNVX', 'VkCmdReserveSpaceForCommandsInfoNVX',
+-- 'vkCreateIndirectCommandsLayoutNVX',
+-- 'vkDestroyIndirectCommandsLayoutNVX'
+type VkIndirectCommandsLayoutNVX = Ptr VkIndirectCommandsLayoutNVX_T
+-- | vkCmdProcessCommandsNVX - Performs the generation of commands on the
+-- device
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @commandBuffer@ is the primary command buffer in which the
+--     generation process takes space.
+--
+-- -   @pProcessCommandsInfo@ is a pointer to an instance of the
+--     'VkCmdProcessCommandsInfoNVX' structure containing parameters
+--     affecting the processing of commands.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pProcessCommandsInfo@ /must/ be a valid pointer to a valid
+--     @VkCmdProcessCommandsInfoNVX@ structure
+--
+-- -   @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 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        |                 |
+-- > | Secondary       |                 | Compute         |                 |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCmdProcessCommandsInfoNVX',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdProcessCommandsNVX" vkCmdProcessCommandsNVX :: ("commandBuffer" ::: VkCommandBuffer) -> ("pProcessCommandsInfo" ::: Ptr VkCmdProcessCommandsInfoNVX) -> IO ()
+-- | vkCmdReserveSpaceForCommandsNVX - Perform a reservation of command
+-- buffer space
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @commandBuffer@ is the secondary command buffer in which the space
+--     for device-generated commands is reserved.
+--
+-- -   @pProcessCommandsInfo@ is a pointer to an instance of the
+--     '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
+--     reservation since its creation or the last reset.
+--
+-- -   The state of the @commandBuffer@ /must/ be legal to execute all
+--     commands within the sequence provided by the
+--     @indirectCommandsLayout@ member of @pProcessCommandsInfo@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pReserveSpaceInfo@ /must/ be a valid pointer to a valid
+--     @VkCmdReserveSpaceForCommandsInfoNVX@ structure
+--
+-- -   @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 inside of a render pass instance
+--
+-- -   @commandBuffer@ /must/ be a secondary @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>       |
+-- > +=================+=================+=================+=================+
+-- > | Secondary       | Inside          | Graphics        |                 |
+-- > |                 |                 | Compute         |                 |
+-- > +-----------------+-----------------+-----------------+-----------------+
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkCmdReserveSpaceForCommandsInfoNVX',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer'
+foreign import ccall "vkCmdReserveSpaceForCommandsNVX" vkCmdReserveSpaceForCommandsNVX :: ("commandBuffer" ::: VkCommandBuffer) -> ("pReserveSpaceInfo" ::: Ptr VkCmdReserveSpaceForCommandsInfoNVX) -> IO ()
+-- | vkCreateIndirectCommandsLayoutNVX - Create an indirect command layout
+-- object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the indirect command
+--     layout.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkIndirectCommandsLayoutCreateInfoNVX@ structure containing
+--     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.
+--
+-- -   @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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkIndirectCommandsLayoutCreateInfoNVX@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pIndirectCommandsLayout@ /must/ be a valid pointer to a
+--     @VkIndirectCommandsLayoutNVX@ handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkIndirectCommandsLayoutCreateInfoNVX', 'VkIndirectCommandsLayoutNVX'
+foreign import ccall "vkCreateIndirectCommandsLayoutNVX" vkCreateIndirectCommandsLayoutNVX :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkIndirectCommandsLayoutCreateInfoNVX) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pIndirectCommandsLayout" ::: Ptr VkIndirectCommandsLayoutNVX) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @indirectCommandsLayout@ /must/
+--     have completed execution
+--
+-- -   If @VkAllocationCallbacks@ were provided when @objectTable@ was
+--     created, a compatible set of callbacks /must/ be provided here
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @objectTable@ was
+--     created, @pAllocator@ /must/ be @NULL@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @indirectCommandsLayout@ /must/ be a valid
+--     @VkIndirectCommandsLayoutNVX@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @indirectCommandsLayout@ /must/ have been created, allocated, or
+--     retrieved from @device@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkIndirectCommandsLayoutNVX'
+foreign import ccall "vkDestroyIndirectCommandsLayoutNVX" vkDestroyIndirectCommandsLayoutNVX :: ("device" ::: VkDevice) -> ("indirectCommandsLayout" ::: VkIndirectCommandsLayoutNVX) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkCreateObjectTableNVX - Create an object table
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the object table.
+--
+-- -   @pCreateInfo@ is a pointer to an instance of the
+--     @VkObjectTableCreateInfoNVX@ structure containing parameters
+--     affecting creation of the table.
+--
+-- -   @pAllocator@ controls host memory allocation as described in the
+--     <{html_spec_relative}#memory-allocation 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
+--
+-- -   @pCreateInfo@ /must/ be a valid pointer to a valid
+--     @VkObjectTableCreateInfoNVX@ structure
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @pObjectTable@ /must/ be a valid pointer to a @VkObjectTableNVX@
+--     handle
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'VkObjectTableCreateInfoNVX', 'VkObjectTableNVX'
+foreign import ccall "vkCreateObjectTableNVX" vkCreateObjectTableNVX :: ("device" ::: VkDevice) -> ("pCreateInfo" ::: Ptr VkObjectTableCreateInfoNVX) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> ("pObjectTable" ::: Ptr VkObjectTableNVX) -> IO VkResult
+-- | 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#
+--
+-- == Valid Usage
+--
+-- -   All submitted commands that refer to @objectTable@ /must/ have
+--     completed execution.
+--
+-- -   If @VkAllocationCallbacks@ were provided when @objectTable@ was
+--     created, a compatible set of callbacks /must/ be provided here.
+--
+-- -   If no @VkAllocationCallbacks@ were provided when @objectTable@ was
+--     created, @pAllocator@ /must/ be @NULL@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @objectTable@ /must/ be a valid @VkObjectTableNVX@ handle
+--
+-- -   If @pAllocator@ is not @NULL@, @pAllocator@ /must/ be a valid
+--     pointer to a valid @VkAllocationCallbacks@ structure
+--
+-- -   @objectTable@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @objectTable@ /must/ be externally synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkAllocationCallbacks',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkObjectTableNVX'
+foreign import ccall "vkDestroyObjectTableNVX" vkDestroyObjectTableNVX :: ("device" ::: VkDevice) -> ("objectTable" ::: VkObjectTableNVX) -> ("pAllocator" ::: Ptr VkAllocationCallbacks) -> IO ()
+-- | vkRegisterObjectsNVX - Register resource bindings in an object table
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the object table.
+--
+-- -   @objectTable@ is the table for which the resources are registered.
+--
+-- -   @objectCount@ is the number of resources to register.
+--
+-- -   @ppObjectTableEntries@ provides an array for detailed binding
+--     informations, each array element is a pointer to a struct of type
+--     @VkObjectTablePipelineEntryNVX@,
+--     @VkObjectTableDescriptorSetEntryNVX@,
+--     @VkObjectTableVertexBufferEntryNVX@,
+--     @VkObjectTableIndexBufferEntryNVX@ or
+--     @VkObjectTablePushConstantEntryNVX@ (see below for details).
+--
+-- -   @pObjectIndices@ are the indices at which each resource is
+--     registered.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   The contents of @pObjectTableEntry@ /must/ yield plausible bindings
+--     supported by the device.
+--
+-- -   At any @pObjectIndices@ there /must/ not be a registered resource
+--     already.
+--
+-- -   Any value inside @pObjectIndices@ /must/ be below the appropriate
+--     @VkObjectTableCreateInfoNVX@::@pObjectEntryCounts@ limits provided
+--     at @objectTable@ creation time.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @objectTable@ /must/ be a valid @VkObjectTableNVX@ handle
+--
+-- -   @ppObjectTableEntries@ /must/ be a valid pointer to an array of
+--     @objectCount@ valid @VkObjectTableEntryNVX@ structures
+--
+-- -   @pObjectIndices@ /must/ be a valid pointer to an array of
+--     @objectCount@ @uint32_t@ values
+--
+-- -   @objectCount@ /must/ be greater than @0@
+--
+-- -   @objectTable@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @objectTable@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkObjectTableEntryNVX', 'VkObjectTableNVX'
+foreign import ccall "vkRegisterObjectsNVX" vkRegisterObjectsNVX :: ("device" ::: VkDevice) -> ("objectTable" ::: VkObjectTableNVX) -> ("objectCount" ::: Word32) -> ("ppObjectTableEntries" ::: Ptr (Ptr VkObjectTableEntryNVX)) -> ("pObjectIndices" ::: Ptr Word32) -> IO VkResult
+-- | vkUnregisterObjectsNVX - Unregister resource bindings in an object table
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that creates the object table.
+--
+-- -   @objectTable@ is the table from which the resources are
+--     unregistered.
+--
+-- -   @objectCount@ is the number of resources being removed from the
+--     object table.
+--
+-- -   @pObjectEntryType@ provides an array of @VkObjectEntryTypeNVX@ for
+--     the resources being removed.
+--
+-- -   @pObjectIndices@ provides the array of object indices to be removed.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   At any @pObjectIndices@ there /must/ be a registered resource
+--     already.
+--
+-- -   The @pObjectEntryTypes@ of the resource at @pObjectIndices@ /must/
+--     match.
+--
+-- -   All operations on the device using the registered resource /must/
+--     have been completed.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @objectTable@ /must/ be a valid @VkObjectTableNVX@ handle
+--
+-- -   @pObjectEntryTypes@ /must/ be a valid pointer to an array of
+--     @objectCount@ valid 'VkObjectEntryTypeNVX' values
+--
+-- -   @pObjectIndices@ /must/ be a valid pointer to an array of
+--     @objectCount@ @uint32_t@ values
+--
+-- -   @objectCount@ /must/ be greater than @0@
+--
+-- -   @objectTable@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @objectTable@ /must/ be externally synchronized
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @VK_ERROR_OUT_OF_HOST_MEMORY@
+--
+--     -   @VK_ERROR_OUT_OF_DEVICE_MEMORY@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkDevice',
+-- 'VkObjectEntryTypeNVX', 'VkObjectTableNVX'
+foreign import ccall "vkUnregisterObjectsNVX" vkUnregisterObjectsNVX :: ("device" ::: VkDevice) -> ("objectTable" ::: VkObjectTableNVX) -> ("objectCount" ::: Word32) -> ("pObjectEntryTypes" ::: Ptr VkObjectEntryTypeNVX) -> ("pObjectIndices" ::: Ptr Word32) -> IO VkResult
+-- | vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX - Returns
+-- device-generated commands related properties of a physical device
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the handle to the physical device whose
+--     properties will be queried.
+--
+-- -   @pFeatures@ points to an instance of the
+--     'VkDeviceGeneratedCommandsFeaturesNVX' structure, that will be
+--     filled with returned information.
+--
+-- -   @pLimits@ points to an instance of the
+--     'VkDeviceGeneratedCommandsLimitsNVX' structure, that will be filled
+--     with returned information.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @physicalDevice@ /must/ be a valid @VkPhysicalDevice@ handle
+--
+-- -   @pFeatures@ /must/ be a valid pointer to a
+--     @VkDeviceGeneratedCommandsFeaturesNVX@ structure
+--
+-- -   @pLimits@ /must/ be a valid pointer to a
+--     @VkDeviceGeneratedCommandsLimitsNVX@ structure
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkDeviceGeneratedCommandsFeaturesNVX',
+-- 'VkDeviceGeneratedCommandsLimitsNVX',
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX" vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX :: ("physicalDevice" ::: VkPhysicalDevice) -> ("pFeatures" ::: Ptr VkDeviceGeneratedCommandsFeaturesNVX) -> ("pLimits" ::: Ptr VkDeviceGeneratedCommandsLimitsNVX) -> IO ()
+-- | VkDeviceGeneratedCommandsFeaturesNVX - Structure specifying physical
+-- device support
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsFeaturesNVX" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsFeaturesNVX" "vkComputeBindingPointSupport"
+  vkComputeBindingPointSupport :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGeneratedCommandsFeaturesNVX where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDeviceGeneratedCommandsFeaturesNVX <$> peek (ptr `plusPtr` 0)
+                                                  <*> peek (ptr `plusPtr` 8)
+                                                  <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceGeneratedCommandsFeaturesNVX))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGeneratedCommandsFeaturesNVX))
+                *> poke (ptr `plusPtr` 16) (vkComputeBindingPointSupport (poked :: VkDeviceGeneratedCommandsFeaturesNVX))
+-- | VkDeviceGeneratedCommandsLimitsNVX - Structure specifying physical
+-- device limits
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX'
+data VkDeviceGeneratedCommandsLimitsNVX = VkDeviceGeneratedCommandsLimitsNVX
+  { -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMaxIndirectCommandsLayoutTokenCount"
+  vkMaxIndirectCommandsLayoutTokenCount :: Word32
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMaxObjectEntryCounts"
+  vkMaxObjectEntryCounts :: Word32
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMinSequenceCountBufferOffsetAlignment"
+  vkMinSequenceCountBufferOffsetAlignment :: Word32
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMinSequenceIndexBufferOffsetAlignment"
+  vkMinSequenceIndexBufferOffsetAlignment :: Word32
+  , -- No documentation found for Nested "VkDeviceGeneratedCommandsLimitsNVX" "vkMinCommandsTokenBufferOffsetAlignment"
+  vkMinCommandsTokenBufferOffsetAlignment :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDeviceGeneratedCommandsLimitsNVX where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkDeviceGeneratedCommandsLimitsNVX <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDeviceGeneratedCommandsLimitsNVX))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDeviceGeneratedCommandsLimitsNVX))
+                *> poke (ptr `plusPtr` 16) (vkMaxIndirectCommandsLayoutTokenCount (poked :: VkDeviceGeneratedCommandsLimitsNVX))
+                *> poke (ptr `plusPtr` 20) (vkMaxObjectEntryCounts (poked :: VkDeviceGeneratedCommandsLimitsNVX))
+                *> poke (ptr `plusPtr` 24) (vkMinSequenceCountBufferOffsetAlignment (poked :: VkDeviceGeneratedCommandsLimitsNVX))
+                *> poke (ptr `plusPtr` 28) (vkMinSequenceIndexBufferOffsetAlignment (poked :: VkDeviceGeneratedCommandsLimitsNVX))
+                *> poke (ptr `plusPtr` 32) (vkMinCommandsTokenBufferOffsetAlignment (poked :: VkDeviceGeneratedCommandsLimitsNVX))
+-- | VkIndirectCommandsTokenNVX - Structure specifying parameters for the
+-- reservation of command buffer space
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   The @buffer@’s usage flag /must/ have the
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set.
+--
+-- -   The @offset@ /must/ be aligned to
+--     @VkDeviceGeneratedCommandsLimitsNVX@::@minCommandsTokenBufferOffsetAlignment@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @tokenType@ /must/ be a valid 'VkIndirectCommandsTokenTypeNVX' value
+--
+-- -   @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"
+  vkTokenType :: VkIndirectCommandsTokenTypeNVX
+  , -- No documentation found for Nested "VkIndirectCommandsTokenNVX" "vkBuffer"
+  vkBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkIndirectCommandsTokenNVX" "vkOffset"
+  vkOffset :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkIndirectCommandsTokenNVX where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkIndirectCommandsTokenNVX <$> peek (ptr `plusPtr` 0)
+                                        <*> peek (ptr `plusPtr` 8)
+                                        <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkTokenType (poked :: VkIndirectCommandsTokenNVX))
+                *> poke (ptr `plusPtr` 8) (vkBuffer (poked :: VkIndirectCommandsTokenNVX))
+                *> poke (ptr `plusPtr` 16) (vkOffset (poked :: VkIndirectCommandsTokenNVX))
+-- | VkIndirectCommandsLayoutTokenNVX - Struct specifying the details of an
+-- indirect command layout token
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @bindingUnit@ /must/ stay within device supported limits for the
+--     appropriate commands.
+--
+-- -   @dynamicCount@ /must/ stay within device supported limits for the
+--     appropriate commands.
+--
+-- -   @divisor@ /must/ be greater than @0@ and a power of two.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @tokenType@ /must/ be a valid 'VkIndirectCommandsTokenTypeNVX' value
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkIndirectCommandsLayoutCreateInfoNVX',
+-- 'VkIndirectCommandsTokenTypeNVX'
+data VkIndirectCommandsLayoutTokenNVX = VkIndirectCommandsLayoutTokenNVX
+  { -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkTokenType"
+  vkTokenType :: VkIndirectCommandsTokenTypeNVX
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkBindingUnit"
+  vkBindingUnit :: Word32
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkDynamicCount"
+  vkDynamicCount :: Word32
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutTokenNVX" "vkDivisor"
+  vkDivisor :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkIndirectCommandsLayoutTokenNVX where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek ptr = VkIndirectCommandsLayoutTokenNVX <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 4)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 12)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkTokenType (poked :: VkIndirectCommandsLayoutTokenNVX))
+                *> poke (ptr `plusPtr` 4) (vkBindingUnit (poked :: VkIndirectCommandsLayoutTokenNVX))
+                *> poke (ptr `plusPtr` 8) (vkDynamicCount (poked :: VkIndirectCommandsLayoutTokenNVX))
+                *> poke (ptr `plusPtr` 12) (vkDivisor (poked :: VkIndirectCommandsLayoutTokenNVX))
+-- | VkIndirectCommandsLayoutCreateInfoNVX - Structure specifying the
+-- parameters of a newly created indirect commands layout object
+--
+-- = Description
+-- #_description#
+--
+-- The following code illustrates some of the key flags:
+--
+-- > void cmdProcessAllSequences(cmd, objectTable, indirectCommandsLayout, pIndirectCommandsTokens, sequencesCount, indexbuffer, indexbufferoffset)
+-- > {
+-- >   for (s = 0; s < sequencesCount; s++)
+-- >   {
+-- >     sequence = s;
+-- >
+-- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX) {
+-- >       sequence = incoherent_implementation_dependent_permutation[ sequence ];
+-- >     }
+-- >     if (indirectCommandsLayout.flags & VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX) {
+-- >       sequence = indexbuffer.load_uint32( sequence * sizeof(uint32_t) + indexbufferoffset);
+-- >     }
+-- >
+-- >     cmdProcessSequence( cmd, objectTable, indirectCommandsLayout, pIndirectCommandsTokens, sequence );
+-- >   }
+-- > }
+--
+-- == Valid Usage
+--
+-- -   @tokenCount@ /must/ be greater than @0@ and below
+--     @VkDeviceGeneratedCommandsLimitsNVX@::@maxIndirectCommandsLayoutTokenCount@
+--
+-- -   If the
+--     @VkDeviceGeneratedCommandsFeaturesNVX@::@computeBindingPointSupport@
+--     feature is not enabled, then @pipelineBindPoint@ /must/ not be
+--     @VK_PIPELINE_BIND_POINT_COMPUTE@
+--
+-- -   If @pTokens@ contains an entry of
+--     @VK_INDIRECT_COMMANDS_TOKEN_TYPE_PIPELINE_NVX@ it /must/ be the
+--     first element of the array and there /must/ be only a single element
+--     of such token type.
+--
+-- -   All state binding tokens in @pTokens@ /must/ occur prior work
+--     provoking tokens (@VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_NVX@,
+--     @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DRAW_INDEXED_NVX@,
+--     @VK_INDIRECT_COMMANDS_TOKEN_TYPE_DISPATCH_NVX@).
+--
+-- -   The content of @pTokens@ /must/ include one single work provoking
+--     token that is compatible with the @pipelineBindPoint@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @pipelineBindPoint@ /must/ be a valid
+--     'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkIndirectCommandsLayoutUsageFlagBitsNVX' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @pTokens@ /must/ be a valid pointer to an array of @tokenCount@
+--     valid @VkIndirectCommandsLayoutTokenNVX@ structures
+--
+-- -   @tokenCount@ /must/ be greater than @0@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkIndirectCommandsLayoutTokenNVX',
+-- 'VkIndirectCommandsLayoutUsageFlagsNVX',
+-- 'Graphics.Vulkan.Core10.Pass.VkPipelineBindPoint',
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCreateIndirectCommandsLayoutNVX'
+data VkIndirectCommandsLayoutCreateInfoNVX = VkIndirectCommandsLayoutCreateInfoNVX
+  { -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkPipelineBindPoint"
+  vkPipelineBindPoint :: VkPipelineBindPoint
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkFlags"
+  vkFlags :: VkIndirectCommandsLayoutUsageFlagsNVX
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkTokenCount"
+  vkTokenCount :: Word32
+  , -- No documentation found for Nested "VkIndirectCommandsLayoutCreateInfoNVX" "vkPTokens"
+  vkPTokens :: Ptr VkIndirectCommandsLayoutTokenNVX
+  }
+  deriving (Eq, Show)
+
+instance Storable VkIndirectCommandsLayoutCreateInfoNVX where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkIndirectCommandsLayoutCreateInfoNVX <$> peek (ptr `plusPtr` 0)
+                                                   <*> peek (ptr `plusPtr` 8)
+                                                   <*> peek (ptr `plusPtr` 16)
+                                                   <*> peek (ptr `plusPtr` 20)
+                                                   <*> peek (ptr `plusPtr` 24)
+                                                   <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkIndirectCommandsLayoutCreateInfoNVX))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkIndirectCommandsLayoutCreateInfoNVX))
+                *> poke (ptr `plusPtr` 16) (vkPipelineBindPoint (poked :: VkIndirectCommandsLayoutCreateInfoNVX))
+                *> poke (ptr `plusPtr` 20) (vkFlags (poked :: VkIndirectCommandsLayoutCreateInfoNVX))
+                *> poke (ptr `plusPtr` 24) (vkTokenCount (poked :: VkIndirectCommandsLayoutCreateInfoNVX))
+                *> poke (ptr `plusPtr` 32) (vkPTokens (poked :: VkIndirectCommandsLayoutCreateInfoNVX))
+-- | VkCmdProcessCommandsInfoNVX - Structure specifying parameters for the
+-- generation of commands
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   The provided @objectTable@ /must/ include all objects referenced by
+--     the generation process.
+--
+-- -   @indirectCommandsTokenCount@ /must/ match the
+--     @indirectCommandsLayout@’s @tokenCount@.
+--
+-- -   The @tokenType@ member of each entry in the
+--     @pIndirectCommandsTokens@ array /must/ match the values used at
+--     creation time of @indirectCommandsLayout@
+--
+-- -   If @targetCommandBuffer@ is provided, it /must/ have reserved
+--     command space.
+--
+-- -   If @targetCommandBuffer@ is provided, the @objectTable@ /must/ match
+--     the reservation’s objectTable and /must/ have had all referenced
+--     objects registered at reservation time.
+--
+-- -   If @targetCommandBuffer@ is provided, the @indirectCommandsLayout@
+--     /must/ match the reservation’s indirectCommandsLayout.
+--
+-- -   If @targetCommandBuffer@ is provided, the @maxSequencesCount@ /must/
+--     not exceed the reservation’s maxSequencesCount.
+--
+-- -   If @sequencesCountBuffer@ is used, its usage flag /must/ have
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set.
+--
+-- -   If @sequencesCountBuffer@ is used, @sequencesCountOffset@ /must/ be
+--     aligned to
+--     @VkDeviceGeneratedCommandsLimitsNVX@::@minSequenceCountBufferOffsetAlignment@.
+--
+-- -   If @sequencesIndexBuffer@ is used, its usage flag /must/ have
+--     @VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT@ bit set.
+--
+-- -   If @sequencesIndexBuffer@ is used, @sequencesIndexOffset@ /must/ be
+--     aligned to
+--     @VkDeviceGeneratedCommandsLimitsNVX@::@minSequenceIndexBufferOffsetAlignment@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @objectTable@ /must/ be a valid @VkObjectTableNVX@ handle
+--
+-- -   @indirectCommandsLayout@ /must/ be a valid
+--     @VkIndirectCommandsLayoutNVX@ handle
+--
+-- -   @pIndirectCommandsTokens@ /must/ be a valid pointer to an array of
+--     @indirectCommandsTokenCount@ valid @VkIndirectCommandsTokenNVX@
+--     structures
+--
+-- -   If @targetCommandBuffer@ is not @NULL@, @targetCommandBuffer@ /must/
+--     be a valid @VkCommandBuffer@ handle
+--
+-- -   If @sequencesCountBuffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @sequencesCountBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   If @sequencesIndexBuffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @sequencesIndexBuffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @indirectCommandsTokenCount@ /must/ be greater than @0@
+--
+-- -   Each of @indirectCommandsLayout@, @objectTable@,
+--     @sequencesCountBuffer@, @sequencesIndexBuffer@, and
+--     @targetCommandBuffer@ that are valid handles /must/ have been
+--     created, allocated, or retrieved from the same @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   Host access to @objectTable@ /must/ be externally synchronized
+--
+-- -   Host access to @targetCommandBuffer@ /must/ be externally
+--     synchronized
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.MemoryManagement.VkBuffer',
+-- 'Graphics.Vulkan.Core10.Queue.VkCommandBuffer', @VkDeviceSize@,
+-- 'VkIndirectCommandsLayoutNVX', 'VkIndirectCommandsTokenNVX',
+-- 'VkObjectTableNVX', 'Graphics.Vulkan.Core10.Core.VkStructureType',
+-- 'vkCmdProcessCommandsNVX'
+data VkCmdProcessCommandsInfoNVX = VkCmdProcessCommandsInfoNVX
+  { -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkObjectTable"
+  vkObjectTable :: VkObjectTableNVX
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkIndirectCommandsLayout"
+  vkIndirectCommandsLayout :: VkIndirectCommandsLayoutNVX
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkIndirectCommandsTokenCount"
+  vkIndirectCommandsTokenCount :: Word32
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkPIndirectCommandsTokens"
+  vkPIndirectCommandsTokens :: Ptr VkIndirectCommandsTokenNVX
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkMaxSequencesCount"
+  vkMaxSequencesCount :: Word32
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkTargetCommandBuffer"
+  vkTargetCommandBuffer :: VkCommandBuffer
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesCountBuffer"
+  vkSequencesCountBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesCountOffset"
+  vkSequencesCountOffset :: VkDeviceSize
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesIndexBuffer"
+  vkSequencesIndexBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkCmdProcessCommandsInfoNVX" "vkSequencesIndexOffset"
+  vkSequencesIndexOffset :: VkDeviceSize
+  }
+  deriving (Eq, Show)
+
+instance Storable VkCmdProcessCommandsInfoNVX where
+  sizeOf ~_ = 96
+  alignment ~_ = 8
+  peek ptr = VkCmdProcessCommandsInfoNVX <$> 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)
+                                         <*> peek (ptr `plusPtr` 64)
+                                         <*> peek (ptr `plusPtr` 72)
+                                         <*> peek (ptr `plusPtr` 80)
+                                         <*> peek (ptr `plusPtr` 88)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 16) (vkObjectTable (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 24) (vkIndirectCommandsLayout (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 32) (vkIndirectCommandsTokenCount (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 40) (vkPIndirectCommandsTokens (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 48) (vkMaxSequencesCount (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 56) (vkTargetCommandBuffer (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 64) (vkSequencesCountBuffer (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 72) (vkSequencesCountOffset (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 80) (vkSequencesIndexBuffer (poked :: VkCmdProcessCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 88) (vkSequencesIndexOffset (poked :: VkCmdProcessCommandsInfoNVX))
+-- | VkCmdReserveSpaceForCommandsInfoNVX - Structure specifying parameters
+-- for the reservation of command buffer space
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @objectTable@ /must/ be a valid @VkObjectTableNVX@ handle
+--
+-- -   @indirectCommandsLayout@ /must/ be a valid
+--     @VkIndirectCommandsLayoutNVX@ handle
+--
+-- -   Both of @indirectCommandsLayout@, and @objectTable@ /must/ have been
+--     created, allocated, or retrieved from the same @VkDevice@
+--
+-- == Host Synchronization
+--
+-- -   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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkObjectTable"
+  vkObjectTable :: VkObjectTableNVX
+  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkIndirectCommandsLayout"
+  vkIndirectCommandsLayout :: VkIndirectCommandsLayoutNVX
+  , -- No documentation found for Nested "VkCmdReserveSpaceForCommandsInfoNVX" "vkMaxSequencesCount"
+  vkMaxSequencesCount :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkCmdReserveSpaceForCommandsInfoNVX where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkCmdReserveSpaceForCommandsInfoNVX <$> peek (ptr `plusPtr` 0)
+                                                 <*> peek (ptr `plusPtr` 8)
+                                                 <*> peek (ptr `plusPtr` 16)
+                                                 <*> peek (ptr `plusPtr` 24)
+                                                 <*> peek (ptr `plusPtr` 32)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkCmdReserveSpaceForCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkCmdReserveSpaceForCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 16) (vkObjectTable (poked :: VkCmdReserveSpaceForCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 24) (vkIndirectCommandsLayout (poked :: VkCmdReserveSpaceForCommandsInfoNVX))
+                *> poke (ptr `plusPtr` 32) (vkMaxSequencesCount (poked :: VkCmdReserveSpaceForCommandsInfoNVX))
+-- | VkObjectTableCreateInfoNVX - Structure specifying the parameters of a
+-- newly created object table
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If the
+--     @VkDeviceGeneratedCommandsFeaturesNVX@::@computeBindingPointSupport@
+--     feature is not enabled, @pObjectEntryUsageFlags@ /must/ not contain
+--     @VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX@
+--
+-- -   Any value within @pObjectEntryCounts@ /must/ not exceed
+--     @VkDeviceGeneratedCommandsLimitsNVX@::@maxObjectEntryCounts@
+--
+-- -   @maxUniformBuffersPerDescriptor@ /must/ be within the limits
+--     supported by the device.
+--
+-- -   @maxStorageBuffersPerDescriptor@ /must/ be within the limits
+--     supported by the device.
+--
+-- -   @maxStorageImagesPerDescriptor@ /must/ be within the limits
+--     supported by the device.
+--
+-- -   @maxSampledImagesPerDescriptor@ /must/ be within the limits
+--     supported by the device.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be @VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX@
+--
+-- -   @pNext@ /must/ be @NULL@
+--
+-- -   @pObjectEntryTypes@ /must/ be a valid pointer to an array of
+--     @objectCount@ valid 'VkObjectEntryTypeNVX' values
+--
+-- -   @pObjectEntryCounts@ /must/ be a valid pointer to an array of
+--     @objectCount@ @uint32_t@ values
+--
+-- -   @pObjectEntryUsageFlags@ /must/ be a valid pointer to an array of
+--     @objectCount@ valid combinations of 'VkObjectEntryUsageFlagBitsNVX'
+--     values
+--
+-- -   Each element of @pObjectEntryUsageFlags@ /must/ not be @0@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkObjectCount"
+  vkObjectCount :: Word32
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPObjectEntryTypes"
+  vkPObjectEntryTypes :: Ptr VkObjectEntryTypeNVX
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPObjectEntryCounts"
+  vkPObjectEntryCounts :: Ptr Word32
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkPObjectEntryUsageFlags"
+  vkPObjectEntryUsageFlags :: Ptr VkObjectEntryUsageFlagsNVX
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxUniformBuffersPerDescriptor"
+  vkMaxUniformBuffersPerDescriptor :: Word32
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxStorageBuffersPerDescriptor"
+  vkMaxStorageBuffersPerDescriptor :: Word32
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxStorageImagesPerDescriptor"
+  vkMaxStorageImagesPerDescriptor :: Word32
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxSampledImagesPerDescriptor"
+  vkMaxSampledImagesPerDescriptor :: Word32
+  , -- No documentation found for Nested "VkObjectTableCreateInfoNVX" "vkMaxPipelineLayouts"
+  vkMaxPipelineLayouts :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkObjectTableCreateInfoNVX where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkObjectTableCreateInfoNVX <$> 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` 52)
+                                        <*> peek (ptr `plusPtr` 56)
+                                        <*> peek (ptr `plusPtr` 60)
+                                        <*> peek (ptr `plusPtr` 64)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 16) (vkObjectCount (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 24) (vkPObjectEntryTypes (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 32) (vkPObjectEntryCounts (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 40) (vkPObjectEntryUsageFlags (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 48) (vkMaxUniformBuffersPerDescriptor (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 52) (vkMaxStorageBuffersPerDescriptor (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 56) (vkMaxStorageImagesPerDescriptor (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 60) (vkMaxSampledImagesPerDescriptor (poked :: VkObjectTableCreateInfoNVX))
+                *> poke (ptr `plusPtr` 64) (vkMaxPipelineLayouts (poked :: VkObjectTableCreateInfoNVX))
+-- | VkObjectTableEntryNVX - Common parameters of an object table resource
+-- entry
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   If the
+--     @VkDeviceGeneratedCommandsFeaturesNVX@::@computeBindingPointSupport@
+--     feature is not enabled, @flags@ /must/ not contain
+--     @VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid 'VkObjectEntryTypeNVX' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkObjectEntryUsageFlagBitsNVX' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkObjectEntryTypeNVX', 'VkObjectEntryUsageFlagsNVX',
+-- 'vkRegisterObjectsNVX'
+data VkObjectTableEntryNVX = VkObjectTableEntryNVX
+  { -- No documentation found for Nested "VkObjectTableEntryNVX" "vkType"
+  vkType :: VkObjectEntryTypeNVX
+  , -- No documentation found for Nested "VkObjectTableEntryNVX" "vkFlags"
+  vkFlags :: VkObjectEntryUsageFlagsNVX
+  }
+  deriving (Eq, Show)
+
+instance Storable VkObjectTableEntryNVX where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkObjectTableEntryNVX <$> peek (ptr `plusPtr` 0)
+                                   <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkObjectTableEntryNVX))
+                *> poke (ptr `plusPtr` 4) (vkFlags (poked :: VkObjectTableEntryNVX))
+-- | VkObjectTablePipelineEntryNVX - Parameters of an object table pipeline
+-- entry
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_PIPELINE_NVX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid 'VkObjectEntryTypeNVX' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkObjectEntryUsageFlagBitsNVX' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @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"
+  vkType :: VkObjectEntryTypeNVX
+  , -- No documentation found for Nested "VkObjectTablePipelineEntryNVX" "vkFlags"
+  vkFlags :: VkObjectEntryUsageFlagsNVX
+  , -- No documentation found for Nested "VkObjectTablePipelineEntryNVX" "vkPipeline"
+  vkPipeline :: VkPipeline
+  }
+  deriving (Eq, Show)
+
+instance Storable VkObjectTablePipelineEntryNVX where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek ptr = VkObjectTablePipelineEntryNVX <$> peek (ptr `plusPtr` 0)
+                                           <*> peek (ptr `plusPtr` 4)
+                                           <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkObjectTablePipelineEntryNVX))
+                *> poke (ptr `plusPtr` 4) (vkFlags (poked :: VkObjectTablePipelineEntryNVX))
+                *> poke (ptr `plusPtr` 8) (vkPipeline (poked :: VkObjectTablePipelineEntryNVX))
+-- | VkObjectTableDescriptorSetEntryNVX - Parameters of an object table
+-- descriptor set entry
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_DESCRIPTOR_SET_NVX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid 'VkObjectEntryTypeNVX' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkObjectEntryUsageFlagBitsNVX' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @pipelineLayout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   @descriptorSet@ /must/ be a valid @VkDescriptorSet@ handle
+--
+-- -   Both of @descriptorSet@, and @pipelineLayout@ /must/ have been
+--     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"
+  vkType :: VkObjectEntryTypeNVX
+  , -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "vkFlags"
+  vkFlags :: VkObjectEntryUsageFlagsNVX
+  , -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "vkPipelineLayout"
+  vkPipelineLayout :: VkPipelineLayout
+  , -- No documentation found for Nested "VkObjectTableDescriptorSetEntryNVX" "vkDescriptorSet"
+  vkDescriptorSet :: VkDescriptorSet
+  }
+  deriving (Eq, Show)
+
+instance Storable VkObjectTableDescriptorSetEntryNVX where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkObjectTableDescriptorSetEntryNVX <$> peek (ptr `plusPtr` 0)
+                                                <*> peek (ptr `plusPtr` 4)
+                                                <*> peek (ptr `plusPtr` 8)
+                                                <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkObjectTableDescriptorSetEntryNVX))
+                *> poke (ptr `plusPtr` 4) (vkFlags (poked :: VkObjectTableDescriptorSetEntryNVX))
+                *> poke (ptr `plusPtr` 8) (vkPipelineLayout (poked :: VkObjectTableDescriptorSetEntryNVX))
+                *> poke (ptr `plusPtr` 16) (vkDescriptorSet (poked :: VkObjectTableDescriptorSetEntryNVX))
+-- | VkObjectTableVertexBufferEntryNVX - Parameters of an object table vertex
+-- buffer entry
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_VERTEX_BUFFER_NVX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid 'VkObjectEntryTypeNVX' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkObjectEntryUsageFlagBitsNVX' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @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"
+  vkType :: VkObjectEntryTypeNVX
+  , -- No documentation found for Nested "VkObjectTableVertexBufferEntryNVX" "vkFlags"
+  vkFlags :: VkObjectEntryUsageFlagsNVX
+  , -- No documentation found for Nested "VkObjectTableVertexBufferEntryNVX" "vkBuffer"
+  vkBuffer :: VkBuffer
+  }
+  deriving (Eq, Show)
+
+instance Storable VkObjectTableVertexBufferEntryNVX where
+  sizeOf ~_ = 16
+  alignment ~_ = 8
+  peek ptr = VkObjectTableVertexBufferEntryNVX <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 4)
+                                               <*> peek (ptr `plusPtr` 8)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkObjectTableVertexBufferEntryNVX))
+                *> poke (ptr `plusPtr` 4) (vkFlags (poked :: VkObjectTableVertexBufferEntryNVX))
+                *> poke (ptr `plusPtr` 8) (vkBuffer (poked :: VkObjectTableVertexBufferEntryNVX))
+-- | VkObjectTableIndexBufferEntryNVX - Parameters of an object table index
+-- buffer entry
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_INDEX_BUFFER_NVX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid 'VkObjectEntryTypeNVX' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkObjectEntryUsageFlagBitsNVX' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @buffer@ /must/ be a valid @VkBuffer@ handle
+--
+-- -   @indexType@ /must/ be a valid
+--     '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"
+  vkType :: VkObjectEntryTypeNVX
+  , -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "vkFlags"
+  vkFlags :: VkObjectEntryUsageFlagsNVX
+  , -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "vkBuffer"
+  vkBuffer :: VkBuffer
+  , -- No documentation found for Nested "VkObjectTableIndexBufferEntryNVX" "vkIndexType"
+  vkIndexType :: VkIndexType
+  }
+  deriving (Eq, Show)
+
+instance Storable VkObjectTableIndexBufferEntryNVX where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkObjectTableIndexBufferEntryNVX <$> peek (ptr `plusPtr` 0)
+                                              <*> peek (ptr `plusPtr` 4)
+                                              <*> peek (ptr `plusPtr` 8)
+                                              <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkObjectTableIndexBufferEntryNVX))
+                *> poke (ptr `plusPtr` 4) (vkFlags (poked :: VkObjectTableIndexBufferEntryNVX))
+                *> poke (ptr `plusPtr` 8) (vkBuffer (poked :: VkObjectTableIndexBufferEntryNVX))
+                *> poke (ptr `plusPtr` 16) (vkIndexType (poked :: VkObjectTableIndexBufferEntryNVX))
+-- | VkObjectTablePushConstantEntryNVX - Parameters of an object table push
+-- constant entry
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @type@ /must/ be @VK_OBJECT_ENTRY_TYPE_PUSH_CONSTANT_NVX@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @type@ /must/ be a valid 'VkObjectEntryTypeNVX' value
+--
+-- -   @flags@ /must/ be a valid combination of
+--     'VkObjectEntryUsageFlagBitsNVX' values
+--
+-- -   @flags@ /must/ not be @0@
+--
+-- -   @pipelineLayout@ /must/ be a valid @VkPipelineLayout@ handle
+--
+-- -   @stageFlags@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Core10.Pipeline.VkShaderStageFlagBits' values
+--
+-- -   @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"
+  vkType :: VkObjectEntryTypeNVX
+  , -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "vkFlags"
+  vkFlags :: VkObjectEntryUsageFlagsNVX
+  , -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "vkPipelineLayout"
+  vkPipelineLayout :: VkPipelineLayout
+  , -- No documentation found for Nested "VkObjectTablePushConstantEntryNVX" "vkStageFlags"
+  vkStageFlags :: VkShaderStageFlags
+  }
+  deriving (Eq, Show)
+
+instance Storable VkObjectTablePushConstantEntryNVX where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkObjectTablePushConstantEntryNVX <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 4)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkType (poked :: VkObjectTablePushConstantEntryNVX))
+                *> poke (ptr `plusPtr` 4) (vkFlags (poked :: VkObjectTablePushConstantEntryNVX))
+                *> poke (ptr `plusPtr` 8) (vkPipelineLayout (poked :: VkObjectTablePushConstantEntryNVX))
+                *> poke (ptr `plusPtr` 16) (vkStageFlags (poked :: VkObjectTablePushConstantEntryNVX))
+-- | VkIndirectCommandsLayoutUsageFlagsNVX - Bitmask of
+-- VkIndirectCommandsLayoutUsageFlagBitsNVX
+--
+-- = Description
+-- #_description#
+--
+-- @VkIndirectCommandsLayoutUsageFlagsNVX@ is a bitmask type for setting a
+-- mask of zero or more 'VkIndirectCommandsLayoutUsageFlagBitsNVX'.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkIndirectCommandsLayoutCreateInfoNVX',
+-- 'VkIndirectCommandsLayoutUsageFlagBitsNVX'
+type VkIndirectCommandsLayoutUsageFlagsNVX = VkIndirectCommandsLayoutUsageFlagBitsNVX
+-- | 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',
+-- 'VkObjectTableIndexBufferEntryNVX', 'VkObjectTablePipelineEntryNVX',
+-- 'VkObjectTablePushConstantEntryNVX', 'VkObjectTableVertexBufferEntryNVX'
+type VkObjectEntryUsageFlagsNVX = VkObjectEntryUsageFlagBitsNVX
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NVX_multiview_per_view_attributes.hs
@@ -0,0 +1,102 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
+  ( pattern VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX
+  , pattern VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX
+  , pattern VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX
+  , pattern VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION
+  , pattern VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME
+  , VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Pass
+  ( VkSubpassDescriptionFlagBits(..)
+  )
+
+
+-- 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"
+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"
+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"
+pattern VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION :: Integral a => a
+pattern VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME"
+pattern VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NVX_MULTIVIEW_PER_VIEW_ATTRIBUTES_EXTENSION_NAME = "VK_NVX_multiview_per_view_attributes"
+-- | VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX - Structure
+-- 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
+--     than the X component.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX@
+--
+-- If the @VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX@
+-- 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
+-- #_see_also#
+--
+-- @VkBool32@, 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX = VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
+  { -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX" "vkPerViewPositionAllComponents"
+  vkPerViewPositionAllComponents :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX <$> peek (ptr `plusPtr` 0)
+                                                                     <*> peek (ptr `plusPtr` 8)
+                                                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX))
+                *> poke (ptr `plusPtr` 16) (vkPerViewPositionAllComponents (poked :: VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX))
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_clip_space_w_scaling.hs
@@ -0,0 +1,211 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling
+  ( pattern VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV
+  , pattern VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION
+  , pattern VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME
+  , vkCmdSetViewportWScalingNV
+  , VkViewportWScalingNV(..)
+  , VkPipelineViewportWScalingStateCreateInfoNV(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkDynamicState(..)
+  )
+import Graphics.Vulkan.Core10.Queue
+  ( VkCommandBuffer
+  )
+
+
+-- No documentation found for Nested "VkDynamicState" "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV"
+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"
+pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV = VkStructureType 1000087000
+-- No documentation found for TopLevel "VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION"
+pattern VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION :: Integral a => a
+pattern VK_NV_CLIP_SPACE_W_SCALING_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME"
+pattern VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_CLIP_SPACE_W_SCALING_EXTENSION_NAME = "VK_NV_clip_space_w_scaling"
+-- | vkCmdSetViewportWScalingNV - Set the viewport W scaling 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.
+--
+-- -   @pViewportWScalings@ is a pointer to an array of
+--     '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,
+-- for i in [0, @viewportCount@).
+--
+-- == Valid Usage
+--
+-- -   The bound graphics pipeline /must/ have been created with the
+--     @VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV@ dynamic state enabled
+--
+-- -   @firstViewport@ /must/ be less than
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@maxViewports@
+--
+-- -   The sum of @firstViewport@ and @viewportCount@ /must/ be between @1@
+--     and
+--     'Graphics.Vulkan.Core10.DeviceInitialization.VkPhysicalDeviceLimits'::@maxViewports@,
+--     inclusive
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @commandBuffer@ /must/ be a valid @VkCommandBuffer@ handle
+--
+-- -   @pViewportWScalings@ /must/ be a valid pointer to an array of
+--     @viewportCount@ @VkViewportWScalingNV@ 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', '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"
+  vkXcoeff :: CFloat
+  , -- No documentation found for Nested "VkViewportWScalingNV" "vkYcoeff"
+  vkYcoeff :: CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkViewportWScalingNV where
+  sizeOf ~_ = 8
+  alignment ~_ = 4
+  peek ptr = VkViewportWScalingNV <$> peek (ptr `plusPtr` 0)
+                                  <*> peek (ptr `plusPtr` 4)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkXcoeff (poked :: VkViewportWScalingNV))
+                *> poke (ptr `plusPtr` 4) (vkYcoeff (poked :: VkViewportWScalingNV))
+-- | VkPipelineViewportWScalingStateCreateInfoNV - Structure specifying
+-- parameters of a newly created pipeline viewport W scaling state
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkViewportWScalingEnable"
+  vkViewportWScalingEnable :: VkBool32
+  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkViewportCount"
+  vkViewportCount :: Word32
+  , -- No documentation found for Nested "VkPipelineViewportWScalingStateCreateInfoNV" "vkPViewportWScalings"
+  vkPViewportWScalings :: Ptr VkViewportWScalingNV
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineViewportWScalingStateCreateInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineViewportWScalingStateCreateInfoNV <$> 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 :: VkPipelineViewportWScalingStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineViewportWScalingStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkViewportWScalingEnable (poked :: VkPipelineViewportWScalingStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 20) (vkViewportCount (poked :: VkPipelineViewportWScalingStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkPViewportWScalings (poked :: VkPipelineViewportWScalingStateCreateInfoNV))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_dedicated_allocation.hs
@@ -0,0 +1,210 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation
+  ( pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV
+  , pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV
+  , pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV
+  , pattern VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION
+  , pattern VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME
+  , VkDedicatedAllocationImageCreateInfoNV(..)
+  , VkDedicatedAllocationBufferCreateInfoNV(..)
+  , VkDedicatedAllocationMemoryAllocateInfoNV(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.MemoryManagement
+  ( VkBuffer
+  , VkImage
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = VkStructureType 1000026000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV = VkStructureType 1000026001
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV = VkStructureType 1000026002
+-- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION"
+pattern VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION :: Integral a => a
+pattern VK_NV_DEDICATED_ALLOCATION_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME"
+pattern VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_DEDICATED_ALLOCATION_EXTENSION_NAME = "VK_NV_dedicated_allocation"
+-- | VkDedicatedAllocationImageCreateInfoNV - Specify that an image is bound
+-- to a dedicated memory resource
+--
+-- = Description
+-- #_description#
+--
+-- __Note__
+--
+-- Using a dedicated allocation for color and depth\/stencil attachments or
+-- other large images /may/ improve performance on some devices.
+--
+-- == Valid Usage
+--
+-- -   If @dedicatedAllocation@ is @VK_TRUE@, @VkImageCreateInfo@::@flags@
+--     /must/ not include @VK_IMAGE_CREATE_SPARSE_BINDING_BIT@,
+--     @VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT@, or
+--     @VK_IMAGE_CREATE_SPARSE_ALIASED_BIT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDedicatedAllocationImageCreateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDedicatedAllocationImageCreateInfoNV" "vkDedicatedAllocation"
+  vkDedicatedAllocation :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDedicatedAllocationImageCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDedicatedAllocationImageCreateInfoNV <$> peek (ptr `plusPtr` 0)
+                                                    <*> peek (ptr `plusPtr` 8)
+                                                    <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDedicatedAllocationImageCreateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDedicatedAllocationImageCreateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkDedicatedAllocation (poked :: VkDedicatedAllocationImageCreateInfoNV))
+-- | 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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDedicatedAllocationBufferCreateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDedicatedAllocationBufferCreateInfoNV" "vkDedicatedAllocation"
+  vkDedicatedAllocation :: VkBool32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDedicatedAllocationBufferCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkDedicatedAllocationBufferCreateInfoNV <$> peek (ptr `plusPtr` 0)
+                                                     <*> peek (ptr `plusPtr` 8)
+                                                     <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDedicatedAllocationBufferCreateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDedicatedAllocationBufferCreateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkDedicatedAllocation (poked :: VkDedicatedAllocationBufferCreateInfoNV))
+-- | VkDedicatedAllocationMemoryAllocateInfoNV - Specify a dedicated memory
+-- allocation resource
+--
+-- = Description
+-- #_description#
+--
+-- == 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',
+--     the image /must/ have been created with
+--     @VkDedicatedAllocationImageCreateInfoNV@::@dedicatedAllocation@
+--     equal to @VK_TRUE@
+--
+-- -   If @buffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE', the buffer /must/
+--     have been created with
+--     @VkDedicatedAllocationBufferCreateInfoNV@::@dedicatedAllocation@
+--     equal to @VK_TRUE@
+--
+-- -   If @image@ is not 'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @VkMemoryAllocateInfo@::@allocationSize@ /must/ equal the
+--     @VkMemoryRequirements@::@size@ of the image
+--
+-- -   If @buffer@ is not
+--     'Graphics.Vulkan.Core10.Constants.VK_NULL_HANDLE',
+--     @VkMemoryAllocateInfo@::@allocationSize@ /must/ equal the
+--     @VkMemoryRequirements@::@size@ of the buffer
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV@
+--
+-- -   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
+-- #_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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkDedicatedAllocationMemoryAllocateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkDedicatedAllocationMemoryAllocateInfoNV" "vkImage"
+  vkImage :: VkImage
+  , -- No documentation found for Nested "VkDedicatedAllocationMemoryAllocateInfoNV" "vkBuffer"
+  vkBuffer :: VkBuffer
+  }
+  deriving (Eq, Show)
+
+instance Storable VkDedicatedAllocationMemoryAllocateInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkDedicatedAllocationMemoryAllocateInfoNV <$> peek (ptr `plusPtr` 0)
+                                                       <*> peek (ptr `plusPtr` 8)
+                                                       <*> peek (ptr `plusPtr` 16)
+                                                       <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDedicatedAllocationMemoryAllocateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDedicatedAllocationMemoryAllocateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkImage (poked :: VkDedicatedAllocationMemoryAllocateInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkBuffer (poked :: VkDedicatedAllocationMemoryAllocateInfoNV))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory.hs
@@ -0,0 +1,125 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_external_memory
+  ( pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV
+  , pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV
+  , pattern VK_NV_EXTERNAL_MEMORY_SPEC_VERSION
+  , pattern VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME
+  , VkExternalMemoryImageCreateInfoNV(..)
+  , VkExportMemoryAllocateInfoNV(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagsNV
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = VkStructureType 1000056000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV = VkStructureType 1000056001
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_SPEC_VERSION"
+pattern VK_NV_EXTERNAL_MEMORY_SPEC_VERSION :: Integral a => a
+pattern VK_NV_EXTERNAL_MEMORY_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME"
+pattern VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_EXTERNAL_MEMORY_EXTENSION_NAME = "VK_NV_external_memory"
+-- | VkExternalMemoryImageCreateInfoNV - Specify that an image may be backed
+-- by external memory
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV@
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExternalMemoryImageCreateInfoNV" "vkHandleTypes"
+  vkHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalMemoryImageCreateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExternalMemoryImageCreateInfoNV <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 8)
+                                               <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExternalMemoryImageCreateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExternalMemoryImageCreateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExternalMemoryImageCreateInfoNV))
+-- | 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@
+--
+-- -   @handleTypes@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportMemoryAllocateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportMemoryAllocateInfoNV" "vkHandleTypes"
+  vkHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportMemoryAllocateInfoNV where
+  sizeOf ~_ = 24
+  alignment ~_ = 8
+  peek ptr = VkExportMemoryAllocateInfoNV <$> peek (ptr `plusPtr` 0)
+                                          <*> peek (ptr `plusPtr` 8)
+                                          <*> peek (ptr `plusPtr` 16)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportMemoryAllocateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportMemoryAllocateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkHandleTypes (poked :: VkExportMemoryAllocateInfoNV))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_capabilities.hs
@@ -0,0 +1,352 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBitsNV(..)
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV
+  , pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV
+  , VkExternalMemoryFeatureFlagBitsNV(..)
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV
+  , pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV
+  , pattern VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION
+  , pattern VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME
+  , vkGetPhysicalDeviceExternalImageFormatPropertiesNV
+  , VkExternalImageFormatPropertiesNV(..)
+  , VkExternalMemoryHandleTypeFlagsNV
+  , VkExternalMemoryFeatureFlagsNV
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkFormat(..)
+  , VkResult(..)
+  , VkFlags
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkImageFormatProperties(..)
+  , VkImageCreateFlagBits(..)
+  , VkImageUsageFlagBits(..)
+  , VkImageCreateFlags
+  , VkImageUsageFlags
+  , VkImageTiling(..)
+  , VkImageType(..)
+  , VkPhysicalDevice
+  )
+
+
+-- ** VkExternalMemoryHandleTypeFlagBitsNV
+
+-- | VkExternalMemoryHandleTypeFlagBitsNV - Bitmask specifying external
+-- memory handle types
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkExternalMemoryHandleTypeFlagsNV'
+newtype VkExternalMemoryHandleTypeFlagBitsNV = VkExternalMemoryHandleTypeFlagBitsNV VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalMemoryHandleTypeFlagBitsNV where
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV"
+  showsPrec _ VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = showString "VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV"
+  showsPrec p (VkExternalMemoryHandleTypeFlagBitsNV x) = showParen (p >= 11) (showString "VkExternalMemoryHandleTypeFlagBitsNV " . showsPrec 11 x)
+
+instance Read VkExternalMemoryHandleTypeFlagBitsNV where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV",     pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV", pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV",      pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV)
+                             , ("VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV",  pure VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalMemoryHandleTypeFlagBitsNV")
+                        v <- step readPrec
+                        pure (VkExternalMemoryHandleTypeFlagBitsNV v)
+                        )
+                    )
+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV@ specifies a handle
+-- to memory returned by
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.vkGetMemoryWin32HandleNV',
+-- or one duplicated from such a handle using @DuplicateHandle()@.
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV :: VkExternalMemoryHandleTypeFlagBitsNV
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT_NV = VkExternalMemoryHandleTypeFlagBitsNV 0x00000001
+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV@ specifies a
+-- handle to memory returned by
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.vkGetMemoryWin32HandleNV'.
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV :: VkExternalMemoryHandleTypeFlagBitsNV
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_KMT_BIT_NV = VkExternalMemoryHandleTypeFlagBitsNV 0x00000002
+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV@ specifies a valid NT
+-- handle to memory returned by @IDXGIResource1::CreateSharedHandle()@, or
+-- a handle duplicated from such a handle using @DuplicateHandle()@.
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV :: VkExternalMemoryHandleTypeFlagBitsNV
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_BIT_NV = VkExternalMemoryHandleTypeFlagBitsNV 0x00000004
+
+-- | @VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV@ specifies a
+-- handle to memory returned by @IDXGIResource::GetSharedHandle()@.
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV :: VkExternalMemoryHandleTypeFlagBitsNV
+pattern VK_EXTERNAL_MEMORY_HANDLE_TYPE_D3D11_IMAGE_KMT_BIT_NV = VkExternalMemoryHandleTypeFlagBitsNV 0x00000008
+-- ** VkExternalMemoryFeatureFlagBitsNV
+
+-- | VkExternalMemoryFeatureFlagBitsNV - Bitmask specifying external memory
+-- features
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkExternalImageFormatPropertiesNV', 'VkExternalMemoryFeatureFlagsNV',
+-- 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'
+newtype VkExternalMemoryFeatureFlagBitsNV = VkExternalMemoryFeatureFlagBitsNV VkFlags
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkExternalMemoryFeatureFlagBitsNV where
+  showsPrec _ VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = showString "VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV"
+  showsPrec _ VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = showString "VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV"
+  showsPrec _ VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = showString "VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV"
+  showsPrec p (VkExternalMemoryFeatureFlagBitsNV x) = showParen (p >= 11) (showString "VkExternalMemoryFeatureFlagBitsNV " . showsPrec 11 x)
+
+instance Read VkExternalMemoryFeatureFlagBitsNV where
+  readPrec = parens ( choose [ ("VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV", pure VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV)
+                             , ("VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV",     pure VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV)
+                             , ("VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV",     pure VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkExternalMemoryFeatureFlagBitsNV")
+                        v <- step readPrec
+                        pure (VkExternalMemoryFeatureFlagBitsNV v)
+                        )
+                    )
+
+-- | @VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV@ specifies that
+-- external memory of the specified type /must/ be created as a dedicated
+-- allocation when used in the manner specified.
+pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV :: VkExternalMemoryFeatureFlagBitsNV
+pattern VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT_NV = VkExternalMemoryFeatureFlagBitsNV 0x00000001
+
+-- | @VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV@ specifies that the
+-- implementation supports exporting handles of the specified type.
+pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV :: VkExternalMemoryFeatureFlagBitsNV
+pattern VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_NV = VkExternalMemoryFeatureFlagBitsNV 0x00000002
+
+-- | @VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV@ specifies that the
+-- implementation supports importing handles of the specified type.
+pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV :: VkExternalMemoryFeatureFlagBitsNV
+pattern VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT_NV = VkExternalMemoryFeatureFlagBitsNV 0x00000004
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION"
+pattern VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION :: Integral a => a
+pattern VK_NV_EXTERNAL_MEMORY_CAPABILITIES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME"
+pattern VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_EXTERNAL_MEMORY_CAPABILITIES_EXTENSION_NAME = "VK_NV_external_memory_capabilities"
+-- | vkGetPhysicalDeviceExternalImageFormatPropertiesNV - determine image
+-- capabilities compatible with external memory handle types
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @physicalDevice@ is the physical device from which to query the
+--     image capabilities
+--
+-- -   @format@ is the image format, corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@format@.
+--
+-- -   @type@ is the image type, corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@imageType@.
+--
+-- -   @tiling@ is the image tiling, corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@tiling@.
+--
+-- -   @usage@ is the intended usage of the image, corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@usage@.
+--
+-- -   @flags@ is a bitmask describing additional parameters of the image,
+--     corresponding to
+--     'Graphics.Vulkan.Core10.Image.VkImageCreateInfo'::@flags@.
+--
+-- -   @externalHandleType@ is either one of the bits from
+--     'VkExternalMemoryHandleTypeFlagBitsNV', or 0.
+--
+-- -   @pExternalImageFormatProperties@ points to an instance of the
+--     'VkExternalImageFormatPropertiesNV' structure in which capabilities
+--     are returned.
+--
+-- = Description
+-- #_description#
+--
+-- If @externalHandleType@ is 0,
+-- @pExternalImageFormatProperties@::imageFormatProperties will return the
+-- same values as a call to
+-- 'Graphics.Vulkan.Core10.DeviceInitialization.vkGetPhysicalDeviceImageFormatProperties',
+-- and the other members of @pExternalImageFormatProperties@ will all be 0.
+-- Otherwise, they are filled in as described for
+-- 'VkExternalImageFormatPropertiesNV'.
+--
+-- == 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
+--     '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
+--
+-- -   @externalHandleType@ /must/ be a valid combination of
+--     'VkExternalMemoryHandleTypeFlagBitsNV' values
+--
+-- -   @pExternalImageFormatProperties@ /must/ be a valid pointer to a
+--     @VkExternalImageFormatPropertiesNV@ 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#
+--
+-- 'VkExternalImageFormatPropertiesNV',
+-- 'VkExternalMemoryHandleTypeFlagsNV',
+-- '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.DeviceInitialization.VkPhysicalDevice'
+foreign import ccall "vkGetPhysicalDeviceExternalImageFormatPropertiesNV" vkGetPhysicalDeviceExternalImageFormatPropertiesNV :: ("physicalDevice" ::: VkPhysicalDevice) -> ("format" ::: VkFormat) -> ("type" ::: VkImageType) -> ("tiling" ::: VkImageTiling) -> ("usage" ::: VkImageUsageFlags) -> ("flags" ::: VkImageCreateFlags) -> ("externalHandleType" ::: VkExternalMemoryHandleTypeFlagsNV) -> ("pExternalImageFormatProperties" ::: Ptr VkExternalImageFormatPropertiesNV) -> IO VkResult
+-- | 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"
+  vkImageFormatProperties :: VkImageFormatProperties
+  , -- No documentation found for Nested "VkExternalImageFormatPropertiesNV" "vkExternalMemoryFeatures"
+  vkExternalMemoryFeatures :: VkExternalMemoryFeatureFlagsNV
+  , -- No documentation found for Nested "VkExternalImageFormatPropertiesNV" "vkExportFromImportedHandleTypes"
+  vkExportFromImportedHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
+  , -- No documentation found for Nested "VkExternalImageFormatPropertiesNV" "vkCompatibleHandleTypes"
+  vkCompatibleHandleTypes :: VkExternalMemoryHandleTypeFlagsNV
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExternalImageFormatPropertiesNV where
+  sizeOf ~_ = 48
+  alignment ~_ = 8
+  peek ptr = VkExternalImageFormatPropertiesNV <$> peek (ptr `plusPtr` 0)
+                                               <*> peek (ptr `plusPtr` 32)
+                                               <*> peek (ptr `plusPtr` 36)
+                                               <*> peek (ptr `plusPtr` 40)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkImageFormatProperties (poked :: VkExternalImageFormatPropertiesNV))
+                *> poke (ptr `plusPtr` 32) (vkExternalMemoryFeatures (poked :: VkExternalImageFormatPropertiesNV))
+                *> poke (ptr `plusPtr` 36) (vkExportFromImportedHandleTypes (poked :: VkExternalImageFormatPropertiesNV))
+                *> poke (ptr `plusPtr` 40) (vkCompatibleHandleTypes (poked :: VkExternalImageFormatPropertiesNV))
+-- | VkExternalMemoryHandleTypeFlagsNV - Bitmask of
+-- 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',
+-- 'VkExternalMemoryHandleTypeFlagBitsNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExternalMemoryImageCreateInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.VkImportMemoryWin32HandleInfoNV',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_win32.vkGetMemoryWin32HandleNV',
+-- 'vkGetPhysicalDeviceExternalImageFormatPropertiesNV'
+type VkExternalMemoryHandleTypeFlagsNV = VkExternalMemoryHandleTypeFlagBitsNV
+-- | VkExternalMemoryFeatureFlagsNV - Bitmask of
+-- 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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_external_memory_win32.hs
@@ -0,0 +1,241 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DataKinds #-}
+{-# language TypeOperators #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
+  ( HANDLE
+  , SECURITY_ATTRIBUTES
+  , DWORD
+  , pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV
+  , pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV
+  , pattern VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION
+  , pattern VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME
+  , vkGetMemoryWin32HandleNV
+  , VkImportMemoryWin32HandleInfoNV(..)
+  , VkExportMemoryWin32HandleInfoNV(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import Graphics.Vulkan.NamedType
+  ( (:::)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  , VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.DeviceInitialization
+  ( VkDevice
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+import Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
+  ( VkExternalMemoryHandleTypeFlagBitsNV(..)
+  , VkExternalMemoryHandleTypeFlagsNV
+  )
+
+
+-- No documentation found for TopLevel "HANDLE"
+type HANDLE = Ptr ()
+-- | Opaque data
+data SECURITY_ATTRIBUTES
+-- No documentation found for TopLevel "DWORD"
+type DWORD = Word32
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV = VkStructureType 1000057000
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV = VkStructureType 1000057001
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION"
+pattern VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION :: Integral a => a
+pattern VK_NV_EXTERNAL_MEMORY_WIN32_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME"
+pattern VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_EXTERNAL_MEMORY_WIN32_EXTENSION_NAME = "VK_NV_external_memory_win32"
+-- | vkGetMemoryWin32HandleNV - retrieve Win32 handle to a device memory
+-- object
+--
+-- = Parameters
+-- #_parameters#
+--
+-- -   @device@ is the logical device that owns the memory.
+--
+-- -   @memory@ is the @VkDeviceMemory@ object.
+--
+-- -   @handleType@ is a bitmask of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+--     containing a single bit specifying the type of handle requested.
+--
+-- -   @handle@ points to a Windows @HANDLE@ in which the handle is
+--     returned.
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ be a flag specified in
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory.VkExportMemoryAllocateInfoNV'::@handleTypes@
+--     when allocating @memory@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @device@ /must/ be a valid @VkDevice@ handle
+--
+-- -   @memory@ /must/ be a valid @VkDeviceMemory@ handle
+--
+-- -   @handleType@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+--     values
+--
+-- -   @handleType@ /must/ not be @0@
+--
+-- -   @pHandle@ /must/ be a valid pointer to a @HANDLE@ value
+--
+-- -   @memory@ /must/ have been created, allocated, or retrieved from
+--     @device@
+--
+-- == Return Codes
+--
+-- [<#fundamentals-successcodes Success>]
+--     -   @VK_SUCCESS@
+--
+-- [<#fundamentals-errorcodes Failure>]
+--     -   @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',
+-- 'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagsNV'
+foreign import ccall "vkGetMemoryWin32HandleNV" vkGetMemoryWin32HandleNV :: ("device" ::: VkDevice) -> ("memory" ::: VkDeviceMemory) -> ("handleType" ::: VkExternalMemoryHandleTypeFlagsNV) -> ("pHandle" ::: Ptr HANDLE) -> IO VkResult
+-- | VkImportMemoryWin32HandleInfoNV - import Win32 memory created on the
+-- 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
+-- chained from.
+--
+-- == Valid Usage
+--
+-- -   @handleType@ /must/ not have more than one bit set.
+--
+-- -   @handle@ /must/ be a valid handle to memory, obtained as specified
+--     by @handleType@.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV@
+--
+-- -   @handleType@ /must/ be a valid combination of
+--     'Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities.VkExternalMemoryHandleTypeFlagBitsNV'
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoNV" "vkHandleType"
+  vkHandleType :: VkExternalMemoryHandleTypeFlagsNV
+  , -- No documentation found for Nested "VkImportMemoryWin32HandleInfoNV" "vkHandle"
+  vkHandle :: HANDLE
+  }
+  deriving (Eq, Show)
+
+instance Storable VkImportMemoryWin32HandleInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkImportMemoryWin32HandleInfoNV <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+                                             <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImportMemoryWin32HandleInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImportMemoryWin32HandleInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkHandleType (poked :: VkImportMemoryWin32HandleInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkHandle (poked :: VkImportMemoryWin32HandleInfoNV))
+-- | VkExportMemoryWin32HandleInfoNV - specify security attributes and access
+-- 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
+-- created by the application will not inherit the handle, as described in
+-- the MSDN documentation for “Synchronization Object Security and Access
+-- Rights”[1]. Further, if the structure is not present, the access rights
+-- will be
+--
+-- > DXGI_SHARED_RESOURCE_READ | DXGI_SHARED_RESOURCE_WRITE
+--
+-- [1]
+-- <https://msdn.microsoft.com/en-us/library/windows/desktop/ms686670.aspx>
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV@
+--
+-- -   If @pAttributes@ is not @NULL@, @pAttributes@ /must/ be a valid
+--     pointer to a valid @SECURITY_ATTRIBUTES@ value
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'Graphics.Vulkan.Core10.Core.VkStructureType'
+data VkExportMemoryWin32HandleInfoNV = VkExportMemoryWin32HandleInfoNV
+  { -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkSType"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkPAttributes"
+  vkPAttributes :: Ptr SECURITY_ATTRIBUTES
+  , -- No documentation found for Nested "VkExportMemoryWin32HandleInfoNV" "vkDwAccess"
+  vkDwAccess :: DWORD
+  }
+  deriving (Eq, Show)
+
+instance Storable VkExportMemoryWin32HandleInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkExportMemoryWin32HandleInfoNV <$> peek (ptr `plusPtr` 0)
+                                             <*> peek (ptr `plusPtr` 8)
+                                             <*> peek (ptr `plusPtr` 16)
+                                             <*> peek (ptr `plusPtr` 24)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkExportMemoryWin32HandleInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkExportMemoryWin32HandleInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkPAttributes (poked :: VkExportMemoryWin32HandleInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkDwAccess (poked :: VkExportMemoryWin32HandleInfoNV))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_fill_rectangle.hs b/src/Graphics/Vulkan/Extensions/VK_NV_fill_rectangle.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_fill_rectangle.hs
@@ -0,0 +1,30 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_fill_rectangle
+  ( pattern VK_POLYGON_MODE_FILL_RECTANGLE_NV
+  , pattern VK_NV_FILL_RECTANGLE_SPEC_VERSION
+  , pattern VK_NV_FILL_RECTANGLE_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Core10.Pipeline
+  ( VkPolygonMode(..)
+  )
+
+
+-- No documentation found for Nested "VkPolygonMode" "VK_POLYGON_MODE_FILL_RECTANGLE_NV"
+pattern VK_POLYGON_MODE_FILL_RECTANGLE_NV :: VkPolygonMode
+pattern VK_POLYGON_MODE_FILL_RECTANGLE_NV = VkPolygonMode 1000153000
+-- No documentation found for TopLevel "VK_NV_FILL_RECTANGLE_SPEC_VERSION"
+pattern VK_NV_FILL_RECTANGLE_SPEC_VERSION :: Integral a => a
+pattern VK_NV_FILL_RECTANGLE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_FILL_RECTANGLE_EXTENSION_NAME"
+pattern VK_NV_FILL_RECTANGLE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_FILL_RECTANGLE_EXTENSION_NAME = "VK_NV_fill_rectangle"
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
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_fragment_coverage_to_color.hs
@@ -0,0 +1,180 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color
+  ( VkPipelineCoverageToColorStateCreateFlagsNV(..)
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV
+  , pattern VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION
+  , pattern VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME
+  , VkPipelineCoverageToColorStateCreateInfoNV(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+
+
+-- ** VkPipelineCoverageToColorStateCreateFlagsNV
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineCoverageToColorStateCreateFlagsNV where
+  
+  showsPrec p (VkPipelineCoverageToColorStateCreateFlagsNV x) = showParen (p >= 11) (showString "VkPipelineCoverageToColorStateCreateFlagsNV " . showsPrec 11 x)
+
+instance Read VkPipelineCoverageToColorStateCreateFlagsNV where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineCoverageToColorStateCreateFlagsNV")
+                        v <- step readPrec
+                        pure (VkPipelineCoverageToColorStateCreateFlagsNV v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV = VkStructureType 1000149000
+-- No documentation found for TopLevel "VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION"
+pattern VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION :: Integral a => a
+pattern VK_NV_FRAGMENT_COVERAGE_TO_COLOR_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME"
+pattern VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_FRAGMENT_COVERAGE_TO_COLOR_EXTENSION_NAME = "VK_NV_fragment_coverage_to_color"
+-- | VkPipelineCoverageToColorStateCreateInfoNV - Structure specifying
+-- 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.
+--
+-- 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.
+--
+-- This pipeline stage occurs after sample counting and before blending,
+-- and is always performed after fragment shading regardless of the setting
+-- of @EarlyFragmentTests@.
+--
+-- If @coverageToColorEnable@ is @VK_FALSE@, these operations are skipped.
+-- If this structure is not present, it is as if @coverageToColorEnable@ is
+-- @VK_FALSE@.
+--
+-- == Valid Usage
+--
+-- -   If @coverageToColorEnable@ is @VK_TRUE@, then the render pass
+--     subpass indicated by
+--     'Graphics.Vulkan.Core10.Pipeline.VkGraphicsPipelineCreateInfo'::@renderPass@
+--     and
+--     'Graphics.Vulkan.Core10.Pipeline.VkGraphicsPipelineCreateInfo'::@subpass@
+--     /must/ have a color attachment at the location selected by
+--     @coverageToColorLocation@, with a
+--     'Graphics.Vulkan.Core10.Core.VkFormat' of @VK_FORMAT_R8_UINT@,
+--     @VK_FORMAT_R8_SINT@, @VK_FORMAT_R16_UINT@, @VK_FORMAT_R16_SINT@,
+--     @VK_FORMAT_R32_UINT@, or @VK_FORMAT_R32_SINT@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkFlags"
+  vkFlags :: VkPipelineCoverageToColorStateCreateFlagsNV
+  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkCoverageToColorEnable"
+  vkCoverageToColorEnable :: VkBool32
+  , -- No documentation found for Nested "VkPipelineCoverageToColorStateCreateInfoNV" "vkCoverageToColorLocation"
+  vkCoverageToColorLocation :: Word32
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineCoverageToColorStateCreateInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineCoverageToColorStateCreateInfoNV <$> 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 :: VkPipelineCoverageToColorStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineCoverageToColorStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineCoverageToColorStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 20) (vkCoverageToColorEnable (poked :: VkPipelineCoverageToColorStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkCoverageToColorLocation (poked :: VkPipelineCoverageToColorStateCreateInfoNV))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs b/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_framebuffer_mixed_samples.hs
@@ -0,0 +1,262 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
+  ( VkCoverageModulationModeNV(..)
+  , pattern VK_COVERAGE_MODULATION_MODE_NONE_NV
+  , pattern VK_COVERAGE_MODULATION_MODE_RGB_NV
+  , pattern VK_COVERAGE_MODULATION_MODE_ALPHA_NV
+  , pattern VK_COVERAGE_MODULATION_MODE_RGBA_NV
+  , VkPipelineCoverageModulationStateCreateFlagsNV(..)
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV
+  , pattern VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION
+  , pattern VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME
+  , VkPipelineCoverageModulationStateCreateInfoNV(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.C.Types
+  ( CFloat(..)
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkBool32(..)
+  , VkStructureType(..)
+  , VkFlags
+  )
+
+
+-- ** VkCoverageModulationModeNV
+
+-- | VkCoverageModulationModeNV - Specify the discard rectangle mode
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineCoverageModulationStateCreateInfoNV'
+newtype VkCoverageModulationModeNV = VkCoverageModulationModeNV Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkCoverageModulationModeNV where
+  showsPrec _ VK_COVERAGE_MODULATION_MODE_NONE_NV = showString "VK_COVERAGE_MODULATION_MODE_NONE_NV"
+  showsPrec _ VK_COVERAGE_MODULATION_MODE_RGB_NV = showString "VK_COVERAGE_MODULATION_MODE_RGB_NV"
+  showsPrec _ VK_COVERAGE_MODULATION_MODE_ALPHA_NV = showString "VK_COVERAGE_MODULATION_MODE_ALPHA_NV"
+  showsPrec _ VK_COVERAGE_MODULATION_MODE_RGBA_NV = showString "VK_COVERAGE_MODULATION_MODE_RGBA_NV"
+  showsPrec p (VkCoverageModulationModeNV x) = showParen (p >= 11) (showString "VkCoverageModulationModeNV " . showsPrec 11 x)
+
+instance Read VkCoverageModulationModeNV where
+  readPrec = parens ( choose [ ("VK_COVERAGE_MODULATION_MODE_NONE_NV",  pure VK_COVERAGE_MODULATION_MODE_NONE_NV)
+                             , ("VK_COVERAGE_MODULATION_MODE_RGB_NV",   pure VK_COVERAGE_MODULATION_MODE_RGB_NV)
+                             , ("VK_COVERAGE_MODULATION_MODE_ALPHA_NV", pure VK_COVERAGE_MODULATION_MODE_ALPHA_NV)
+                             , ("VK_COVERAGE_MODULATION_MODE_RGBA_NV",  pure VK_COVERAGE_MODULATION_MODE_RGBA_NV)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkCoverageModulationModeNV")
+                        v <- step readPrec
+                        pure (VkCoverageModulationModeNV v)
+                        )
+                    )
+
+-- | @VK_COVERAGE_MODULATION_MODE_NONE_NV@ specifies that no components are
+-- multiplied by the modulation factor.
+pattern VK_COVERAGE_MODULATION_MODE_NONE_NV :: VkCoverageModulationModeNV
+pattern VK_COVERAGE_MODULATION_MODE_NONE_NV = VkCoverageModulationModeNV 0
+
+-- | @VK_COVERAGE_MODULATION_MODE_RGB_NV@ specifies that the red, green, and
+-- blue components are multiplied by the modulation factor.
+pattern VK_COVERAGE_MODULATION_MODE_RGB_NV :: VkCoverageModulationModeNV
+pattern VK_COVERAGE_MODULATION_MODE_RGB_NV = VkCoverageModulationModeNV 1
+
+-- | @VK_COVERAGE_MODULATION_MODE_ALPHA_NV@ specifies that the alpha
+-- component is multiplied by the modulation factor.
+pattern VK_COVERAGE_MODULATION_MODE_ALPHA_NV :: VkCoverageModulationModeNV
+pattern VK_COVERAGE_MODULATION_MODE_ALPHA_NV = VkCoverageModulationModeNV 2
+
+-- | @VK_COVERAGE_MODULATION_MODE_RGBA_NV@ specifies that all components are
+-- multiplied by the modulation factor.
+pattern VK_COVERAGE_MODULATION_MODE_RGBA_NV :: VkCoverageModulationModeNV
+pattern VK_COVERAGE_MODULATION_MODE_RGBA_NV = VkCoverageModulationModeNV 3
+-- ** VkPipelineCoverageModulationStateCreateFlagsNV
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineCoverageModulationStateCreateFlagsNV where
+  
+  showsPrec p (VkPipelineCoverageModulationStateCreateFlagsNV x) = showParen (p >= 11) (showString "VkPipelineCoverageModulationStateCreateFlagsNV " . showsPrec 11 x)
+
+instance Read VkPipelineCoverageModulationStateCreateFlagsNV where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineCoverageModulationStateCreateFlagsNV")
+                        v <- step readPrec
+                        pure (VkPipelineCoverageModulationStateCreateFlagsNV v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV = VkStructureType 1000152000
+-- No documentation found for TopLevel "VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION"
+pattern VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION :: Integral a => a
+pattern VK_NV_FRAMEBUFFER_MIXED_SAMPLES_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME"
+pattern VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_FRAMEBUFFER_MIXED_SAMPLES_EXTENSION_NAME = "VK_NV_framebuffer_mixed_samples"
+-- | VkPipelineCoverageModulationStateCreateInfoNV - Structure specifying
+-- 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
+-- divided by the number of associated bits to produce a modulation factor
+-- R in the range (0,1] (a value of zero would have been killed due to a
+-- color coverage of 0). Specifically:
+--
+-- -   N = value of @rasterizationSamples@
+--
+-- -   M = value of
+--     'Graphics.Vulkan.Core10.Pass.VkAttachmentDescription'::@samples@ for
+--     any color attachments
+--
+-- -   R = popcount(associated coverage bits) \/ (N \/ M)
+--
+-- If @coverageModulationTableEnable@ is @VK_TRUE@, the value R is computed
+-- using a programmable lookup table. The lookup table has N \/ M elements,
+-- and the element of the table is selected by:
+--
+-- -   R = @pCoverageModulationTable@[popcount(associated coverage bits)-1]
+--
+-- Note that the table does not have an entry for popcount(associated
+-- coverage bits) = 0, because such samples would have been killed.
+--
+-- The values of @pCoverageModulationTable@ /may/ be rounded to an
+-- implementation-dependent precision, which is at least as fine as 1 \/ N,
+-- and clamped to [0,1].
+--
+-- For each color attachment with a floating point or normalized color
+-- format, each fragment output color value is replicated to M values which
+-- /can/ each be modulated (multiplied) by that color sample’s associated
+-- value of R. Which components are modulated is controlled by
+-- @coverageModulationMode@.
+--
+-- If this structure is not present, it is as if coverageModulationMode is
+-- @VK_COVERAGE_MODULATION_MODE_NONE_NV@.
+--
+-- == Valid Usage
+--
+-- -   If @coverageModulationTableEnable@ is @VK_TRUE@,
+--     @coverageModulationTableCount@ /must/ be equal to the number of
+--     rasterization samples divided by the number of color samples in the
+--     subpass.
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @coverageModulationMode@ /must/ be a valid
+--     'VkCoverageModulationModeNV' value
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkFlags"
+  vkFlags :: VkPipelineCoverageModulationStateCreateFlagsNV
+  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkCoverageModulationMode"
+  vkCoverageModulationMode :: VkCoverageModulationModeNV
+  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkCoverageModulationTableEnable"
+  vkCoverageModulationTableEnable :: VkBool32
+  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkCoverageModulationTableCount"
+  vkCoverageModulationTableCount :: Word32
+  , -- No documentation found for Nested "VkPipelineCoverageModulationStateCreateInfoNV" "vkPCoverageModulationTable"
+  vkPCoverageModulationTable :: Ptr CFloat
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineCoverageModulationStateCreateInfoNV where
+  sizeOf ~_ = 40
+  alignment ~_ = 8
+  peek ptr = VkPipelineCoverageModulationStateCreateInfoNV <$> 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)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineCoverageModulationStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineCoverageModulationStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineCoverageModulationStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 20) (vkCoverageModulationMode (poked :: VkPipelineCoverageModulationStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkCoverageModulationTableEnable (poked :: VkPipelineCoverageModulationStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 28) (vkCoverageModulationTableCount (poked :: VkPipelineCoverageModulationStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 32) (vkPCoverageModulationTable (poked :: VkPipelineCoverageModulationStateCreateInfoNV))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs b/src/Graphics/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_geometry_shader_passthrough.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough
+  ( pattern VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION
+  , pattern VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION"
+pattern VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION :: Integral a => a
+pattern VK_NV_GEOMETRY_SHADER_PASSTHROUGH_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME"
+pattern VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_GEOMETRY_SHADER_PASSTHROUGH_EXTENSION_NAME = "VK_NV_geometry_shader_passthrough"
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_glsl_shader.hs b/src/Graphics/Vulkan/Extensions/VK_NV_glsl_shader.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_glsl_shader.hs
@@ -0,0 +1,30 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_glsl_shader
+  ( pattern VK_ERROR_INVALID_SHADER_NV
+  , pattern VK_NV_GLSL_SHADER_SPEC_VERSION
+  , pattern VK_NV_GLSL_SHADER_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkResult(..)
+  )
+
+
+-- No documentation found for Nested "VkResult" "VK_ERROR_INVALID_SHADER_NV"
+pattern VK_ERROR_INVALID_SHADER_NV :: VkResult
+pattern VK_ERROR_INVALID_SHADER_NV = VkResult (-1000012000)
+-- No documentation found for TopLevel "VK_NV_GLSL_SHADER_SPEC_VERSION"
+pattern VK_NV_GLSL_SHADER_SPEC_VERSION :: Integral a => a
+pattern VK_NV_GLSL_SHADER_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_GLSL_SHADER_EXTENSION_NAME"
+pattern VK_NV_GLSL_SHADER_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_GLSL_SHADER_EXTENSION_NAME = "VK_NV_glsl_shader"
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_sample_mask_override_coverage.hs b/src/Graphics/Vulkan/Extensions/VK_NV_sample_mask_override_coverage.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_sample_mask_override_coverage.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage
+  ( pattern VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION
+  , pattern VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION"
+pattern VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION :: Integral a => a
+pattern VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME"
+pattern VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_SAMPLE_MASK_OVERRIDE_COVERAGE_EXTENSION_NAME = "VK_NV_sample_mask_override_coverage"
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs b/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_shader_subgroup_partitioned.hs
@@ -0,0 +1,30 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
+  ( pattern VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV
+  , pattern VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION
+  , pattern VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+import Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup
+  ( VkSubgroupFeatureFlagBits(..)
+  )
+
+
+-- No documentation found for Nested "VkSubgroupFeatureFlagBits" "VK_SUBGROUP_FEATURE_PARTITIONED_BIT_NV"
+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"
+pattern VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION :: Integral a => a
+pattern VK_NV_SHADER_SUBGROUP_PARTITIONED_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME"
+pattern VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_SHADER_SUBGROUP_PARTITIONED_EXTENSION_NAME = "VK_NV_shader_subgroup_partitioned"
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_array2.hs b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_array2.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_array2.hs
@@ -0,0 +1,24 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_viewport_array2
+  ( pattern VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION
+  , pattern VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME
+  ) where
+
+import Data.String
+  ( IsString
+  )
+
+
+
+
+
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION"
+pattern VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION :: Integral a => a
+pattern VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME"
+pattern VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME = "VK_NV_viewport_array2"
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_viewport_swizzle.hs
@@ -0,0 +1,283 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language GeneralizedNewtypeDeriving #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle
+  ( VkViewportCoordinateSwizzleNV(..)
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV
+  , pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV
+  , VkPipelineViewportSwizzleStateCreateFlagsNV(..)
+  , pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV
+  , pattern VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION
+  , pattern VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME
+  , VkViewportSwizzleNV(..)
+  , VkPipelineViewportSwizzleStateCreateInfoNV(..)
+  ) where
+
+import Data.Bits
+  ( Bits
+  , FiniteBits
+  )
+import Data.Int
+  ( Int32
+  )
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+import GHC.Read
+  ( expectP
+  , choose
+  )
+import Text.ParserCombinators.ReadPrec
+  ( (+++)
+  , prec
+  , step
+  )
+import Text.Read
+  ( Read(..)
+  , parens
+  )
+import Text.Read.Lex
+  ( Lexeme(Ident)
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  , VkFlags
+  )
+
+
+-- ** VkViewportCoordinateSwizzleNV
+
+-- | VkViewportCoordinateSwizzleNV - Specify how a viewport coordinate is
+-- swizzled
+--
+-- = Description
+-- #_description#
+--
+-- These values are described in detail in
+-- <{html_spec_relative}#vertexpostproc-viewport-swizzle Viewport Swizzle>.
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkViewportSwizzleNV'
+newtype VkViewportCoordinateSwizzleNV = VkViewportCoordinateSwizzleNV Int32
+  deriving (Eq, Ord, Storable)
+
+instance Show VkViewportCoordinateSwizzleNV where
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"
+  showsPrec _ VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = showString "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"
+  showsPrec p (VkViewportCoordinateSwizzleNV x) = showParen (p >= 11) (showString "VkViewportCoordinateSwizzleNV " . showsPrec 11 x)
+
+instance Read VkViewportCoordinateSwizzleNV where
+  readPrec = parens ( choose [ ("VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV)
+                             , ("VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV)
+                             , ("VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV)
+                             , ("VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV)
+                             , ("VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV)
+                             , ("VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV)
+                             , ("VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV)
+                             , ("VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV", pure VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV)
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkViewportCoordinateSwizzleNV")
+                        v <- step readPrec
+                        pure (VkViewportCoordinateSwizzleNV v)
+                        )
+                    )
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_X_NV = VkViewportCoordinateSwizzleNV 0
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_X_NV = VkViewportCoordinateSwizzleNV 1
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Y_NV = VkViewportCoordinateSwizzleNV 2
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Y_NV = VkViewportCoordinateSwizzleNV 3
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_Z_NV = VkViewportCoordinateSwizzleNV 4
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_Z_NV = VkViewportCoordinateSwizzleNV 5
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_POSITIVE_W_NV = VkViewportCoordinateSwizzleNV 6
+
+-- No documentation found for Nested "VkViewportCoordinateSwizzleNV" "VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV"
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV :: VkViewportCoordinateSwizzleNV
+pattern VK_VIEWPORT_COORDINATE_SWIZZLE_NEGATIVE_W_NV = VkViewportCoordinateSwizzleNV 7
+-- ** VkPipelineViewportSwizzleStateCreateFlagsNV
+
+-- | 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
+  deriving (Eq, Ord, Storable, Bits, FiniteBits)
+
+instance Show VkPipelineViewportSwizzleStateCreateFlagsNV where
+  
+  showsPrec p (VkPipelineViewportSwizzleStateCreateFlagsNV x) = showParen (p >= 11) (showString "VkPipelineViewportSwizzleStateCreateFlagsNV " . showsPrec 11 x)
+
+instance Read VkPipelineViewportSwizzleStateCreateFlagsNV where
+  readPrec = parens ( choose [ 
+                             ] +++
+                      prec 10 (do
+                        expectP (Ident "VkPipelineViewportSwizzleStateCreateFlagsNV")
+                        v <- step readPrec
+                        pure (VkPipelineViewportSwizzleStateCreateFlagsNV v)
+                        )
+                    )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV = VkStructureType 1000098000
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION"
+pattern VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION :: Integral a => a
+pattern VK_NV_VIEWPORT_SWIZZLE_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME"
+pattern VK_NV_VIEWPORT_SWIZZLE_EXTENSION_NAME :: (Eq a ,IsString a) => a
+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
+--
+-- -   @y@ /must/ be a valid 'VkViewportCoordinateSwizzleNV' value
+--
+-- -   @z@ /must/ be a valid 'VkViewportCoordinateSwizzleNV' value
+--
+-- -   @w@ /must/ be a valid 'VkViewportCoordinateSwizzleNV' value
+--
+-- = See Also
+-- #_see_also#
+--
+-- 'VkPipelineViewportSwizzleStateCreateInfoNV',
+-- 'VkViewportCoordinateSwizzleNV'
+data VkViewportSwizzleNV = VkViewportSwizzleNV
+  { -- No documentation found for Nested "VkViewportSwizzleNV" "vkX"
+  vkX :: VkViewportCoordinateSwizzleNV
+  , -- No documentation found for Nested "VkViewportSwizzleNV" "vkY"
+  vkY :: VkViewportCoordinateSwizzleNV
+  , -- No documentation found for Nested "VkViewportSwizzleNV" "vkZ"
+  vkZ :: VkViewportCoordinateSwizzleNV
+  , -- No documentation found for Nested "VkViewportSwizzleNV" "vkW"
+  vkW :: VkViewportCoordinateSwizzleNV
+  }
+  deriving (Eq, Show)
+
+instance Storable VkViewportSwizzleNV where
+  sizeOf ~_ = 16
+  alignment ~_ = 4
+  peek ptr = VkViewportSwizzleNV <$> peek (ptr `plusPtr` 0)
+                                 <*> peek (ptr `plusPtr` 4)
+                                 <*> peek (ptr `plusPtr` 8)
+                                 <*> peek (ptr `plusPtr` 12)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkX (poked :: VkViewportSwizzleNV))
+                *> poke (ptr `plusPtr` 4) (vkY (poked :: VkViewportSwizzleNV))
+                *> poke (ptr `plusPtr` 8) (vkZ (poked :: VkViewportSwizzleNV))
+                *> poke (ptr `plusPtr` 12) (vkW (poked :: VkViewportSwizzleNV))
+-- | VkPipelineViewportSwizzleStateCreateInfoNV - Structure specifying
+-- swizzle applied to primitive clip coordinates
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage
+--
+-- -   @viewportCount@ /must/ match the @viewportCount@ set in
+--     @VkPipelineViewportStateCreateInfo@
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV@
+--
+-- -   @flags@ /must/ be @0@
+--
+-- -   @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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkFlags"
+  vkFlags :: VkPipelineViewportSwizzleStateCreateFlagsNV
+  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkViewportCount"
+  vkViewportCount :: Word32
+  , -- No documentation found for Nested "VkPipelineViewportSwizzleStateCreateInfoNV" "vkPViewportSwizzles"
+  vkPViewportSwizzles :: Ptr VkViewportSwizzleNV
+  }
+  deriving (Eq, Show)
+
+instance Storable VkPipelineViewportSwizzleStateCreateInfoNV where
+  sizeOf ~_ = 32
+  alignment ~_ = 8
+  peek ptr = VkPipelineViewportSwizzleStateCreateInfoNV <$> 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 :: VkPipelineViewportSwizzleStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineViewportSwizzleStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineViewportSwizzleStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 20) (vkViewportCount (poked :: VkPipelineViewportSwizzleStateCreateInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkPViewportSwizzles (poked :: VkPipelineViewportSwizzleStateCreateInfoNV))
diff --git a/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs b/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/Extensions/VK_NV_win32_keyed_mutex.hs
@@ -0,0 +1,125 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PatternSynonyms #-}
+{-# language OverloadedStrings #-}
+{-# language DuplicateRecordFields #-}
+
+module Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex
+  ( pattern VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV
+  , pattern VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION
+  , pattern VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME
+  , VkWin32KeyedMutexAcquireReleaseInfoNV(..)
+  ) where
+
+import Data.String
+  ( IsString
+  )
+import Data.Word
+  ( Word64
+  , Word32
+  )
+import Foreign.Ptr
+  ( plusPtr
+  , Ptr
+  )
+import Foreign.Storable
+  ( Storable(..)
+  , Storable
+  )
+
+
+import Graphics.Vulkan.Core10.Core
+  ( VkStructureType(..)
+  )
+import Graphics.Vulkan.Core10.Memory
+  ( VkDeviceMemory
+  )
+
+
+-- No documentation found for Nested "VkStructureType" "VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"
+pattern VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV :: VkStructureType
+pattern VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = VkStructureType 1000058000
+-- No documentation found for TopLevel "VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION"
+pattern VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION :: Integral a => a
+pattern VK_NV_WIN32_KEYED_MUTEX_SPEC_VERSION = 1
+-- No documentation found for TopLevel "VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME"
+pattern VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME :: (Eq a ,IsString a) => a
+pattern VK_NV_WIN32_KEYED_MUTEX_EXTENSION_NAME = "VK_NV_win32_keyed_mutex"
+-- | VkWin32KeyedMutexAcquireReleaseInfoNV - use Windows keyex mutex
+-- mechanism to synchronize work
+--
+-- = Description
+-- #_description#
+--
+-- == Valid Usage (Implicit)
+--
+-- -   @sType@ /must/ be
+--     @VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV@
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireSyncs@ /must/ be a valid
+--     pointer to an array of @acquireCount@ valid @VkDeviceMemory@ handles
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireKeys@ /must/ be a valid
+--     pointer to an array of @acquireCount@ @uint64_t@ values
+--
+-- -   If @acquireCount@ is not @0@, @pAcquireTimeoutMilliseconds@ /must/
+--     be a valid pointer to an array of @acquireCount@ @uint32_t@ values
+--
+-- -   If @releaseCount@ is not @0@, @pReleaseSyncs@ /must/ be a valid
+--     pointer to an array of @releaseCount@ valid @VkDeviceMemory@ handles
+--
+-- -   If @releaseCount@ is not @0@, @pReleaseKeys@ /must/ be a valid
+--     pointer to an array of @releaseCount@ @uint64_t@ values
+--
+-- -   Both of the elements of @pAcquireSyncs@, and the elements of
+--     @pReleaseSyncs@ that are valid handles /must/ have been created,
+--     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"
+  vkSType :: VkStructureType
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPNext"
+  vkPNext :: Ptr ()
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkAcquireCount"
+  vkAcquireCount :: Word32
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPAcquireSyncs"
+  vkPAcquireSyncs :: Ptr VkDeviceMemory
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPAcquireKeys"
+  vkPAcquireKeys :: Ptr Word64
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPAcquireTimeoutMilliseconds"
+  vkPAcquireTimeoutMilliseconds :: Ptr Word32
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkReleaseCount"
+  vkReleaseCount :: Word32
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPReleaseSyncs"
+  vkPReleaseSyncs :: Ptr VkDeviceMemory
+  , -- No documentation found for Nested "VkWin32KeyedMutexAcquireReleaseInfoNV" "vkPReleaseKeys"
+  vkPReleaseKeys :: Ptr Word64
+  }
+  deriving (Eq, Show)
+
+instance Storable VkWin32KeyedMutexAcquireReleaseInfoNV where
+  sizeOf ~_ = 72
+  alignment ~_ = 8
+  peek ptr = VkWin32KeyedMutexAcquireReleaseInfoNV <$> 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)
+                                                   <*> peek (ptr `plusPtr` 64)
+  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 16) (vkAcquireCount (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 24) (vkPAcquireSyncs (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 32) (vkPAcquireKeys (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 40) (vkPAcquireTimeoutMilliseconds (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 48) (vkReleaseCount (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 56) (vkPReleaseSyncs (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
+                *> poke (ptr `plusPtr` 64) (vkPReleaseKeys (poked :: VkWin32KeyedMutexAcquireReleaseInfoNV))
diff --git a/src/Graphics/Vulkan/Fence.hs b/src/Graphics/Vulkan/Fence.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Fence.hs
+++ /dev/null
@@ -1,122 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Fence where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
-
-data VkFenceCreateInfo =
-  VkFenceCreateInfo{ vkSType :: VkStructureType 
-                   , vkPNext :: Ptr Void 
-                   , vkFlags :: VkFenceCreateFlags 
-                   }
-  deriving (Eq)
-
-instance Storable VkFenceCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkFenceCreateInfo <$> peek (ptr `plusPtr` 0)
-                               <*> peek (ptr `plusPtr` 8)
-                               <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFenceCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFenceCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFenceCreateInfo))
-
-
--- ** vkResetFences
-foreign import ccall "vkResetFences" vkResetFences ::
-  VkDevice -> Word32 -> Ptr VkFence -> IO VkResult
-
--- ** vkDestroyFence
-foreign import ccall "vkDestroyFence" vkDestroyFence ::
-  VkDevice -> VkFence -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** vkWaitForFences
-foreign import ccall "vkWaitForFences" vkWaitForFences ::
-  VkDevice ->
-  Word32 -> Ptr VkFence -> VkBool32 -> Word64 -> IO VkResult
-
--- ** vkGetFenceStatus
-foreign import ccall "vkGetFenceStatus" vkGetFenceStatus ::
-  VkDevice -> VkFence -> IO VkResult
-
--- ** VkFenceCreateFlags
-
-newtype VkFenceCreateFlagBits = VkFenceCreateFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkFenceCreateFlagBits
-type VkFenceCreateFlags = VkFenceCreateFlagBits
-
-instance Show VkFenceCreateFlagBits where
-  showsPrec _ VK_FENCE_CREATE_SIGNALED_BIT = showString "VK_FENCE_CREATE_SIGNALED_BIT"
-  
-  showsPrec p (VkFenceCreateFlagBits x) = showParen (p >= 11) (showString "VkFenceCreateFlagBits " . showsPrec 11 x)
-
-instance Read VkFenceCreateFlagBits where
-  readPrec = parens ( choose [ ("VK_FENCE_CREATE_SIGNALED_BIT", pure VK_FENCE_CREATE_SIGNALED_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkFenceCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkFenceCreateFlagBits v)
-                        )
-                    )
-
-
-pattern VK_FENCE_CREATE_SIGNALED_BIT = VkFenceCreateFlagBits 0x1
-
-
--- ** vkCreateFence
-foreign import ccall "vkCreateFence" vkCreateFence ::
-  VkDevice ->
-  Ptr VkFenceCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkFence -> IO VkResult
-
-newtype VkFence = VkFence Word64
-  deriving (Eq, Storable)
-
diff --git a/src/Graphics/Vulkan/Image.hs b/src/Graphics/Vulkan/Image.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Image.hs
+++ /dev/null
@@ -1,447 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Image where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)
-                              )
-import Graphics.Vulkan.Core( VkExtent3D(..)
-                           , VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkStructureType(..)
-                           , VkSharingMode(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** vkCreateImage
-foreign import ccall "vkCreateImage" vkCreateImage ::
-  VkDevice ->
-  Ptr VkImageCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkImage -> IO VkResult
-
--- ** VkImageCreateFlags
-
-newtype VkImageCreateFlagBits = VkImageCreateFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkImageCreateFlagBits
-type VkImageCreateFlags = VkImageCreateFlagBits
-
-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"
-  
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkImageCreateFlagBits v)
-                        )
-                    )
-
--- | Image should support sparse backing
-pattern VK_IMAGE_CREATE_SPARSE_BINDING_BIT = VkImageCreateFlagBits 0x1
--- | Image should support sparse backing with partial residency
-pattern VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT = VkImageCreateFlagBits 0x2
--- | Image should support constent data access to physical memory blocks mapped into multiple locations of sparse images
-pattern VK_IMAGE_CREATE_SPARSE_ALIASED_BIT = VkImageCreateFlagBits 0x4
--- | Allows image views to have different format than the base image
-pattern VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT = VkImageCreateFlagBits 0x8
--- | Allows creating image views with cube type from the created image
-pattern VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT = VkImageCreateFlagBits 0x10
-
-
--- ** VkImageUsageFlags
-
-newtype VkImageUsageFlagBits = VkImageUsageFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkImageUsageFlagBits
-type VkImageUsageFlags = VkImageUsageFlagBits
-
-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)
-                        )
-                    )
-
--- | Can be used as a source of transfer operations
-pattern VK_IMAGE_USAGE_TRANSFER_SRC_BIT = VkImageUsageFlagBits 0x1
--- | Can be used as a destination of transfer operations
-pattern VK_IMAGE_USAGE_TRANSFER_DST_BIT = VkImageUsageFlagBits 0x2
--- | Can be sampled from (SAMPLED_IMAGE and COMBINED_IMAGE_SAMPLER descriptor types)
-pattern VK_IMAGE_USAGE_SAMPLED_BIT = VkImageUsageFlagBits 0x4
--- | Can be used as storage image (STORAGE_IMAGE descriptor type)
-pattern VK_IMAGE_USAGE_STORAGE_BIT = VkImageUsageFlagBits 0x8
--- | Can be used as framebuffer color attachment
-pattern VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT = VkImageUsageFlagBits 0x10
--- | Can be used as framebuffer depth/stencil attachment
-pattern VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = VkImageUsageFlagBits 0x20
--- | Image data not needed outside of rendering
-pattern VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x40
--- | Can be used as framebuffer input attachment
-pattern VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT = VkImageUsageFlagBits 0x80
-
-
-newtype VkImage = VkImage Word64
-  deriving (Eq, Storable)
-
--- ** VkImageAspectFlags
-
-newtype VkImageAspectFlagBits = VkImageAspectFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkImageAspectFlagBits
-type VkImageAspectFlags = VkImageAspectFlagBits
-
-instance Show VkImageAspectFlagBits where
-  showsPrec _ VK_IMAGE_ASPECT_COLOR_BIT = showString "VK_IMAGE_ASPECT_COLOR_BIT"
-  showsPrec _ VK_IMAGE_ASPECT_DEPTH_BIT = showString "VK_IMAGE_ASPECT_DEPTH_BIT"
-  showsPrec _ VK_IMAGE_ASPECT_STENCIL_BIT = showString "VK_IMAGE_ASPECT_STENCIL_BIT"
-  showsPrec _ VK_IMAGE_ASPECT_METADATA_BIT = showString "VK_IMAGE_ASPECT_METADATA_BIT"
-  
-  showsPrec p (VkImageAspectFlagBits x) = showParen (p >= 11) (showString "VkImageAspectFlagBits " . showsPrec 11 x)
-
-instance Read VkImageAspectFlagBits where
-  readPrec = parens ( choose [ ("VK_IMAGE_ASPECT_COLOR_BIT", pure VK_IMAGE_ASPECT_COLOR_BIT)
-                             , ("VK_IMAGE_ASPECT_DEPTH_BIT", pure VK_IMAGE_ASPECT_DEPTH_BIT)
-                             , ("VK_IMAGE_ASPECT_STENCIL_BIT", pure VK_IMAGE_ASPECT_STENCIL_BIT)
-                             , ("VK_IMAGE_ASPECT_METADATA_BIT", pure VK_IMAGE_ASPECT_METADATA_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageAspectFlagBits")
-                        v <- step readPrec
-                        pure (VkImageAspectFlagBits v)
-                        )
-                    )
-
-
-pattern VK_IMAGE_ASPECT_COLOR_BIT = VkImageAspectFlagBits 0x1
-
-pattern VK_IMAGE_ASPECT_DEPTH_BIT = VkImageAspectFlagBits 0x2
-
-pattern VK_IMAGE_ASPECT_STENCIL_BIT = VkImageAspectFlagBits 0x4
-
-pattern VK_IMAGE_ASPECT_METADATA_BIT = VkImageAspectFlagBits 0x8
-
-
-
-data VkSubresourceLayout =
-  VkSubresourceLayout{ vkOffset :: VkDeviceSize 
-                     , vkSize :: VkDeviceSize 
-                     , vkRowPitch :: VkDeviceSize 
-                     , vkArrayPitch :: VkDeviceSize 
-                     , vkDepthPitch :: VkDeviceSize 
-                     }
-  deriving (Eq)
-
-instance Storable VkSubresourceLayout where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkSubresourceLayout <$> peek (ptr `plusPtr` 0)
-                                 <*> peek (ptr `plusPtr` 8)
-                                 <*> peek (ptr `plusPtr` 16)
-                                 <*> peek (ptr `plusPtr` 24)
-                                 <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkOffset (poked :: VkSubresourceLayout))
-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSubresourceLayout))
-                *> poke (ptr `plusPtr` 16) (vkRowPitch (poked :: VkSubresourceLayout))
-                *> poke (ptr `plusPtr` 24) (vkArrayPitch (poked :: VkSubresourceLayout))
-                *> poke (ptr `plusPtr` 32) (vkDepthPitch (poked :: VkSubresourceLayout))
-
-
--- ** VkImageTiling
-
-newtype VkImageTiling = VkImageTiling Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_IMAGE_TILING_OPTIMAL = VkImageTiling 0
-
-pattern VK_IMAGE_TILING_LINEAR = VkImageTiling 1
-
--- ** VkImageLayout
-
-newtype VkImageLayout = VkImageLayout Int32
-  deriving (Eq, Storable)
-
-instance Show VkImageLayout where
-  showsPrec _ VK_IMAGE_LAYOUT_UNDEFINED = showString "VK_IMAGE_LAYOUT_UNDEFINED"
-  showsPrec _ VK_IMAGE_LAYOUT_GENERAL = showString "VK_IMAGE_LAYOUT_GENERAL"
-  showsPrec _ VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = showString "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL"
-  showsPrec _ VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = showString "VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL"
-  showsPrec _ VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = showString "VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL"
-  showsPrec _ VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = showString "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL"
-  showsPrec _ VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = showString "VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL"
-  showsPrec _ VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = showString "VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL"
-  showsPrec _ VK_IMAGE_LAYOUT_PREINITIALIZED = showString "VK_IMAGE_LAYOUT_PREINITIALIZED"
-  showsPrec p (VkImageLayout x) = showParen (p >= 11) (showString "VkImageLayout " . showsPrec 11 x)
-
-instance Read VkImageLayout where
-  readPrec = parens ( choose [ ("VK_IMAGE_LAYOUT_UNDEFINED", pure VK_IMAGE_LAYOUT_UNDEFINED)
-                             , ("VK_IMAGE_LAYOUT_GENERAL", pure VK_IMAGE_LAYOUT_GENERAL)
-                             , ("VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL", pure VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL)
-                             , ("VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL", pure VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL)
-                             , ("VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL", pure VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL)
-                             , ("VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL", pure VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL)
-                             , ("VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL", pure VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL)
-                             , ("VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL", pure VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL)
-                             , ("VK_IMAGE_LAYOUT_PREINITIALIZED", pure VK_IMAGE_LAYOUT_PREINITIALIZED)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageLayout")
-                        v <- step readPrec
-                        pure (VkImageLayout v)
-                        )
-                    )
-
--- | Implicit layout an image is when its contents are undefined due to various reasons (e.g. right after creation)
-pattern VK_IMAGE_LAYOUT_UNDEFINED = VkImageLayout 0
--- | General layout when image can be used for any kind of access
-pattern VK_IMAGE_LAYOUT_GENERAL = VkImageLayout 1
--- | Optimal layout when image is only used for color attachment read/write
-pattern VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL = VkImageLayout 2
--- | Optimal layout when image is only used for depth/stencil attachment read/write
-pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL = VkImageLayout 3
--- | Optimal layout when image is used for read only depth/stencil attachment and shader access
-pattern VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL = VkImageLayout 4
--- | Optimal layout when image is used for read only shader access
-pattern VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL = VkImageLayout 5
--- | Optimal layout when image is used only as source of transfer operations
-pattern VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL = VkImageLayout 6
--- | Optimal layout when image is used only as destination of transfer operations
-pattern VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL = VkImageLayout 7
--- | Initial layout used when the data is populated by the CPU
-pattern VK_IMAGE_LAYOUT_PREINITIALIZED = VkImageLayout 8
-
--- ** VkImageType
-
-newtype VkImageType = VkImageType Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_IMAGE_TYPE_1D = VkImageType 0
-
-pattern VK_IMAGE_TYPE_2D = VkImageType 1
-
-pattern VK_IMAGE_TYPE_3D = VkImageType 2
-
--- ** vkDestroyImage
-foreign import ccall "vkDestroyImage" vkDestroyImage ::
-  VkDevice -> VkImage -> Ptr VkAllocationCallbacks -> IO ()
-
-
-data VkImageSubresource =
-  VkImageSubresource{ vkAspectMask :: VkImageAspectFlags 
-                    , vkMipLevel :: Word32 
-                    , vkArrayLayer :: Word32 
-                    }
-  deriving (Eq)
-
-instance Storable VkImageSubresource where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkImageSubresource <$> peek (ptr `plusPtr` 0)
-                                <*> peek (ptr `plusPtr` 4)
-                                <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkImageSubresource))
-                *> poke (ptr `plusPtr` 4) (vkMipLevel (poked :: VkImageSubresource))
-                *> poke (ptr `plusPtr` 8) (vkArrayLayer (poked :: VkImageSubresource))
-
-
-
-data VkImageSubresourceRange =
-  VkImageSubresourceRange{ vkAspectMask :: VkImageAspectFlags 
-                         , vkBaseMipLevel :: Word32 
-                         , vkLevelCount :: Word32 
-                         , vkBaseArrayLayer :: Word32 
-                         , vkLayerCount :: Word32 
-                         }
-  deriving (Eq)
-
-instance Storable VkImageSubresourceRange where
-  sizeOf ~_ = 20
-  alignment ~_ = 4
-  peek ptr = VkImageSubresourceRange <$> 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) (vkAspectMask (poked :: VkImageSubresourceRange))
-                *> poke (ptr `plusPtr` 4) (vkBaseMipLevel (poked :: VkImageSubresourceRange))
-                *> poke (ptr `plusPtr` 8) (vkLevelCount (poked :: VkImageSubresourceRange))
-                *> poke (ptr `plusPtr` 12) (vkBaseArrayLayer (poked :: VkImageSubresourceRange))
-                *> poke (ptr `plusPtr` 16) (vkLayerCount (poked :: VkImageSubresourceRange))
-
-
--- ** vkGetImageSubresourceLayout
-foreign import ccall "vkGetImageSubresourceLayout" vkGetImageSubresourceLayout ::
-  VkDevice ->
-  VkImage ->
-    Ptr VkImageSubresource -> Ptr VkSubresourceLayout -> IO ()
-
-
-data VkImageCreateInfo =
-  VkImageCreateInfo{ vkSType :: VkStructureType 
-                   , vkPNext :: Ptr Void 
-                   , vkFlags :: VkImageCreateFlags 
-                   , vkImageType :: VkImageType 
-                   , vkFormat :: VkFormat 
-                   , vkExtent :: VkExtent3D 
-                   , vkMipLevels :: Word32 
-                   , vkArrayLayers :: Word32 
-                   , vkSamples :: VkSampleCountFlagBits 
-                   , vkTiling :: VkImageTiling 
-                   , vkUsage :: VkImageUsageFlags 
-                   , vkSharingMode :: VkSharingMode 
-                   , vkQueueFamilyIndexCount :: Word32 
-                   , vkPQueueFamilyIndices :: Ptr Word32 
-                   , vkInitialLayout :: VkImageLayout 
-                   }
-  deriving (Eq)
-
-instance Storable VkImageCreateInfo where
-  sizeOf ~_ = 88
-  alignment ~_ = 8
-  peek ptr = VkImageCreateInfo <$> 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` 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` 72)
-                               <*> peek (ptr `plusPtr` 80)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkImageType (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkFormat (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 28) (vkExtent (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkMipLevels (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 44) (vkArrayLayers (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkSamples (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 52) (vkTiling (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkUsage (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 60) (vkSharingMode (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkImageCreateInfo))
-                *> poke (ptr `plusPtr` 80) (vkInitialLayout (poked :: VkImageCreateInfo))
-
-
diff --git a/src/Graphics/Vulkan/ImageView.hs b/src/Graphics/Vulkan/ImageView.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/ImageView.hs
+++ /dev/null
@@ -1,220 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.ImageView where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Image( VkImage(..)
-                            , VkImageAspectFlagBits(..)
-                            , VkImageSubresourceRange(..)
-                            , VkImageAspectFlags(..)
-                            )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
-
-data VkImageViewCreateInfo =
-  VkImageViewCreateInfo{ vkSType :: VkStructureType 
-                       , vkPNext :: Ptr Void 
-                       , vkFlags :: VkImageViewCreateFlags 
-                       , vkImage :: VkImage 
-                       , vkViewType :: VkImageViewType 
-                       , vkFormat :: VkFormat 
-                       , vkComponents :: VkComponentMapping 
-                       , vkSubresourceRange :: VkImageSubresourceRange 
-                       }
-  deriving (Eq)
-
-instance Storable VkImageViewCreateInfo where
-  sizeOf ~_ = 80
-  alignment ~_ = 8
-  peek ptr = VkImageViewCreateInfo <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 16)
-                                   <*> peek (ptr `plusPtr` 24)
-                                   <*> peek (ptr `plusPtr` 32)
-                                   <*> peek (ptr `plusPtr` 36)
-                                   <*> peek (ptr `plusPtr` 40)
-                                   <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkImageViewCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkImageViewCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkImageViewCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkImage (poked :: VkImageViewCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkViewType (poked :: VkImageViewCreateInfo))
-                *> poke (ptr `plusPtr` 36) (vkFormat (poked :: VkImageViewCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkComponents (poked :: VkImageViewCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkSubresourceRange (poked :: VkImageViewCreateInfo))
-
-
--- ** vkCreateImageView
-foreign import ccall "vkCreateImageView" vkCreateImageView ::
-  VkDevice ->
-  Ptr VkImageViewCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkImageView -> IO VkResult
-
-newtype VkImageView = VkImageView Word64
-  deriving (Eq, Storable)
-
--- ** VkImageViewType
-
-newtype VkImageViewType = VkImageViewType Int32
-  deriving (Eq, Storable)
-
-instance Show VkImageViewType where
-  showsPrec _ VK_IMAGE_VIEW_TYPE_1D = showString "VK_IMAGE_VIEW_TYPE_1D"
-  showsPrec _ VK_IMAGE_VIEW_TYPE_2D = showString "VK_IMAGE_VIEW_TYPE_2D"
-  showsPrec _ VK_IMAGE_VIEW_TYPE_3D = showString "VK_IMAGE_VIEW_TYPE_3D"
-  showsPrec _ VK_IMAGE_VIEW_TYPE_CUBE = showString "VK_IMAGE_VIEW_TYPE_CUBE"
-  showsPrec _ VK_IMAGE_VIEW_TYPE_1D_ARRAY = showString "VK_IMAGE_VIEW_TYPE_1D_ARRAY"
-  showsPrec _ VK_IMAGE_VIEW_TYPE_2D_ARRAY = showString "VK_IMAGE_VIEW_TYPE_2D_ARRAY"
-  showsPrec _ VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = showString "VK_IMAGE_VIEW_TYPE_CUBE_ARRAY"
-  showsPrec p (VkImageViewType x) = showParen (p >= 11) (showString "VkImageViewType " . showsPrec 11 x)
-
-instance Read VkImageViewType where
-  readPrec = parens ( choose [ ("VK_IMAGE_VIEW_TYPE_1D", pure VK_IMAGE_VIEW_TYPE_1D)
-                             , ("VK_IMAGE_VIEW_TYPE_2D", pure VK_IMAGE_VIEW_TYPE_2D)
-                             , ("VK_IMAGE_VIEW_TYPE_3D", pure VK_IMAGE_VIEW_TYPE_3D)
-                             , ("VK_IMAGE_VIEW_TYPE_CUBE", pure VK_IMAGE_VIEW_TYPE_CUBE)
-                             , ("VK_IMAGE_VIEW_TYPE_1D_ARRAY", pure VK_IMAGE_VIEW_TYPE_1D_ARRAY)
-                             , ("VK_IMAGE_VIEW_TYPE_2D_ARRAY", pure VK_IMAGE_VIEW_TYPE_2D_ARRAY)
-                             , ("VK_IMAGE_VIEW_TYPE_CUBE_ARRAY", pure VK_IMAGE_VIEW_TYPE_CUBE_ARRAY)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkImageViewType")
-                        v <- step readPrec
-                        pure (VkImageViewType v)
-                        )
-                    )
-
-
-pattern VK_IMAGE_VIEW_TYPE_1D = VkImageViewType 0
-
-pattern VK_IMAGE_VIEW_TYPE_2D = VkImageViewType 1
-
-pattern VK_IMAGE_VIEW_TYPE_3D = VkImageViewType 2
-
-pattern VK_IMAGE_VIEW_TYPE_CUBE = VkImageViewType 3
-
-pattern VK_IMAGE_VIEW_TYPE_1D_ARRAY = VkImageViewType 4
-
-pattern VK_IMAGE_VIEW_TYPE_2D_ARRAY = VkImageViewType 5
-
-pattern VK_IMAGE_VIEW_TYPE_CUBE_ARRAY = VkImageViewType 6
-
--- ** VkImageViewCreateFlags
--- | Opaque flag
-newtype VkImageViewCreateFlags = VkImageViewCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkComponentMapping =
-  VkComponentMapping{ vkR :: VkComponentSwizzle 
-                    , vkG :: VkComponentSwizzle 
-                    , vkB :: VkComponentSwizzle 
-                    , vkA :: VkComponentSwizzle 
-                    }
-  deriving (Eq)
-
-instance Storable VkComponentMapping where
-  sizeOf ~_ = 16
-  alignment ~_ = 4
-  peek ptr = VkComponentMapping <$> peek (ptr `plusPtr` 0)
-                                <*> peek (ptr `plusPtr` 4)
-                                <*> peek (ptr `plusPtr` 8)
-                                <*> peek (ptr `plusPtr` 12)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkR (poked :: VkComponentMapping))
-                *> poke (ptr `plusPtr` 4) (vkG (poked :: VkComponentMapping))
-                *> poke (ptr `plusPtr` 8) (vkB (poked :: VkComponentMapping))
-                *> poke (ptr `plusPtr` 12) (vkA (poked :: VkComponentMapping))
-
-
--- ** VkComponentSwizzle
-
-newtype VkComponentSwizzle = VkComponentSwizzle Int32
-  deriving (Eq, Storable)
-
-instance Show VkComponentSwizzle where
-  showsPrec _ VK_COMPONENT_SWIZZLE_IDENTITY = showString "VK_COMPONENT_SWIZZLE_IDENTITY"
-  showsPrec _ VK_COMPONENT_SWIZZLE_ZERO = showString "VK_COMPONENT_SWIZZLE_ZERO"
-  showsPrec _ VK_COMPONENT_SWIZZLE_ONE = showString "VK_COMPONENT_SWIZZLE_ONE"
-  showsPrec _ VK_COMPONENT_SWIZZLE_R = showString "VK_COMPONENT_SWIZZLE_R"
-  showsPrec _ VK_COMPONENT_SWIZZLE_G = showString "VK_COMPONENT_SWIZZLE_G"
-  showsPrec _ VK_COMPONENT_SWIZZLE_B = showString "VK_COMPONENT_SWIZZLE_B"
-  showsPrec _ VK_COMPONENT_SWIZZLE_A = showString "VK_COMPONENT_SWIZZLE_A"
-  showsPrec p (VkComponentSwizzle x) = showParen (p >= 11) (showString "VkComponentSwizzle " . showsPrec 11 x)
-
-instance Read VkComponentSwizzle where
-  readPrec = parens ( choose [ ("VK_COMPONENT_SWIZZLE_IDENTITY", pure VK_COMPONENT_SWIZZLE_IDENTITY)
-                             , ("VK_COMPONENT_SWIZZLE_ZERO", pure VK_COMPONENT_SWIZZLE_ZERO)
-                             , ("VK_COMPONENT_SWIZZLE_ONE", pure VK_COMPONENT_SWIZZLE_ONE)
-                             , ("VK_COMPONENT_SWIZZLE_R", pure VK_COMPONENT_SWIZZLE_R)
-                             , ("VK_COMPONENT_SWIZZLE_G", pure VK_COMPONENT_SWIZZLE_G)
-                             , ("VK_COMPONENT_SWIZZLE_B", pure VK_COMPONENT_SWIZZLE_B)
-                             , ("VK_COMPONENT_SWIZZLE_A", pure VK_COMPONENT_SWIZZLE_A)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkComponentSwizzle")
-                        v <- step readPrec
-                        pure (VkComponentSwizzle v)
-                        )
-                    )
-
-
-pattern VK_COMPONENT_SWIZZLE_IDENTITY = VkComponentSwizzle 0
-
-pattern VK_COMPONENT_SWIZZLE_ZERO = VkComponentSwizzle 1
-
-pattern VK_COMPONENT_SWIZZLE_ONE = VkComponentSwizzle 2
-
-pattern VK_COMPONENT_SWIZZLE_R = VkComponentSwizzle 3
-
-pattern VK_COMPONENT_SWIZZLE_G = VkComponentSwizzle 4
-
-pattern VK_COMPONENT_SWIZZLE_B = VkComponentSwizzle 5
-
-pattern VK_COMPONENT_SWIZZLE_A = VkComponentSwizzle 6
-
--- ** vkDestroyImageView
-foreign import ccall "vkDestroyImageView" vkDestroyImageView ::
-  VkDevice -> VkImageView -> Ptr VkAllocationCallbacks -> IO ()
-
diff --git a/src/Graphics/Vulkan/KHR/Display.hs b/src/Graphics/Vulkan/KHR/Display.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/KHR/Display.hs
+++ /dev/null
@@ -1,336 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.KHR.Display where
-
-import Graphics.Vulkan.Device( VkPhysicalDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.KHR.Surface( VkSurfaceTransformFlagBitsKHR(..)
-                                  , VkSurfaceTransformFlagsKHR(..)
-                                  , VkSurfaceKHR(..)
-                                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.DeviceInitialization( VkInstance(..)
-                                           )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkExtent2D(..)
-                           , VkFlags(..)
-                           , VkOffset2D(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CFloat
-                      , CFloat(..)
-                      , CChar
-                      , CSize(..)
-                      )
-
-
-data VkDisplaySurfaceCreateInfoKHR =
-  VkDisplaySurfaceCreateInfoKHR{ vkSType :: VkStructureType 
-                               , vkPNext :: Ptr Void 
-                               , vkFlags :: VkDisplaySurfaceCreateFlagsKHR 
-                               , vkDisplayMode :: VkDisplayModeKHR 
-                               , vkPlaneIndex :: Word32 
-                               , vkPlaneStackIndex :: Word32 
-                               , vkTransform :: VkSurfaceTransformFlagBitsKHR 
-                               , vkGlobalAlpha :: CFloat 
-                               , vkAlphaMode :: VkDisplayPlaneAlphaFlagBitsKHR 
-                               , vkImageExtent :: VkExtent2D 
-                               }
-  deriving (Eq)
-
-instance Storable VkDisplaySurfaceCreateInfoKHR where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkDisplaySurfaceCreateInfoKHR <$> peek (ptr `plusPtr` 0)
-                                           <*> peek (ptr `plusPtr` 8)
-                                           <*> peek (ptr `plusPtr` 16)
-                                           <*> peek (ptr `plusPtr` 24)
-                                           <*> peek (ptr `plusPtr` 32)
-                                           <*> peek (ptr `plusPtr` 36)
-                                           <*> peek (ptr `plusPtr` 40)
-                                           <*> peek (ptr `plusPtr` 44)
-                                           <*> peek (ptr `plusPtr` 48)
-                                           <*> peek (ptr `plusPtr` 52)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 24) (vkDisplayMode (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 32) (vkPlaneIndex (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 36) (vkPlaneStackIndex (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 40) (vkTransform (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 44) (vkGlobalAlpha (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 48) (vkAlphaMode (poked :: VkDisplaySurfaceCreateInfoKHR))
-                *> poke (ptr `plusPtr` 52) (vkImageExtent (poked :: VkDisplaySurfaceCreateInfoKHR))
-
-
-
-data VkDisplayPlaneCapabilitiesKHR =
-  VkDisplayPlaneCapabilitiesKHR{ vkSupportedAlpha :: VkDisplayPlaneAlphaFlagsKHR 
-                               , vkMinSrcPosition :: VkOffset2D 
-                               , vkMaxSrcPosition :: VkOffset2D 
-                               , vkMinSrcExtent :: VkExtent2D 
-                               , vkMaxSrcExtent :: VkExtent2D 
-                               , vkMinDstPosition :: VkOffset2D 
-                               , vkMaxDstPosition :: VkOffset2D 
-                               , vkMinDstExtent :: VkExtent2D 
-                               , vkMaxDstExtent :: VkExtent2D 
-                               }
-  deriving (Eq)
-
-instance Storable VkDisplayPlaneCapabilitiesKHR where
-  sizeOf ~_ = 68
-  alignment ~_ = 4
-  peek ptr = VkDisplayPlaneCapabilitiesKHR <$> peek (ptr `plusPtr` 0)
-                                           <*> peek (ptr `plusPtr` 4)
-                                           <*> peek (ptr `plusPtr` 12)
-                                           <*> peek (ptr `plusPtr` 20)
-                                           <*> peek (ptr `plusPtr` 28)
-                                           <*> peek (ptr `plusPtr` 36)
-                                           <*> peek (ptr `plusPtr` 44)
-                                           <*> peek (ptr `plusPtr` 52)
-                                           <*> peek (ptr `plusPtr` 60)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSupportedAlpha (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 4) (vkMinSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 12) (vkMaxSrcPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 20) (vkMinSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 28) (vkMaxSrcExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 36) (vkMinDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 44) (vkMaxDstPosition (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 52) (vkMinDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 60) (vkMaxDstExtent (poked :: VkDisplayPlaneCapabilitiesKHR))
-
-
--- ** vkGetDisplayModePropertiesKHR
-foreign import ccall "vkGetDisplayModePropertiesKHR" vkGetDisplayModePropertiesKHR ::
-  VkPhysicalDevice ->
-  VkDisplayKHR ->
-    Ptr Word32 -> Ptr VkDisplayModePropertiesKHR -> IO VkResult
-
-
-data VkDisplayPropertiesKHR =
-  VkDisplayPropertiesKHR{ vkDisplay :: VkDisplayKHR 
-                        , vkDisplayName :: Ptr CChar 
-                        , vkPhysicalDimensions :: VkExtent2D 
-                        , vkPhysicalResolution :: VkExtent2D 
-                        , vkSupportedTransforms :: VkSurfaceTransformFlagsKHR 
-                        , vkPlaneReorderPossible :: VkBool32 
-                        , vkPersistentContent :: VkBool32 
-                        }
-  deriving (Eq)
-
-instance Storable VkDisplayPropertiesKHR where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkDisplayPropertiesKHR <$> peek (ptr `plusPtr` 0)
-                                    <*> peek (ptr `plusPtr` 8)
-                                    <*> peek (ptr `plusPtr` 16)
-                                    <*> peek (ptr `plusPtr` 24)
-                                    <*> peek (ptr `plusPtr` 32)
-                                    <*> peek (ptr `plusPtr` 36)
-                                    <*> peek (ptr `plusPtr` 40)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplay (poked :: VkDisplayPropertiesKHR))
-                *> poke (ptr `plusPtr` 8) (vkDisplayName (poked :: VkDisplayPropertiesKHR))
-                *> poke (ptr `plusPtr` 16) (vkPhysicalDimensions (poked :: VkDisplayPropertiesKHR))
-                *> poke (ptr `plusPtr` 24) (vkPhysicalResolution (poked :: VkDisplayPropertiesKHR))
-                *> poke (ptr `plusPtr` 32) (vkSupportedTransforms (poked :: VkDisplayPropertiesKHR))
-                *> poke (ptr `plusPtr` 36) (vkPlaneReorderPossible (poked :: VkDisplayPropertiesKHR))
-                *> poke (ptr `plusPtr` 40) (vkPersistentContent (poked :: VkDisplayPropertiesKHR))
-
-
--- ** vkGetDisplayPlaneSupportedDisplaysKHR
-foreign import ccall "vkGetDisplayPlaneSupportedDisplaysKHR" vkGetDisplayPlaneSupportedDisplaysKHR ::
-  VkPhysicalDevice ->
-  Word32 -> Ptr Word32 -> Ptr VkDisplayKHR -> IO VkResult
-
--- ** vkCreateDisplayModeKHR
-foreign import ccall "vkCreateDisplayModeKHR" vkCreateDisplayModeKHR ::
-  VkPhysicalDevice ->
-  VkDisplayKHR ->
-    Ptr VkDisplayModeCreateInfoKHR ->
-      Ptr VkAllocationCallbacks -> Ptr VkDisplayModeKHR -> IO VkResult
-
-
-data VkDisplayPlanePropertiesKHR =
-  VkDisplayPlanePropertiesKHR{ vkCurrentDisplay :: VkDisplayKHR 
-                             , vkCurrentStackIndex :: Word32 
-                             }
-  deriving (Eq)
-
-instance Storable VkDisplayPlanePropertiesKHR where
-  sizeOf ~_ = 16
-  alignment ~_ = 8
-  peek ptr = VkDisplayPlanePropertiesKHR <$> peek (ptr `plusPtr` 0)
-                                         <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkCurrentDisplay (poked :: VkDisplayPlanePropertiesKHR))
-                *> poke (ptr `plusPtr` 8) (vkCurrentStackIndex (poked :: VkDisplayPlanePropertiesKHR))
-
-
--- ** vkGetDisplayPlaneCapabilitiesKHR
-foreign import ccall "vkGetDisplayPlaneCapabilitiesKHR" vkGetDisplayPlaneCapabilitiesKHR ::
-  VkPhysicalDevice ->
-  VkDisplayModeKHR ->
-    Word32 -> Ptr VkDisplayPlaneCapabilitiesKHR -> IO VkResult
-
-
-data VkDisplayModePropertiesKHR =
-  VkDisplayModePropertiesKHR{ vkDisplayMode :: VkDisplayModeKHR 
-                            , vkParameters :: VkDisplayModeParametersKHR 
-                            }
-  deriving (Eq)
-
-instance Storable VkDisplayModePropertiesKHR where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkDisplayModePropertiesKHR <$> peek (ptr `plusPtr` 0)
-                                        <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkDisplayMode (poked :: VkDisplayModePropertiesKHR))
-                *> poke (ptr `plusPtr` 8) (vkParameters (poked :: VkDisplayModePropertiesKHR))
-
-
--- ** VkDisplayPlaneAlphaFlagsKHR
-
-newtype VkDisplayPlaneAlphaFlagBitsKHR = VkDisplayPlaneAlphaFlagBitsKHR VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkDisplayPlaneAlphaFlagBitsKHR
-type VkDisplayPlaneAlphaFlagsKHR = VkDisplayPlaneAlphaFlagBitsKHR
-
-instance Show VkDisplayPlaneAlphaFlagBitsKHR where
-  showsPrec _ VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR"
-  showsPrec _ VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR"
-  showsPrec _ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR"
-  showsPrec _ VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = showString "VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR"
-  
-  showsPrec p (VkDisplayPlaneAlphaFlagBitsKHR x) = showParen (p >= 11) (showString "VkDisplayPlaneAlphaFlagBitsKHR " . showsPrec 11 x)
-
-instance Read VkDisplayPlaneAlphaFlagBitsKHR where
-  readPrec = parens ( choose [ ("VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR)
-                             , ("VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR)
-                             , ("VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR)
-                             , ("VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR", pure VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDisplayPlaneAlphaFlagBitsKHR")
-                        v <- step readPrec
-                        pure (VkDisplayPlaneAlphaFlagBitsKHR v)
-                        )
-                    )
-
-
-pattern VK_DISPLAY_PLANE_ALPHA_OPAQUE_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x1
-
-pattern VK_DISPLAY_PLANE_ALPHA_GLOBAL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x2
-
-pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x4
-
-pattern VK_DISPLAY_PLANE_ALPHA_PER_PIXEL_PREMULTIPLIED_BIT_KHR = VkDisplayPlaneAlphaFlagBitsKHR 0x8
-
-
--- ** VkDisplayModeCreateFlagsKHR
--- | Opaque flag
-newtype VkDisplayModeCreateFlagsKHR = VkDisplayModeCreateFlagsKHR VkFlags
-  deriving (Eq, Storable)
-
-
-data VkDisplayModeCreateInfoKHR =
-  VkDisplayModeCreateInfoKHR{ vkSType :: VkStructureType 
-                            , vkPNext :: Ptr Void 
-                            , vkFlags :: VkDisplayModeCreateFlagsKHR 
-                            , vkParameters :: VkDisplayModeParametersKHR 
-                            }
-  deriving (Eq)
-
-instance Storable VkDisplayModeCreateInfoKHR where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkDisplayModeCreateInfoKHR <$> 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 :: VkDisplayModeCreateInfoKHR))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayModeCreateInfoKHR))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkDisplayModeCreateInfoKHR))
-                *> poke (ptr `plusPtr` 20) (vkParameters (poked :: VkDisplayModeCreateInfoKHR))
-
-
--- ** vkGetPhysicalDeviceDisplayPlanePropertiesKHR
-foreign import ccall "vkGetPhysicalDeviceDisplayPlanePropertiesKHR" vkGetPhysicalDeviceDisplayPlanePropertiesKHR ::
-  VkPhysicalDevice ->
-  Ptr Word32 -> Ptr VkDisplayPlanePropertiesKHR -> IO VkResult
-
-newtype VkDisplayModeKHR = VkDisplayModeKHR Word64
-  deriving (Eq, Storable)
-
-
-data VkDisplayModeParametersKHR =
-  VkDisplayModeParametersKHR{ vkVisibleRegion :: VkExtent2D 
-                            , vkRefreshRate :: Word32 
-                            }
-  deriving (Eq)
-
-instance Storable VkDisplayModeParametersKHR where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkDisplayModeParametersKHR <$> peek (ptr `plusPtr` 0)
-                                        <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkVisibleRegion (poked :: VkDisplayModeParametersKHR))
-                *> poke (ptr `plusPtr` 8) (vkRefreshRate (poked :: VkDisplayModeParametersKHR))
-
-
--- ** VkDisplaySurfaceCreateFlagsKHR
--- | Opaque flag
-newtype VkDisplaySurfaceCreateFlagsKHR = VkDisplaySurfaceCreateFlagsKHR VkFlags
-  deriving (Eq, Storable)
-
-newtype VkDisplayKHR = VkDisplayKHR Word64
-  deriving (Eq, Storable)
-
--- ** vkGetPhysicalDeviceDisplayPropertiesKHR
-foreign import ccall "vkGetPhysicalDeviceDisplayPropertiesKHR" vkGetPhysicalDeviceDisplayPropertiesKHR ::
-  VkPhysicalDevice ->
-  Ptr Word32 -> Ptr VkDisplayPropertiesKHR -> IO VkResult
-
--- ** vkCreateDisplayPlaneSurfaceKHR
-foreign import ccall "vkCreateDisplayPlaneSurfaceKHR" vkCreateDisplayPlaneSurfaceKHR ::
-  VkInstance ->
-  Ptr VkDisplaySurfaceCreateInfoKHR ->
-    Ptr VkAllocationCallbacks -> Ptr VkSurfaceKHR -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/KHR/DisplaySwapchain.hs b/src/Graphics/Vulkan/KHR/DisplaySwapchain.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/KHR/DisplaySwapchain.hs
+++ /dev/null
@@ -1,85 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-module Graphics.Vulkan.KHR.DisplaySwapchain where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Graphics.Vulkan.KHR.Swapchain( VkSwapchainKHR(..)
-                                    , VkSwapchainCreateInfoKHR(..)
-                                    , VkSwapchainCreateFlagsKHR(..)
-                                    )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.KHR.Surface( VkColorSpaceKHR(..)
-                                  , VkSurfaceTransformFlagBitsKHR(..)
-                                  , VkPresentModeKHR(..)
-                                  , VkCompositeAlphaFlagBitsKHR(..)
-                                  , VkSurfaceKHR(..)
-                                  )
-import Data.Int( Int32
-               )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Image( VkImageUsageFlags(..)
-                            , VkImageUsageFlagBits(..)
-                            )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkExtent2D(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkOffset2D(..)
-                           , VkRect2D(..)
-                           , VkStructureType(..)
-                           , VkSharingMode(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
-
-data VkDisplayPresentInfoKHR =
-  VkDisplayPresentInfoKHR{ vkSType :: VkStructureType 
-                         , vkPNext :: Ptr Void 
-                         , vkSrcRect :: VkRect2D 
-                         , vkDstRect :: VkRect2D 
-                         , vkPersistent :: VkBool32 
-                         }
-  deriving (Eq)
-
-instance Storable VkDisplayPresentInfoKHR where
-  sizeOf ~_ = 56
-  alignment ~_ = 8
-  peek ptr = VkDisplayPresentInfoKHR <$> peek (ptr `plusPtr` 0)
-                                     <*> peek (ptr `plusPtr` 8)
-                                     <*> peek (ptr `plusPtr` 16)
-                                     <*> peek (ptr `plusPtr` 32)
-                                     <*> peek (ptr `plusPtr` 48)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkDisplayPresentInfoKHR))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkDisplayPresentInfoKHR))
-                *> poke (ptr `plusPtr` 16) (vkSrcRect (poked :: VkDisplayPresentInfoKHR))
-                *> poke (ptr `plusPtr` 32) (vkDstRect (poked :: VkDisplayPresentInfoKHR))
-                *> poke (ptr `plusPtr` 48) (vkPersistent (poked :: VkDisplayPresentInfoKHR))
-
-
--- ** vkCreateSharedSwapchainsKHR
-foreign import ccall "vkCreateSharedSwapchainsKHR" vkCreateSharedSwapchainsKHR ::
-  VkDevice ->
-  Word32 ->
-    Ptr VkSwapchainCreateInfoKHR ->
-      Ptr VkAllocationCallbacks -> Ptr VkSwapchainKHR -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/KHR/Surface.hs b/src/Graphics/Vulkan/KHR/Surface.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/KHR/Surface.hs
+++ /dev/null
@@ -1,295 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.KHR.Surface where
-
-import Graphics.Vulkan.Device( VkPhysicalDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Image( VkImageUsageFlags(..)
-                            , VkImageUsageFlagBits(..)
-                            )
-import Graphics.Vulkan.DeviceInitialization( VkInstance(..)
-                                           )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkExtent2D(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** vkGetPhysicalDeviceSurfaceFormatsKHR
-foreign import ccall "vkGetPhysicalDeviceSurfaceFormatsKHR" vkGetPhysicalDeviceSurfaceFormatsKHR ::
-  VkPhysicalDevice ->
-  VkSurfaceKHR -> Ptr Word32 -> Ptr VkSurfaceFormatKHR -> IO VkResult
-
--- ** vkGetPhysicalDeviceSurfaceCapabilitiesKHR
-foreign import ccall "vkGetPhysicalDeviceSurfaceCapabilitiesKHR" vkGetPhysicalDeviceSurfaceCapabilitiesKHR ::
-  VkPhysicalDevice ->
-  VkSurfaceKHR -> Ptr VkSurfaceCapabilitiesKHR -> IO VkResult
-
--- ** VkCompositeAlphaFlagsKHR
-
-newtype VkCompositeAlphaFlagBitsKHR = VkCompositeAlphaFlagBitsKHR VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkCompositeAlphaFlagBitsKHR
-type VkCompositeAlphaFlagsKHR = VkCompositeAlphaFlagBitsKHR
-
-instance Show VkCompositeAlphaFlagBitsKHR where
-  showsPrec _ VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = showString "VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR"
-  showsPrec _ VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = showString "VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR"
-  showsPrec _ VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = showString "VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR"
-  showsPrec _ VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = showString "VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR"
-  
-  showsPrec p (VkCompositeAlphaFlagBitsKHR x) = showParen (p >= 11) (showString "VkCompositeAlphaFlagBitsKHR " . showsPrec 11 x)
-
-instance Read VkCompositeAlphaFlagBitsKHR where
-  readPrec = parens ( choose [ ("VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR", pure VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR)
-                             , ("VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR", pure VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR)
-                             , ("VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR", pure VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR)
-                             , ("VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR", pure VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkCompositeAlphaFlagBitsKHR")
-                        v <- step readPrec
-                        pure (VkCompositeAlphaFlagBitsKHR v)
-                        )
-                    )
-
-
-pattern VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x1
-
-pattern VK_COMPOSITE_ALPHA_PRE_MULTIPLIED_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x2
-
-pattern VK_COMPOSITE_ALPHA_POST_MULTIPLIED_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x4
-
-pattern VK_COMPOSITE_ALPHA_INHERIT_BIT_KHR = VkCompositeAlphaFlagBitsKHR 0x8
-
-
--- ** VkPresentModeKHR
-
-newtype VkPresentModeKHR = VkPresentModeKHR Int32
-  deriving (Eq, Storable)
-
-instance Show VkPresentModeKHR where
-  showsPrec _ VK_PRESENT_MODE_IMMEDIATE_KHR = showString "VK_PRESENT_MODE_IMMEDIATE_KHR"
-  showsPrec _ VK_PRESENT_MODE_MAILBOX_KHR = showString "VK_PRESENT_MODE_MAILBOX_KHR"
-  showsPrec _ VK_PRESENT_MODE_FIFO_KHR = showString "VK_PRESENT_MODE_FIFO_KHR"
-  showsPrec _ VK_PRESENT_MODE_FIFO_RELAXED_KHR = showString "VK_PRESENT_MODE_FIFO_RELAXED_KHR"
-  showsPrec p (VkPresentModeKHR x) = showParen (p >= 11) (showString "VkPresentModeKHR " . showsPrec 11 x)
-
-instance Read VkPresentModeKHR where
-  readPrec = parens ( choose [ ("VK_PRESENT_MODE_IMMEDIATE_KHR", pure VK_PRESENT_MODE_IMMEDIATE_KHR)
-                             , ("VK_PRESENT_MODE_MAILBOX_KHR", pure VK_PRESENT_MODE_MAILBOX_KHR)
-                             , ("VK_PRESENT_MODE_FIFO_KHR", pure VK_PRESENT_MODE_FIFO_KHR)
-                             , ("VK_PRESENT_MODE_FIFO_RELAXED_KHR", pure VK_PRESENT_MODE_FIFO_RELAXED_KHR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPresentModeKHR")
-                        v <- step readPrec
-                        pure (VkPresentModeKHR v)
-                        )
-                    )
-
-
-pattern VK_PRESENT_MODE_IMMEDIATE_KHR = VkPresentModeKHR 0
-
-pattern VK_PRESENT_MODE_MAILBOX_KHR = VkPresentModeKHR 1
-
-pattern VK_PRESENT_MODE_FIFO_KHR = VkPresentModeKHR 2
-
-pattern VK_PRESENT_MODE_FIFO_RELAXED_KHR = VkPresentModeKHR 3
-
-newtype VkSurfaceKHR = VkSurfaceKHR Word64
-  deriving (Eq, Storable)
-
--- ** vkGetPhysicalDeviceSurfaceSupportKHR
-foreign import ccall "vkGetPhysicalDeviceSurfaceSupportKHR" vkGetPhysicalDeviceSurfaceSupportKHR ::
-  VkPhysicalDevice ->
-  Word32 -> VkSurfaceKHR -> Ptr VkBool32 -> IO VkResult
-
-
-data VkSurfaceFormatKHR =
-  VkSurfaceFormatKHR{ vkFormat :: VkFormat 
-                    , vkColorSpace :: VkColorSpaceKHR 
-                    }
-  deriving (Eq)
-
-instance Storable VkSurfaceFormatKHR where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek ptr = VkSurfaceFormatKHR <$> peek (ptr `plusPtr` 0)
-                                <*> peek (ptr `plusPtr` 4)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFormat (poked :: VkSurfaceFormatKHR))
-                *> poke (ptr `plusPtr` 4) (vkColorSpace (poked :: VkSurfaceFormatKHR))
-
-
--- ** vkDestroySurfaceKHR
-foreign import ccall "vkDestroySurfaceKHR" vkDestroySurfaceKHR ::
-  VkInstance -> VkSurfaceKHR -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** VkColorSpaceKHR
-
-newtype VkColorSpaceKHR = VkColorSpaceKHR Int32
-  deriving (Eq, Storable)
-
-instance Show VkColorSpaceKHR where
-  showsPrec _ VK_COLORSPACE_SRGB_NONLINEAR_KHR = showString "VK_COLORSPACE_SRGB_NONLINEAR_KHR"
-  showsPrec p (VkColorSpaceKHR x) = showParen (p >= 11) (showString "VkColorSpaceKHR " . showsPrec 11 x)
-
-instance Read VkColorSpaceKHR where
-  readPrec = parens ( choose [ ("VK_COLORSPACE_SRGB_NONLINEAR_KHR", pure VK_COLORSPACE_SRGB_NONLINEAR_KHR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkColorSpaceKHR")
-                        v <- step readPrec
-                        pure (VkColorSpaceKHR v)
-                        )
-                    )
-
-
-pattern VK_COLORSPACE_SRGB_NONLINEAR_KHR = VkColorSpaceKHR 0
-
--- ** vkGetPhysicalDeviceSurfacePresentModesKHR
-foreign import ccall "vkGetPhysicalDeviceSurfacePresentModesKHR" vkGetPhysicalDeviceSurfacePresentModesKHR ::
-  VkPhysicalDevice ->
-  VkSurfaceKHR -> Ptr Word32 -> Ptr VkPresentModeKHR -> IO VkResult
-
--- ** VkSurfaceTransformFlagsKHR
-
-newtype VkSurfaceTransformFlagBitsKHR = VkSurfaceTransformFlagBitsKHR VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkSurfaceTransformFlagBitsKHR
-type VkSurfaceTransformFlagsKHR = VkSurfaceTransformFlagBitsKHR
-
-instance Show VkSurfaceTransformFlagBitsKHR where
-  showsPrec _ VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = showString "VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = showString "VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = showString "VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = showString "VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = showString "VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR"
-  showsPrec _ VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = showString "VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR"
-  
-  showsPrec p (VkSurfaceTransformFlagBitsKHR x) = showParen (p >= 11) (showString "VkSurfaceTransformFlagBitsKHR " . showsPrec 11 x)
-
-instance Read VkSurfaceTransformFlagBitsKHR where
-  readPrec = parens ( choose [ ("VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR", pure VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR", pure VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR", pure VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR", pure VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR", pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR", pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR", pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR", pure VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR)
-                             , ("VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR", pure VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSurfaceTransformFlagBitsKHR")
-                        v <- step readPrec
-                        pure (VkSurfaceTransformFlagBitsKHR v)
-                        )
-                    )
-
-
-pattern VK_SURFACE_TRANSFORM_IDENTITY_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x1
-
-pattern VK_SURFACE_TRANSFORM_ROTATE_90_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x2
-
-pattern VK_SURFACE_TRANSFORM_ROTATE_180_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x4
-
-pattern VK_SURFACE_TRANSFORM_ROTATE_270_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x8
-
-pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x10
-
-pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_90_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x20
-
-pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_180_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x40
-
-pattern VK_SURFACE_TRANSFORM_HORIZONTAL_MIRROR_ROTATE_270_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x80
-
-pattern VK_SURFACE_TRANSFORM_INHERIT_BIT_KHR = VkSurfaceTransformFlagBitsKHR 0x100
-
-
-
-data VkSurfaceCapabilitiesKHR =
-  VkSurfaceCapabilitiesKHR{ vkMinImageCount :: Word32 
-                          , vkMaxImageCount :: Word32 
-                          , vkCurrentExtent :: VkExtent2D 
-                          , vkMinImageExtent :: VkExtent2D 
-                          , vkMaxImageExtent :: VkExtent2D 
-                          , vkMaxImageArrayLayers :: Word32 
-                          , vkSupportedTransforms :: VkSurfaceTransformFlagsKHR 
-                          , vkCurrentTransform :: VkSurfaceTransformFlagBitsKHR 
-                          , vkSupportedCompositeAlpha :: VkCompositeAlphaFlagsKHR 
-                          , vkSupportedUsageFlags :: VkImageUsageFlags 
-                          }
-  deriving (Eq)
-
-instance Storable VkSurfaceCapabilitiesKHR where
-  sizeOf ~_ = 52
-  alignment ~_ = 4
-  peek ptr = VkSurfaceCapabilitiesKHR <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 4)
-                                      <*> peek (ptr `plusPtr` 8)
-                                      <*> peek (ptr `plusPtr` 16)
-                                      <*> peek (ptr `plusPtr` 24)
-                                      <*> peek (ptr `plusPtr` 32)
-                                      <*> peek (ptr `plusPtr` 36)
-                                      <*> peek (ptr `plusPtr` 40)
-                                      <*> peek (ptr `plusPtr` 44)
-                                      <*> peek (ptr `plusPtr` 48)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkMinImageCount (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 4) (vkMaxImageCount (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 8) (vkCurrentExtent (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 16) (vkMinImageExtent (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 24) (vkMaxImageExtent (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 32) (vkMaxImageArrayLayers (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 36) (vkSupportedTransforms (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 40) (vkCurrentTransform (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 44) (vkSupportedCompositeAlpha (poked :: VkSurfaceCapabilitiesKHR))
-                *> poke (ptr `plusPtr` 48) (vkSupportedUsageFlags (poked :: VkSurfaceCapabilitiesKHR))
-
-
diff --git a/src/Graphics/Vulkan/KHR/Swapchain.hs b/src/Graphics/Vulkan/KHR/Swapchain.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/KHR/Swapchain.hs
+++ /dev/null
@@ -1,184 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.KHR.Swapchain where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.KHR.Surface( VkColorSpaceKHR(..)
-                                  , VkSurfaceTransformFlagBitsKHR(..)
-                                  , VkPresentModeKHR(..)
-                                  , VkCompositeAlphaFlagBitsKHR(..)
-                                  , VkSurfaceKHR(..)
-                                  )
-import Graphics.Vulkan.Queue( VkQueue(..)
-                            )
-import Foreign.Storable( Storable(..)
-                       )
-import Graphics.Vulkan.Fence( VkFence(..)
-                            )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Image( VkImageUsageFlags(..)
-                            , VkImage(..)
-                            , VkImageUsageFlagBits(..)
-                            )
-import Graphics.Vulkan.QueueSemaphore( VkSemaphore(..)
-                                     )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkExtent2D(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkStructureType(..)
-                           , VkSharingMode(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
-
-data VkSwapchainCreateInfoKHR =
-  VkSwapchainCreateInfoKHR{ vkSType :: VkStructureType 
-                          , vkPNext :: Ptr Void 
-                          , vkFlags :: VkSwapchainCreateFlagsKHR 
-                          , vkSurface :: VkSurfaceKHR 
-                          , vkMinImageCount :: Word32 
-                          , vkImageFormat :: VkFormat 
-                          , vkImageColorSpace :: VkColorSpaceKHR 
-                          , vkImageExtent :: VkExtent2D 
-                          , vkImageArrayLayers :: Word32 
-                          , vkImageUsage :: VkImageUsageFlags 
-                          , vkImageSharingMode :: VkSharingMode 
-                          , vkQueueFamilyIndexCount :: Word32 
-                          , vkPQueueFamilyIndices :: Ptr Word32 
-                          , vkPreTransform :: VkSurfaceTransformFlagBitsKHR 
-                          , vkCompositeAlpha :: VkCompositeAlphaFlagBitsKHR 
-                          , vkPresentMode :: VkPresentModeKHR 
-                          , vkClipped :: VkBool32 
-                          , vkOldSwapchain :: VkSwapchainKHR 
-                          }
-  deriving (Eq)
-
-instance Storable VkSwapchainCreateInfoKHR where
-  sizeOf ~_ = 104
-  alignment ~_ = 8
-  peek ptr = VkSwapchainCreateInfoKHR <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 8)
-                                      <*> peek (ptr `plusPtr` 16)
-                                      <*> peek (ptr `plusPtr` 24)
-                                      <*> peek (ptr `plusPtr` 32)
-                                      <*> peek (ptr `plusPtr` 36)
-                                      <*> peek (ptr `plusPtr` 40)
-                                      <*> peek (ptr `plusPtr` 44)
-                                      <*> peek (ptr `plusPtr` 52)
-                                      <*> peek (ptr `plusPtr` 56)
-                                      <*> peek (ptr `plusPtr` 60)
-                                      <*> peek (ptr `plusPtr` 64)
-                                      <*> peek (ptr `plusPtr` 72)
-                                      <*> peek (ptr `plusPtr` 80)
-                                      <*> peek (ptr `plusPtr` 84)
-                                      <*> peek (ptr `plusPtr` 88)
-                                      <*> peek (ptr `plusPtr` 92)
-                                      <*> peek (ptr `plusPtr` 96)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 24) (vkSurface (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 32) (vkMinImageCount (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 36) (vkImageFormat (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 40) (vkImageColorSpace (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 44) (vkImageExtent (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 52) (vkImageArrayLayers (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 56) (vkImageUsage (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 60) (vkImageSharingMode (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 64) (vkQueueFamilyIndexCount (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 72) (vkPQueueFamilyIndices (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 80) (vkPreTransform (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 84) (vkCompositeAlpha (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 88) (vkPresentMode (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 92) (vkClipped (poked :: VkSwapchainCreateInfoKHR))
-                *> poke (ptr `plusPtr` 96) (vkOldSwapchain (poked :: VkSwapchainCreateInfoKHR))
-
-
--- ** vkGetSwapchainImagesKHR
-foreign import ccall "vkGetSwapchainImagesKHR" vkGetSwapchainImagesKHR ::
-  VkDevice ->
-  VkSwapchainKHR -> Ptr Word32 -> Ptr VkImage -> IO VkResult
-
--- ** vkDestroySwapchainKHR
-foreign import ccall "vkDestroySwapchainKHR" vkDestroySwapchainKHR ::
-  VkDevice -> VkSwapchainKHR -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** vkQueuePresentKHR
-foreign import ccall "vkQueuePresentKHR" vkQueuePresentKHR ::
-  VkQueue -> Ptr VkPresentInfoKHR -> IO VkResult
-
--- ** VkSwapchainCreateFlagsKHR
--- | Opaque flag
-newtype VkSwapchainCreateFlagsKHR = VkSwapchainCreateFlagsKHR VkFlags
-  deriving (Eq, Storable)
-
--- ** vkCreateSwapchainKHR
-foreign import ccall "vkCreateSwapchainKHR" vkCreateSwapchainKHR ::
-  VkDevice ->
-  Ptr VkSwapchainCreateInfoKHR ->
-    Ptr VkAllocationCallbacks -> Ptr VkSwapchainKHR -> IO VkResult
-
--- ** vkAcquireNextImageKHR
-foreign import ccall "vkAcquireNextImageKHR" vkAcquireNextImageKHR ::
-  VkDevice ->
-  VkSwapchainKHR ->
-    Word64 -> VkSemaphore -> VkFence -> Ptr Word32 -> IO VkResult
-
-
-data VkPresentInfoKHR =
-  VkPresentInfoKHR{ vkSType :: VkStructureType 
-                  , vkPNext :: Ptr Void 
-                  , vkWaitSemaphoreCount :: Word32 
-                  , vkPWaitSemaphores :: Ptr VkSemaphore 
-                  , vkSwapchainCount :: Word32 
-                  , vkPSwapchains :: Ptr VkSwapchainKHR 
-                  , vkPImageIndices :: Ptr Word32 
-                  , vkPResults :: Ptr VkResult 
-                  }
-  deriving (Eq)
-
-instance Storable VkPresentInfoKHR where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkPresentInfoKHR <$> 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 :: VkPresentInfoKHR))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPresentInfoKHR))
-                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkPresentInfoKHR))
-                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkPresentInfoKHR))
-                *> poke (ptr `plusPtr` 32) (vkSwapchainCount (poked :: VkPresentInfoKHR))
-                *> poke (ptr `plusPtr` 40) (vkPSwapchains (poked :: VkPresentInfoKHR))
-                *> poke (ptr `plusPtr` 48) (vkPImageIndices (poked :: VkPresentInfoKHR))
-                *> poke (ptr `plusPtr` 56) (vkPResults (poked :: VkPresentInfoKHR))
-
-
-newtype VkSwapchainKHR = VkSwapchainKHR Word64
-  deriving (Eq, Storable)
-
diff --git a/src/Graphics/Vulkan/LayerDiscovery.hs b/src/Graphics/Vulkan/LayerDiscovery.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/LayerDiscovery.hs
+++ /dev/null
@@ -1,55 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE Strict #-}
-module Graphics.Vulkan.LayerDiscovery where
-
-import Data.Vector.Storable.Sized( Vector
-                                 )
-import Graphics.Vulkan.Device( VkPhysicalDevice(..)
-                             )
-import Data.Word( Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Graphics.Vulkan.Constants( VK_MAX_EXTENSION_NAME_SIZE
-                                , VK_MAX_DESCRIPTION_SIZE
-                                )
-import Graphics.Vulkan.Core( VkResult(..)
-                           )
-import Foreign.C.Types( CChar
-                      )
-
-
-data VkLayerProperties =
-  VkLayerProperties{ vkLayerName :: Vector VK_MAX_EXTENSION_NAME_SIZE CChar 
-                   , vkSpecVersion :: Word32 
-                   , vkImplementationVersion :: Word32 
-                   , vkDescription :: Vector VK_MAX_DESCRIPTION_SIZE CChar 
-                   }
-  deriving (Eq)
-
-instance Storable VkLayerProperties where
-  sizeOf ~_ = 520
-  alignment ~_ = 4
-  peek ptr = VkLayerProperties <$> peek (ptr `plusPtr` 0)
-                               <*> peek (ptr `plusPtr` 256)
-                               <*> peek (ptr `plusPtr` 260)
-                               <*> peek (ptr `plusPtr` 264)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkLayerName (poked :: VkLayerProperties))
-                *> poke (ptr `plusPtr` 256) (vkSpecVersion (poked :: VkLayerProperties))
-                *> poke (ptr `plusPtr` 260) (vkImplementationVersion (poked :: VkLayerProperties))
-                *> poke (ptr `plusPtr` 264) (vkDescription (poked :: VkLayerProperties))
-
-
--- ** vkEnumerateInstanceLayerProperties
-foreign import ccall "vkEnumerateInstanceLayerProperties" vkEnumerateInstanceLayerProperties ::
-  Ptr Word32 -> Ptr VkLayerProperties -> IO VkResult
-
--- ** vkEnumerateDeviceLayerProperties
-foreign import ccall "vkEnumerateDeviceLayerProperties" vkEnumerateDeviceLayerProperties ::
-  VkPhysicalDevice ->
-  Ptr Word32 -> Ptr VkLayerProperties -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/Memory.hs b/src/Graphics/Vulkan/Memory.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Memory.hs
+++ /dev/null
@@ -1,239 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Memory where
-
-import {-# SOURCE #-} Graphics.Vulkan.Device( VkDevice(..)
-                                            )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , FunPtr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize
-                      , CSize(..)
-                      )
-
-newtype VkDeviceMemory = VkDeviceMemory Word64
-  deriving (Eq, Storable)
-
--- ** vkMapMemory
-foreign import ccall "vkMapMemory" vkMapMemory ::
-  VkDevice ->
-  VkDeviceMemory ->
-    VkDeviceSize ->
-      VkDeviceSize -> VkMemoryMapFlags -> Ptr (Ptr Void) -> IO VkResult
-
-type PFN_vkInternalFreeNotification = FunPtr
-  (Ptr Void ->
-     CSize ->
-       VkInternalAllocationType -> VkSystemAllocationScope -> IO ())
-
-
-data VkAllocationCallbacks =
-  VkAllocationCallbacks{ vkPUserData :: Ptr Void 
-                       , vkPfnAllocation :: PFN_vkAllocationFunction 
-                       , vkPfnReallocation :: PFN_vkReallocationFunction 
-                       , vkPfnFree :: PFN_vkFreeFunction 
-                       , vkPfnInternalAllocation :: PFN_vkInternalAllocationNotification 
-                       , vkPfnInternalFree :: PFN_vkInternalFreeNotification 
-                       }
-  deriving (Eq)
-
-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))
-
-
--- ** vkInvalidateMappedMemoryRanges
-foreign import ccall "vkInvalidateMappedMemoryRanges" vkInvalidateMappedMemoryRanges ::
-  VkDevice -> Word32 -> Ptr VkMappedMemoryRange -> IO VkResult
-
--- ** VkSystemAllocationScope
-
-newtype VkSystemAllocationScope = VkSystemAllocationScope Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_SYSTEM_ALLOCATION_SCOPE_COMMAND = VkSystemAllocationScope 0
-
-pattern VK_SYSTEM_ALLOCATION_SCOPE_OBJECT = VkSystemAllocationScope 1
-
-pattern VK_SYSTEM_ALLOCATION_SCOPE_CACHE = VkSystemAllocationScope 2
-
-pattern VK_SYSTEM_ALLOCATION_SCOPE_DEVICE = VkSystemAllocationScope 3
-
-pattern VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE = VkSystemAllocationScope 4
-
--- ** vkFlushMappedMemoryRanges
-foreign import ccall "vkFlushMappedMemoryRanges" vkFlushMappedMemoryRanges ::
-  VkDevice -> Word32 -> Ptr VkMappedMemoryRange -> IO VkResult
-
--- ** VkMemoryMapFlags
--- | Opaque flag
-newtype VkMemoryMapFlags = VkMemoryMapFlags VkFlags
-  deriving (Eq, Storable)
-
-type PFN_vkInternalAllocationNotification = FunPtr
-  (Ptr Void ->
-     CSize ->
-       VkInternalAllocationType -> VkSystemAllocationScope -> IO ())
-
--- ** vkFreeMemory
-foreign import ccall "vkFreeMemory" vkFreeMemory ::
-  VkDevice -> VkDeviceMemory -> Ptr VkAllocationCallbacks -> IO ()
-
-type PFN_vkReallocationFunction = FunPtr
-  (Ptr Void ->
-     Ptr Void ->
-       CSize -> CSize -> VkSystemAllocationScope -> IO (Ptr Void))
-
--- ** vkUnmapMemory
-foreign import ccall "vkUnmapMemory" vkUnmapMemory ::
-  VkDevice -> VkDeviceMemory -> IO ()
-
-type PFN_vkAllocationFunction = FunPtr
-  (Ptr Void ->
-     CSize -> CSize -> VkSystemAllocationScope -> IO (Ptr Void))
-
--- ** VkInternalAllocationType
-
-newtype VkInternalAllocationType = VkInternalAllocationType Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_INTERNAL_ALLOCATION_TYPE_EXECUTABLE = VkInternalAllocationType 0
-
-type PFN_vkFreeFunction = FunPtr (Ptr Void -> Ptr Void -> IO ())
-
--- ** vkGetDeviceMemoryCommitment
-foreign import ccall "vkGetDeviceMemoryCommitment" vkGetDeviceMemoryCommitment ::
-  VkDevice -> VkDeviceMemory -> Ptr VkDeviceSize -> IO ()
-
--- ** vkAllocateMemory
-foreign import ccall "vkAllocateMemory" vkAllocateMemory ::
-  VkDevice ->
-  Ptr VkMemoryAllocateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkDeviceMemory -> IO VkResult
-
-
-data VkMappedMemoryRange =
-  VkMappedMemoryRange{ vkSType :: VkStructureType 
-                     , vkPNext :: Ptr Void 
-                     , vkMemory :: VkDeviceMemory 
-                     , vkOffset :: VkDeviceSize 
-                     , vkSize :: VkDeviceSize 
-                     }
-  deriving (Eq)
-
-instance Storable VkMappedMemoryRange where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkMappedMemoryRange <$> peek (ptr `plusPtr` 0)
-                                 <*> peek (ptr `plusPtr` 8)
-                                 <*> peek (ptr `plusPtr` 16)
-                                 <*> peek (ptr `plusPtr` 24)
-                                 <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMappedMemoryRange))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMappedMemoryRange))
-                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkMappedMemoryRange))
-                *> poke (ptr `plusPtr` 24) (vkOffset (poked :: VkMappedMemoryRange))
-                *> poke (ptr `plusPtr` 32) (vkSize (poked :: VkMappedMemoryRange))
-
-
-
-data VkMemoryAllocateInfo =
-  VkMemoryAllocateInfo{ vkSType :: VkStructureType 
-                      , vkPNext :: Ptr Void 
-                      , vkAllocationSize :: VkDeviceSize 
-                      , vkMemoryTypeIndex :: Word32 
-                      }
-  deriving (Eq)
-
-instance Storable VkMemoryAllocateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkMemoryAllocateInfo <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 8)
-                                  <*> peek (ptr `plusPtr` 16)
-                                  <*> peek (ptr `plusPtr` 24)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkMemoryAllocateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkMemoryAllocateInfo))
-                *> poke (ptr `plusPtr` 16) (vkAllocationSize (poked :: VkMemoryAllocateInfo))
-                *> poke (ptr `plusPtr` 24) (vkMemoryTypeIndex (poked :: VkMemoryAllocateInfo))
-
-
diff --git a/src/Graphics/Vulkan/MemoryManagement.hs b/src/Graphics/Vulkan/MemoryManagement.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/MemoryManagement.hs
+++ /dev/null
@@ -1,63 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-module Graphics.Vulkan.MemoryManagement where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Graphics.Vulkan.Buffer( VkBuffer(..)
-                             )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkDeviceMemory(..)
-                             )
-import Graphics.Vulkan.Image( VkImage(..)
-                            )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkDeviceSize(..)
-                           )
-
--- ** vkGetImageMemoryRequirements
-foreign import ccall "vkGetImageMemoryRequirements" vkGetImageMemoryRequirements ::
-  VkDevice -> VkImage -> Ptr VkMemoryRequirements -> IO ()
-
-
-data VkMemoryRequirements =
-  VkMemoryRequirements{ vkSize :: VkDeviceSize 
-                      , vkAlignment :: VkDeviceSize 
-                      , vkMemoryTypeBits :: Word32 
-                      }
-  deriving (Eq)
-
-instance Storable VkMemoryRequirements where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkMemoryRequirements <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 8)
-                                  <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSize (poked :: VkMemoryRequirements))
-                *> poke (ptr `plusPtr` 8) (vkAlignment (poked :: VkMemoryRequirements))
-                *> poke (ptr `plusPtr` 16) (vkMemoryTypeBits (poked :: VkMemoryRequirements))
-
-
--- ** vkGetBufferMemoryRequirements
-foreign import ccall "vkGetBufferMemoryRequirements" vkGetBufferMemoryRequirements ::
-  VkDevice -> VkBuffer -> Ptr VkMemoryRequirements -> IO ()
-
--- ** vkBindBufferMemory
-foreign import ccall "vkBindBufferMemory" vkBindBufferMemory ::
-  VkDevice ->
-  VkBuffer -> VkDeviceMemory -> VkDeviceSize -> IO VkResult
-
--- ** vkBindImageMemory
-foreign import ccall "vkBindImageMemory" vkBindImageMemory ::
-  VkDevice ->
-  VkImage -> VkDeviceMemory -> VkDeviceSize -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/NamedType.hs b/src/Graphics/Vulkan/NamedType.hs
new file mode 100644
--- /dev/null
+++ b/src/Graphics/Vulkan/NamedType.hs
@@ -0,0 +1,17 @@
+{-# language Strict #-}
+{-# language CPP #-}
+{-# language PolyKinds #-}
+{-# language TypeOperators #-}
+
+module Graphics.Vulkan.NamedType
+  ( (:::)
+  ) where
+
+
+
+
+
+
+
+-- | Annotate a type with a name
+type (name :: k) ::: a = a
diff --git a/src/Graphics/Vulkan/OtherTypes.hs b/src/Graphics/Vulkan/OtherTypes.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/OtherTypes.hs
+++ /dev/null
@@ -1,197 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-module Graphics.Vulkan.OtherTypes where
-
-import Graphics.Vulkan.Buffer( VkBuffer(..)
-                             )
-import Graphics.Vulkan.Pass( VkAccessFlags(..)
-                           , VkAccessFlagBits(..)
-                           )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Image( VkImage(..)
-                            , VkImageLayout(..)
-                            , VkImageAspectFlagBits(..)
-                            , VkImageSubresourceRange(..)
-                            , VkImageAspectFlags(..)
-                            )
-import Graphics.Vulkan.Core( VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-
-
-data VkBufferMemoryBarrier =
-  VkBufferMemoryBarrier{ vkSType :: VkStructureType 
-                       , vkPNext :: Ptr Void 
-                       , vkSrcAccessMask :: VkAccessFlags 
-                       , vkDstAccessMask :: VkAccessFlags 
-                       , vkSrcQueueFamilyIndex :: Word32 
-                       , vkDstQueueFamilyIndex :: Word32 
-                       , vkBuffer :: VkBuffer 
-                       , vkOffset :: VkDeviceSize 
-                       , vkSize :: VkDeviceSize 
-                       }
-  deriving (Eq)
-
-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))
-
-
-
-data VkDrawIndexedIndirectCommand =
-  VkDrawIndexedIndirectCommand{ vkIndexCount :: Word32 
-                              , vkInstanceCount :: Word32 
-                              , vkFirstIndex :: Word32 
-                              , vkVertexOffset :: Int32 
-                              , vkFirstInstance :: Word32 
-                              }
-  deriving (Eq)
-
-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))
-
-
-
-data VkImageMemoryBarrier =
-  VkImageMemoryBarrier{ vkSType :: VkStructureType 
-                      , vkPNext :: Ptr Void 
-                      , vkSrcAccessMask :: VkAccessFlags 
-                      , vkDstAccessMask :: VkAccessFlags 
-                      , vkOldLayout :: VkImageLayout 
-                      , vkNewLayout :: VkImageLayout 
-                      , vkSrcQueueFamilyIndex :: Word32 
-                      , vkDstQueueFamilyIndex :: Word32 
-                      , vkImage :: VkImage 
-                      , vkSubresourceRange :: VkImageSubresourceRange 
-                      }
-  deriving (Eq)
-
-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))
-
-
-
-data VkMemoryBarrier =
-  VkMemoryBarrier{ vkSType :: VkStructureType 
-                 , vkPNext :: Ptr Void 
-                 , vkSrcAccessMask :: VkAccessFlags 
-                 , vkDstAccessMask :: VkAccessFlags 
-                 }
-  deriving (Eq)
-
-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))
-
-
-
-data VkDrawIndirectCommand =
-  VkDrawIndirectCommand{ vkVertexCount :: Word32 
-                       , vkInstanceCount :: Word32 
-                       , vkFirstVertex :: Word32 
-                       , vkFirstInstance :: Word32 
-                       }
-  deriving (Eq)
-
-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))
-
-
-
-data VkDispatchIndirectCommand =
-  VkDispatchIndirectCommand{ vkX :: Word32 
-                           , vkY :: Word32 
-                           , vkZ :: Word32 
-                           }
-  deriving (Eq)
-
-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))
-
-
diff --git a/src/Graphics/Vulkan/Pass.hs b/src/Graphics/Vulkan/Pass.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Pass.hs
+++ /dev/null
@@ -1,507 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Pass where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Graphics.Vulkan.Pipeline( VkPipelineStageFlagBits(..)
-                               , VkPipelineStageFlags(..)
-                               , VkPipelineBindPoint(..)
-                               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)
-                              )
-import Graphics.Vulkan.Image( VkImageLayout(..)
-                            )
-import Graphics.Vulkan.ImageView( VkImageView(..)
-                                )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkExtent2D(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
-
-data VkSubpassDependency =
-  VkSubpassDependency{ vkSrcSubpass :: Word32 
-                     , vkDstSubpass :: Word32 
-                     , vkSrcStageMask :: VkPipelineStageFlags 
-                     , vkDstStageMask :: VkPipelineStageFlags 
-                     , vkSrcAccessMask :: VkAccessFlags 
-                     , vkDstAccessMask :: VkAccessFlags 
-                     , vkDependencyFlags :: VkDependencyFlags 
-                     }
-  deriving (Eq)
-
-instance Storable VkSubpassDependency where
-  sizeOf ~_ = 28
-  alignment ~_ = 4
-  peek ptr = VkSubpassDependency <$> 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) (vkSrcSubpass (poked :: VkSubpassDependency))
-                *> poke (ptr `plusPtr` 4) (vkDstSubpass (poked :: VkSubpassDependency))
-                *> poke (ptr `plusPtr` 8) (vkSrcStageMask (poked :: VkSubpassDependency))
-                *> poke (ptr `plusPtr` 12) (vkDstStageMask (poked :: VkSubpassDependency))
-                *> poke (ptr `plusPtr` 16) (vkSrcAccessMask (poked :: VkSubpassDependency))
-                *> poke (ptr `plusPtr` 20) (vkDstAccessMask (poked :: VkSubpassDependency))
-                *> poke (ptr `plusPtr` 24) (vkDependencyFlags (poked :: VkSubpassDependency))
-
-
--- ** VkSubpassDescriptionFlags
--- | Opaque flag
-newtype VkSubpassDescriptionFlags = VkSubpassDescriptionFlags VkFlags
-  deriving (Eq, Storable)
-
-newtype VkFramebuffer = VkFramebuffer Word64
-  deriving (Eq, Storable)
-
--- ** VkAttachmentDescriptionFlags
-
-newtype VkAttachmentDescriptionFlagBits = VkAttachmentDescriptionFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkAttachmentDescriptionFlagBits
-type VkAttachmentDescriptionFlags = VkAttachmentDescriptionFlagBits
-
-instance Show VkAttachmentDescriptionFlagBits where
-  showsPrec _ VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = showString "VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT"
-  
-  showsPrec p (VkAttachmentDescriptionFlagBits x) = showParen (p >= 11) (showString "VkAttachmentDescriptionFlagBits " . showsPrec 11 x)
-
-instance Read VkAttachmentDescriptionFlagBits where
-  readPrec = parens ( choose [ ("VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT", pure VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkAttachmentDescriptionFlagBits")
-                        v <- step readPrec
-                        pure (VkAttachmentDescriptionFlagBits v)
-                        )
-                    )
-
--- | The attachment may alias physical memory of another attachment in the same render pass
-pattern VK_ATTACHMENT_DESCRIPTION_MAY_ALIAS_BIT = VkAttachmentDescriptionFlagBits 0x1
-
-
--- ** VkDependencyFlags
-
-newtype VkDependencyFlagBits = VkDependencyFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkDependencyFlagBits
-type VkDependencyFlags = VkDependencyFlagBits
-
-instance Show VkDependencyFlagBits where
-  showsPrec _ VK_DEPENDENCY_BY_REGION_BIT = showString "VK_DEPENDENCY_BY_REGION_BIT"
-  
-  showsPrec p (VkDependencyFlagBits x) = showParen (p >= 11) (showString "VkDependencyFlagBits " . showsPrec 11 x)
-
-instance Read VkDependencyFlagBits where
-  readPrec = parens ( choose [ ("VK_DEPENDENCY_BY_REGION_BIT", pure VK_DEPENDENCY_BY_REGION_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDependencyFlagBits")
-                        v <- step readPrec
-                        pure (VkDependencyFlagBits v)
-                        )
-                    )
-
--- | Dependency is per pixel region 
-pattern VK_DEPENDENCY_BY_REGION_BIT = VkDependencyFlagBits 0x1
-
-
--- ** vkDestroyRenderPass
-foreign import ccall "vkDestroyRenderPass" vkDestroyRenderPass ::
-  VkDevice -> VkRenderPass -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** vkCreateFramebuffer
-foreign import ccall "vkCreateFramebuffer" vkCreateFramebuffer ::
-  VkDevice ->
-  Ptr VkFramebufferCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkFramebuffer -> IO VkResult
-
-
-data VkFramebufferCreateInfo =
-  VkFramebufferCreateInfo{ vkSType :: VkStructureType 
-                         , vkPNext :: Ptr Void 
-                         , vkFlags :: VkFramebufferCreateFlags 
-                         , vkRenderPass :: VkRenderPass 
-                         , vkAttachmentCount :: Word32 
-                         , vkPAttachments :: Ptr VkImageView 
-                         , vkWidth :: Word32 
-                         , vkHeight :: Word32 
-                         , vkLayers :: Word32 
-                         }
-  deriving (Eq)
-
-instance Storable VkFramebufferCreateInfo where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkFramebufferCreateInfo <$> 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` 52)
-                                     <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkRenderPass (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkAttachmentCount (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPAttachments (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkWidth (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 52) (vkHeight (poked :: VkFramebufferCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkLayers (poked :: VkFramebufferCreateInfo))
-
-
--- ** vkGetRenderAreaGranularity
-foreign import ccall "vkGetRenderAreaGranularity" vkGetRenderAreaGranularity ::
-  VkDevice -> VkRenderPass -> Ptr VkExtent2D -> IO ()
-
--- ** VkAttachmentLoadOp
-
-newtype VkAttachmentLoadOp = VkAttachmentLoadOp Int32
-  deriving (Eq, Storable)
-
-instance Show VkAttachmentLoadOp where
-  showsPrec _ VK_ATTACHMENT_LOAD_OP_LOAD = showString "VK_ATTACHMENT_LOAD_OP_LOAD"
-  showsPrec _ VK_ATTACHMENT_LOAD_OP_CLEAR = showString "VK_ATTACHMENT_LOAD_OP_CLEAR"
-  showsPrec _ VK_ATTACHMENT_LOAD_OP_DONT_CARE = showString "VK_ATTACHMENT_LOAD_OP_DONT_CARE"
-  showsPrec p (VkAttachmentLoadOp x) = showParen (p >= 11) (showString "VkAttachmentLoadOp " . showsPrec 11 x)
-
-instance Read VkAttachmentLoadOp where
-  readPrec = parens ( choose [ ("VK_ATTACHMENT_LOAD_OP_LOAD", pure VK_ATTACHMENT_LOAD_OP_LOAD)
-                             , ("VK_ATTACHMENT_LOAD_OP_CLEAR", pure VK_ATTACHMENT_LOAD_OP_CLEAR)
-                             , ("VK_ATTACHMENT_LOAD_OP_DONT_CARE", pure VK_ATTACHMENT_LOAD_OP_DONT_CARE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkAttachmentLoadOp")
-                        v <- step readPrec
-                        pure (VkAttachmentLoadOp v)
-                        )
-                    )
-
-
-pattern VK_ATTACHMENT_LOAD_OP_LOAD = VkAttachmentLoadOp 0
-
-pattern VK_ATTACHMENT_LOAD_OP_CLEAR = VkAttachmentLoadOp 1
-
-pattern VK_ATTACHMENT_LOAD_OP_DONT_CARE = VkAttachmentLoadOp 2
-
--- ** VkAttachmentStoreOp
-
-newtype VkAttachmentStoreOp = VkAttachmentStoreOp Int32
-  deriving (Eq, Storable)
-
-instance Show VkAttachmentStoreOp where
-  showsPrec _ VK_ATTACHMENT_STORE_OP_STORE = showString "VK_ATTACHMENT_STORE_OP_STORE"
-  showsPrec _ VK_ATTACHMENT_STORE_OP_DONT_CARE = showString "VK_ATTACHMENT_STORE_OP_DONT_CARE"
-  showsPrec p (VkAttachmentStoreOp x) = showParen (p >= 11) (showString "VkAttachmentStoreOp " . showsPrec 11 x)
-
-instance Read VkAttachmentStoreOp where
-  readPrec = parens ( choose [ ("VK_ATTACHMENT_STORE_OP_STORE", pure VK_ATTACHMENT_STORE_OP_STORE)
-                             , ("VK_ATTACHMENT_STORE_OP_DONT_CARE", pure VK_ATTACHMENT_STORE_OP_DONT_CARE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkAttachmentStoreOp")
-                        v <- step readPrec
-                        pure (VkAttachmentStoreOp v)
-                        )
-                    )
-
-
-pattern VK_ATTACHMENT_STORE_OP_STORE = VkAttachmentStoreOp 0
-
-pattern VK_ATTACHMENT_STORE_OP_DONT_CARE = VkAttachmentStoreOp 1
-
--- ** VkAccessFlags
-
-newtype VkAccessFlagBits = VkAccessFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkAccessFlagBits
-type VkAccessFlags = VkAccessFlagBits
-
-instance Show VkAccessFlagBits where
-  showsPrec _ VK_ACCESS_INDIRECT_COMMAND_READ_BIT = showString "VK_ACCESS_INDIRECT_COMMAND_READ_BIT"
-  showsPrec _ VK_ACCESS_INDEX_READ_BIT = showString "VK_ACCESS_INDEX_READ_BIT"
-  showsPrec _ VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = showString "VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"
-  showsPrec _ VK_ACCESS_UNIFORM_READ_BIT = showString "VK_ACCESS_UNIFORM_READ_BIT"
-  showsPrec _ VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = showString "VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"
-  showsPrec _ VK_ACCESS_SHADER_READ_BIT = showString "VK_ACCESS_SHADER_READ_BIT"
-  showsPrec _ VK_ACCESS_SHADER_WRITE_BIT = showString "VK_ACCESS_SHADER_WRITE_BIT"
-  showsPrec _ VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = showString "VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"
-  showsPrec _ VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = showString "VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"
-  showsPrec _ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = showString "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"
-  showsPrec _ VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = showString "VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"
-  showsPrec _ VK_ACCESS_TRANSFER_READ_BIT = showString "VK_ACCESS_TRANSFER_READ_BIT"
-  showsPrec _ VK_ACCESS_TRANSFER_WRITE_BIT = showString "VK_ACCESS_TRANSFER_WRITE_BIT"
-  showsPrec _ VK_ACCESS_HOST_READ_BIT = showString "VK_ACCESS_HOST_READ_BIT"
-  showsPrec _ VK_ACCESS_HOST_WRITE_BIT = showString "VK_ACCESS_HOST_WRITE_BIT"
-  showsPrec _ VK_ACCESS_MEMORY_READ_BIT = showString "VK_ACCESS_MEMORY_READ_BIT"
-  showsPrec _ VK_ACCESS_MEMORY_WRITE_BIT = showString "VK_ACCESS_MEMORY_WRITE_BIT"
-  
-  showsPrec p (VkAccessFlagBits x) = showParen (p >= 11) (showString "VkAccessFlagBits " . showsPrec 11 x)
-
-instance Read VkAccessFlagBits where
-  readPrec = parens ( choose [ ("VK_ACCESS_INDIRECT_COMMAND_READ_BIT", pure VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
-                             , ("VK_ACCESS_INDEX_READ_BIT", pure VK_ACCESS_INDEX_READ_BIT)
-                             , ("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT", pure VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
-                             , ("VK_ACCESS_UNIFORM_READ_BIT", pure VK_ACCESS_UNIFORM_READ_BIT)
-                             , ("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT", pure VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
-                             , ("VK_ACCESS_SHADER_READ_BIT", pure VK_ACCESS_SHADER_READ_BIT)
-                             , ("VK_ACCESS_SHADER_WRITE_BIT", pure VK_ACCESS_SHADER_WRITE_BIT)
-                             , ("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT", pure VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
-                             , ("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT", pure VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
-                             , ("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT", pure VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
-                             , ("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT", pure VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
-                             , ("VK_ACCESS_TRANSFER_READ_BIT", pure VK_ACCESS_TRANSFER_READ_BIT)
-                             , ("VK_ACCESS_TRANSFER_WRITE_BIT", pure VK_ACCESS_TRANSFER_WRITE_BIT)
-                             , ("VK_ACCESS_HOST_READ_BIT", pure VK_ACCESS_HOST_READ_BIT)
-                             , ("VK_ACCESS_HOST_WRITE_BIT", pure VK_ACCESS_HOST_WRITE_BIT)
-                             , ("VK_ACCESS_MEMORY_READ_BIT", pure VK_ACCESS_MEMORY_READ_BIT)
-                             , ("VK_ACCESS_MEMORY_WRITE_BIT", pure VK_ACCESS_MEMORY_WRITE_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkAccessFlagBits")
-                        v <- step readPrec
-                        pure (VkAccessFlagBits v)
-                        )
-                    )
-
--- | Controls coherency of indirect command reads
-pattern VK_ACCESS_INDIRECT_COMMAND_READ_BIT = VkAccessFlagBits 0x1
--- | Controls coherency of index reads
-pattern VK_ACCESS_INDEX_READ_BIT = VkAccessFlagBits 0x2
--- | Controls coherency of vertex attribute reads
-pattern VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT = VkAccessFlagBits 0x4
--- | Controls coherency of uniform buffer reads
-pattern VK_ACCESS_UNIFORM_READ_BIT = VkAccessFlagBits 0x8
--- | Controls coherency of input attachment reads
-pattern VK_ACCESS_INPUT_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x10
--- | Controls coherency of shader reads
-pattern VK_ACCESS_SHADER_READ_BIT = VkAccessFlagBits 0x20
--- | Controls coherency of shader writes
-pattern VK_ACCESS_SHADER_WRITE_BIT = VkAccessFlagBits 0x40
--- | Controls coherency of color attachment reads
-pattern VK_ACCESS_COLOR_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x80
--- | Controls coherency of color attachment writes
-pattern VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x100
--- | Controls coherency of depth/stencil attachment reads
-pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT = VkAccessFlagBits 0x200
--- | Controls coherency of depth/stencil attachment writes
-pattern VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = VkAccessFlagBits 0x400
--- | Controls coherency of transfer reads
-pattern VK_ACCESS_TRANSFER_READ_BIT = VkAccessFlagBits 0x800
--- | Controls coherency of transfer writes
-pattern VK_ACCESS_TRANSFER_WRITE_BIT = VkAccessFlagBits 0x1000
--- | Controls coherency of host reads
-pattern VK_ACCESS_HOST_READ_BIT = VkAccessFlagBits 0x2000
--- | Controls coherency of host writes
-pattern VK_ACCESS_HOST_WRITE_BIT = VkAccessFlagBits 0x4000
--- | Controls coherency of memory reads
-pattern VK_ACCESS_MEMORY_READ_BIT = VkAccessFlagBits 0x8000
--- | Controls coherency of memory writes
-pattern VK_ACCESS_MEMORY_WRITE_BIT = VkAccessFlagBits 0x10000
-
-
-newtype VkRenderPass = VkRenderPass Word64
-  deriving (Eq, Storable)
-
--- ** vkDestroyFramebuffer
-foreign import ccall "vkDestroyFramebuffer" vkDestroyFramebuffer ::
-  VkDevice -> VkFramebuffer -> Ptr VkAllocationCallbacks -> IO ()
-
-
-data VkAttachmentReference =
-  VkAttachmentReference{ vkAttachment :: Word32 
-                       , vkLayout :: VkImageLayout 
-                       }
-  deriving (Eq)
-
-instance Storable VkAttachmentReference where
-  sizeOf ~_ = 8
-  alignment ~_ = 4
-  peek ptr = VkAttachmentReference <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 4)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAttachment (poked :: VkAttachmentReference))
-                *> poke (ptr `plusPtr` 4) (vkLayout (poked :: VkAttachmentReference))
-
-
--- ** VkRenderPassCreateFlags
--- | Opaque flag
-newtype VkRenderPassCreateFlags = VkRenderPassCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkAttachmentDescription =
-  VkAttachmentDescription{ vkFlags :: VkAttachmentDescriptionFlags 
-                         , vkFormat :: VkFormat 
-                         , vkSamples :: VkSampleCountFlagBits 
-                         , vkLoadOp :: VkAttachmentLoadOp 
-                         , vkStoreOp :: VkAttachmentStoreOp 
-                         , vkStencilLoadOp :: VkAttachmentLoadOp 
-                         , vkStencilStoreOp :: VkAttachmentStoreOp 
-                         , vkInitialLayout :: VkImageLayout 
-                         , vkFinalLayout :: VkImageLayout 
-                         }
-  deriving (Eq)
-
-instance Storable VkAttachmentDescription where
-  sizeOf ~_ = 36
-  alignment ~_ = 4
-  peek ptr = VkAttachmentDescription <$> 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)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 4) (vkFormat (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 8) (vkSamples (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 12) (vkLoadOp (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 16) (vkStoreOp (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 20) (vkStencilLoadOp (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 24) (vkStencilStoreOp (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 28) (vkInitialLayout (poked :: VkAttachmentDescription))
-                *> poke (ptr `plusPtr` 32) (vkFinalLayout (poked :: VkAttachmentDescription))
-
-
-
-data VkSubpassDescription =
-  VkSubpassDescription{ vkFlags :: VkSubpassDescriptionFlags 
-                      , vkPipelineBindPoint :: VkPipelineBindPoint 
-                      , vkInputAttachmentCount :: Word32 
-                      , vkPInputAttachments :: Ptr VkAttachmentReference 
-                      , vkColorAttachmentCount :: Word32 
-                      , vkPColorAttachments :: Ptr VkAttachmentReference 
-                      , vkPResolveAttachments :: Ptr VkAttachmentReference 
-                      , vkPDepthStencilAttachment :: Ptr VkAttachmentReference 
-                      , vkPreserveAttachmentCount :: Word32 
-                      , vkPPreserveAttachments :: Ptr Word32 
-                      }
-  deriving (Eq)
-
-instance Storable VkSubpassDescription where
-  sizeOf ~_ = 72
-  alignment ~_ = 8
-  peek ptr = VkSubpassDescription <$> peek (ptr `plusPtr` 0)
-                                  <*> peek (ptr `plusPtr` 4)
-                                  <*> 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)
-                                  <*> peek (ptr `plusPtr` 64)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFlags (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 4) (vkPipelineBindPoint (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 8) (vkInputAttachmentCount (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 16) (vkPInputAttachments (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 24) (vkColorAttachmentCount (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 32) (vkPColorAttachments (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 40) (vkPResolveAttachments (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 48) (vkPDepthStencilAttachment (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 56) (vkPreserveAttachmentCount (poked :: VkSubpassDescription))
-                *> poke (ptr `plusPtr` 64) (vkPPreserveAttachments (poked :: VkSubpassDescription))
-
-
--- ** vkCreateRenderPass
-foreign import ccall "vkCreateRenderPass" vkCreateRenderPass ::
-  VkDevice ->
-  Ptr VkRenderPassCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkRenderPass -> IO VkResult
-
-
-data VkRenderPassCreateInfo =
-  VkRenderPassCreateInfo{ vkSType :: VkStructureType 
-                        , vkPNext :: Ptr Void 
-                        , vkFlags :: VkRenderPassCreateFlags 
-                        , vkAttachmentCount :: Word32 
-                        , vkPAttachments :: Ptr VkAttachmentDescription 
-                        , vkSubpassCount :: Word32 
-                        , vkPSubpasses :: Ptr VkSubpassDescription 
-                        , vkDependencyCount :: Word32 
-                        , vkPDependencies :: Ptr VkSubpassDependency 
-                        }
-  deriving (Eq)
-
-instance Storable VkRenderPassCreateInfo where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkRenderPassCreateInfo <$> 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)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkAttachmentCount (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPAttachments (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkSubpassCount (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPSubpasses (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkDependencyCount (poked :: VkRenderPassCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkPDependencies (poked :: VkRenderPassCreateInfo))
-
-
--- ** VkFramebufferCreateFlags
--- | Opaque flag
-newtype VkFramebufferCreateFlags = VkFramebufferCreateFlags VkFlags
-  deriving (Eq, Storable)
-
diff --git a/src/Graphics/Vulkan/Pass.hs-boot b/src/Graphics/Vulkan/Pass.hs-boot
deleted file mode 100644
--- a/src/Graphics/Vulkan/Pass.hs-boot
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Pass where
-
-import Data.Word( Word64
-                )
-import Foreign.Storable( Storable(..)
-                       )
-
-newtype VkRenderPass = VkRenderPass Word64
-  
-instance Eq VkRenderPass
-instance Storable VkRenderPass
-
diff --git a/src/Graphics/Vulkan/Pipeline.hs b/src/Graphics/Vulkan/Pipeline.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Pipeline.hs
+++ /dev/null
@@ -1,1418 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE DataKinds #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Pipeline where
-
-import Data.Vector.Storable.Sized( Vector
-                                 )
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import {-# SOURCE #-} Graphics.Vulkan.Pass( VkRenderPass(..)
-                                          )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.PipelineCache( VkPipelineCache(..)
-                                    )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.PipelineLayout( VkPipelineLayout(..)
-                                     )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)
-                             , VkShaderModule(..)
-                             )
-import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)
-                              , VkCompareOp(..)
-                              )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkExtent2D(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkOffset2D(..)
-                           , VkRect2D(..)
-                           , VkViewport(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize
-                      , CFloat
-                      , CFloat(..)
-                      , CChar
-                      , CSize(..)
-                      )
-
-
-data VkPipelineTessellationStateCreateInfo =
-  VkPipelineTessellationStateCreateInfo{ vkSType :: VkStructureType 
-                                       , vkPNext :: Ptr Void 
-                                       , vkFlags :: VkPipelineTessellationStateCreateFlags 
-                                       , vkPatchControlPoints :: Word32 
-                                       }
-  deriving (Eq)
-
-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))
-
-
-
-data VkVertexInputAttributeDescription =
-  VkVertexInputAttributeDescription{ vkLocation :: Word32 
-                                   , vkBinding :: Word32 
-                                   , vkFormat :: VkFormat 
-                                   , vkOffset :: Word32 
-                                   }
-  deriving (Eq)
-
-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))
-
-
-
-data VkGraphicsPipelineCreateInfo =
-  VkGraphicsPipelineCreateInfo{ vkSType :: VkStructureType 
-                              , vkPNext :: Ptr Void 
-                              , vkFlags :: VkPipelineCreateFlags 
-                              , vkStageCount :: Word32 
-                              , vkPStages :: Ptr VkPipelineShaderStageCreateInfo 
-                              , vkPVertexInputState :: Ptr VkPipelineVertexInputStateCreateInfo 
-                              , vkPInputAssemblyState :: Ptr VkPipelineInputAssemblyStateCreateInfo 
-                              , vkPTessellationState :: Ptr VkPipelineTessellationStateCreateInfo 
-                              , vkPViewportState :: Ptr VkPipelineViewportStateCreateInfo 
-                              , vkPRasterizationState :: Ptr VkPipelineRasterizationStateCreateInfo 
-                              , vkPMultisampleState :: Ptr VkPipelineMultisampleStateCreateInfo 
-                              , vkPDepthStencilState :: Ptr VkPipelineDepthStencilStateCreateInfo 
-                              , vkPColorBlendState :: Ptr VkPipelineColorBlendStateCreateInfo 
-                              , vkPDynamicState :: Ptr VkPipelineDynamicStateCreateInfo 
-                              , vkLayout :: VkPipelineLayout 
-                              , vkRenderPass :: VkRenderPass 
-                              , vkSubpass :: Word32 
-                              , vkBasePipelineHandle :: VkPipeline 
-                              , vkBasePipelineIndex :: Int32 
-                              }
-  deriving (Eq)
-
-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))
-
-
--- ** VkCullModeFlags
-
-newtype VkCullModeFlagBits = VkCullModeFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkCullModeFlagBits
-type VkCullModeFlags = VkCullModeFlagBits
-
-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)
-                        )
-                    )
-
-
-pattern VK_CULL_MODE_FRONT_BIT = VkCullModeFlagBits 0x1
-
-pattern VK_CULL_MODE_BACK_BIT = VkCullModeFlagBits 0x2
-
-pattern VK_CULL_MODE_NONE = VkCullModeFlagBits 0x0
-
-pattern VK_CULL_MODE_FRONT_AND_BACK = VkCullModeFlagBits 0x3
-
--- ** VkPipelineDepthStencilStateCreateFlags
--- | Opaque flag
-newtype VkPipelineDepthStencilStateCreateFlags = VkPipelineDepthStencilStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkPipelineShaderStageCreateInfo =
-  VkPipelineShaderStageCreateInfo{ vkSType :: VkStructureType 
-                                 , vkPNext :: Ptr Void 
-                                 , vkFlags :: VkPipelineShaderStageCreateFlags 
-                                 , vkStage :: VkShaderStageFlagBits 
-                                 , vkModule :: VkShaderModule 
-                                 , vkPName :: Ptr CChar 
-                                 , vkPSpecializationInfo :: Ptr VkSpecializationInfo 
-                                 }
-  deriving (Eq)
-
-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))
-
-
--- ** VkColorComponentFlags
-
-newtype VkColorComponentFlagBits = VkColorComponentFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkColorComponentFlagBits
-type VkColorComponentFlags = VkColorComponentFlagBits
-
-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)
-                        )
-                    )
-
-
-pattern VK_COLOR_COMPONENT_R_BIT = VkColorComponentFlagBits 0x1
-
-pattern VK_COLOR_COMPONENT_G_BIT = VkColorComponentFlagBits 0x2
-
-pattern VK_COLOR_COMPONENT_B_BIT = VkColorComponentFlagBits 0x4
-
-pattern VK_COLOR_COMPONENT_A_BIT = VkColorComponentFlagBits 0x8
-
-
-
-data VkComputePipelineCreateInfo =
-  VkComputePipelineCreateInfo{ vkSType :: VkStructureType 
-                             , vkPNext :: Ptr Void 
-                             , vkFlags :: VkPipelineCreateFlags 
-                             , vkStage :: VkPipelineShaderStageCreateInfo 
-                             , vkLayout :: VkPipelineLayout 
-                             , vkBasePipelineHandle :: VkPipeline 
-                             , vkBasePipelineIndex :: Int32 
-                             }
-  deriving (Eq)
-
-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))
-
-
--- ** VkStencilOp
-
-newtype VkStencilOp = VkStencilOp Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_STENCIL_OP_KEEP = VkStencilOp 0
-
-pattern VK_STENCIL_OP_ZERO = VkStencilOp 1
-
-pattern VK_STENCIL_OP_REPLACE = VkStencilOp 2
-
-pattern VK_STENCIL_OP_INCREMENT_AND_CLAMP = VkStencilOp 3
-
-pattern VK_STENCIL_OP_DECREMENT_AND_CLAMP = VkStencilOp 4
-
-pattern VK_STENCIL_OP_INVERT = VkStencilOp 5
-
-pattern VK_STENCIL_OP_INCREMENT_AND_WRAP = VkStencilOp 6
-
-pattern VK_STENCIL_OP_DECREMENT_AND_WRAP = VkStencilOp 7
-
-
-data VkSpecializationInfo =
-  VkSpecializationInfo{ vkMapEntryCount :: Word32 
-                      , vkPMapEntries :: Ptr VkSpecializationMapEntry 
-                      , vkDataSize :: CSize 
-                      , vkPData :: Ptr Void 
-                      }
-  deriving (Eq)
-
-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))
-
-
--- ** VkPipelineColorBlendStateCreateFlags
--- | Opaque flag
-newtype VkPipelineColorBlendStateCreateFlags = VkPipelineColorBlendStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-newtype VkPipeline = VkPipeline Word64
-  deriving (Eq, Storable)
-
--- ** VkPipelineInputAssemblyStateCreateFlags
--- | Opaque flag
-newtype VkPipelineInputAssemblyStateCreateFlags = VkPipelineInputAssemblyStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** vkCreateGraphicsPipelines
-foreign import ccall "vkCreateGraphicsPipelines" vkCreateGraphicsPipelines ::
-  VkDevice ->
-  VkPipelineCache ->
-    Word32 ->
-      Ptr VkGraphicsPipelineCreateInfo ->
-        Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult
-
--- ** VkFrontFace
-
-newtype VkFrontFace = VkFrontFace Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_FRONT_FACE_COUNTER_CLOCKWISE = VkFrontFace 0
-
-pattern VK_FRONT_FACE_CLOCKWISE = VkFrontFace 1
-
--- ** VkPolygonMode
-
-newtype VkPolygonMode = VkPolygonMode Int32
-  deriving (Eq, 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"
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPolygonMode")
-                        v <- step readPrec
-                        pure (VkPolygonMode v)
-                        )
-                    )
-
-
-pattern VK_POLYGON_MODE_FILL = VkPolygonMode 0
-
-pattern VK_POLYGON_MODE_LINE = VkPolygonMode 1
-
-pattern VK_POLYGON_MODE_POINT = VkPolygonMode 2
-
--- ** VkPipelineViewportStateCreateFlags
--- | Opaque flag
-newtype VkPipelineViewportStateCreateFlags = VkPipelineViewportStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** VkLogicOp
-
-newtype VkLogicOp = VkLogicOp Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_LOGIC_OP_CLEAR = VkLogicOp 0
-
-pattern VK_LOGIC_OP_AND = VkLogicOp 1
-
-pattern VK_LOGIC_OP_AND_REVERSE = VkLogicOp 2
-
-pattern VK_LOGIC_OP_COPY = VkLogicOp 3
-
-pattern VK_LOGIC_OP_AND_INVERTED = VkLogicOp 4
-
-pattern VK_LOGIC_OP_NO_OP = VkLogicOp 5
-
-pattern VK_LOGIC_OP_XOR = VkLogicOp 6
-
-pattern VK_LOGIC_OP_OR = VkLogicOp 7
-
-pattern VK_LOGIC_OP_NOR = VkLogicOp 8
-
-pattern VK_LOGIC_OP_EQUIVALENT = VkLogicOp 9
-
-pattern VK_LOGIC_OP_INVERT = VkLogicOp 10
-
-pattern VK_LOGIC_OP_OR_REVERSE = VkLogicOp 11
-
-pattern VK_LOGIC_OP_COPY_INVERTED = VkLogicOp 12
-
-pattern VK_LOGIC_OP_OR_INVERTED = VkLogicOp 13
-
-pattern VK_LOGIC_OP_NAND = VkLogicOp 14
-
-pattern VK_LOGIC_OP_SET = VkLogicOp 15
-
--- ** VkPipelineCreateFlags
-
-newtype VkPipelineCreateFlagBits = VkPipelineCreateFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkPipelineCreateFlagBits
-type VkPipelineCreateFlags = VkPipelineCreateFlagBits
-
-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"
-  
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineCreateFlagBits")
-                        v <- step readPrec
-                        pure (VkPipelineCreateFlagBits v)
-                        )
-                    )
-
-
-pattern VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT = VkPipelineCreateFlagBits 0x1
-
-pattern VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT = VkPipelineCreateFlagBits 0x2
-
-pattern VK_PIPELINE_CREATE_DERIVATIVE_BIT = VkPipelineCreateFlagBits 0x4
-
-
--- ** VkPipelineRasterizationStateCreateFlags
--- | Opaque flag
-newtype VkPipelineRasterizationStateCreateFlags = VkPipelineRasterizationStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** VkDynamicState
-
-newtype VkDynamicState = VkDynamicState Int32
-  deriving (Eq, 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"
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkDynamicState")
-                        v <- step readPrec
-                        pure (VkDynamicState v)
-                        )
-                    )
-
-
-pattern VK_DYNAMIC_STATE_VIEWPORT = VkDynamicState 0
-
-pattern VK_DYNAMIC_STATE_SCISSOR = VkDynamicState 1
-
-pattern VK_DYNAMIC_STATE_LINE_WIDTH = VkDynamicState 2
-
-pattern VK_DYNAMIC_STATE_DEPTH_BIAS = VkDynamicState 3
-
-pattern VK_DYNAMIC_STATE_BLEND_CONSTANTS = VkDynamicState 4
-
-pattern VK_DYNAMIC_STATE_DEPTH_BOUNDS = VkDynamicState 5
-
-pattern VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = VkDynamicState 6
-
-pattern VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = VkDynamicState 7
-
-pattern VK_DYNAMIC_STATE_STENCIL_REFERENCE = VkDynamicState 8
-
--- ** VkPipelineBindPoint
-
-newtype VkPipelineBindPoint = VkPipelineBindPoint Int32
-  deriving (Eq, Storable)
-
-instance Show VkPipelineBindPoint where
-  showsPrec _ VK_PIPELINE_BIND_POINT_GRAPHICS = showString "VK_PIPELINE_BIND_POINT_GRAPHICS"
-  showsPrec _ VK_PIPELINE_BIND_POINT_COMPUTE = showString "VK_PIPELINE_BIND_POINT_COMPUTE"
-  showsPrec p (VkPipelineBindPoint x) = showParen (p >= 11) (showString "VkPipelineBindPoint " . showsPrec 11 x)
-
-instance Read VkPipelineBindPoint where
-  readPrec = parens ( choose [ ("VK_PIPELINE_BIND_POINT_GRAPHICS", pure VK_PIPELINE_BIND_POINT_GRAPHICS)
-                             , ("VK_PIPELINE_BIND_POINT_COMPUTE", pure VK_PIPELINE_BIND_POINT_COMPUTE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineBindPoint")
-                        v <- step readPrec
-                        pure (VkPipelineBindPoint v)
-                        )
-                    )
-
-
-pattern VK_PIPELINE_BIND_POINT_GRAPHICS = VkPipelineBindPoint 0
-
-pattern VK_PIPELINE_BIND_POINT_COMPUTE = VkPipelineBindPoint 1
-
--- ** VkPipelineDynamicStateCreateFlags
--- | Opaque flag
-newtype VkPipelineDynamicStateCreateFlags = VkPipelineDynamicStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkPipelineRasterizationStateCreateInfo =
-  VkPipelineRasterizationStateCreateInfo{ vkSType :: VkStructureType 
-                                        , vkPNext :: Ptr Void 
-                                        , vkFlags :: VkPipelineRasterizationStateCreateFlags 
-                                        , vkDepthClampEnable :: VkBool32 
-                                        , vkRasterizerDiscardEnable :: VkBool32 
-                                        , vkPolygonMode :: VkPolygonMode 
-                                        , vkCullMode :: VkCullModeFlags 
-                                        , vkFrontFace :: VkFrontFace 
-                                        , vkDepthBiasEnable :: VkBool32 
-                                        , vkDepthBiasConstantFactor :: CFloat 
-                                        , vkDepthBiasClamp :: CFloat 
-                                        , vkDepthBiasSlopeFactor :: CFloat 
-                                        , vkLineWidth :: CFloat 
-                                        }
-  deriving (Eq)
-
-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))
-
-
--- ** VkBlendOp
-
-newtype VkBlendOp = VkBlendOp Int32
-  deriving (Eq, 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"
-  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)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkBlendOp")
-                        v <- step readPrec
-                        pure (VkBlendOp v)
-                        )
-                    )
-
-
-pattern VK_BLEND_OP_ADD = VkBlendOp 0
-
-pattern VK_BLEND_OP_SUBTRACT = VkBlendOp 1
-
-pattern VK_BLEND_OP_REVERSE_SUBTRACT = VkBlendOp 2
-
-pattern VK_BLEND_OP_MIN = VkBlendOp 3
-
-pattern VK_BLEND_OP_MAX = VkBlendOp 4
-
--- ** vkDestroyPipeline
-foreign import ccall "vkDestroyPipeline" vkDestroyPipeline ::
-  VkDevice -> VkPipeline -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** VkPipelineShaderStageCreateFlags
--- | Opaque flag
-newtype VkPipelineShaderStageCreateFlags = VkPipelineShaderStageCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkPipelineViewportStateCreateInfo =
-  VkPipelineViewportStateCreateInfo{ vkSType :: VkStructureType 
-                                   , vkPNext :: Ptr Void 
-                                   , vkFlags :: VkPipelineViewportStateCreateFlags 
-                                   , vkViewportCount :: Word32 
-                                   , vkPViewports :: Ptr VkViewport 
-                                   , vkScissorCount :: Word32 
-                                   , vkPScissors :: Ptr VkRect2D 
-                                   }
-  deriving (Eq)
-
-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))
-
-
--- ** VkPipelineTessellationStateCreateFlags
--- | Opaque flag
-newtype VkPipelineTessellationStateCreateFlags = VkPipelineTessellationStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkPipelineVertexInputStateCreateInfo =
-  VkPipelineVertexInputStateCreateInfo{ vkSType :: VkStructureType 
-                                      , vkPNext :: Ptr Void 
-                                      , vkFlags :: VkPipelineVertexInputStateCreateFlags 
-                                      , vkVertexBindingDescriptionCount :: Word32 
-                                      , vkPVertexBindingDescriptions :: Ptr VkVertexInputBindingDescription 
-                                      , vkVertexAttributeDescriptionCount :: Word32 
-                                      , vkPVertexAttributeDescriptions :: Ptr VkVertexInputAttributeDescription 
-                                      }
-  deriving (Eq)
-
-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))
-
-
--- ** VkPrimitiveTopology
-
-newtype VkPrimitiveTopology = VkPrimitiveTopology Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_PRIMITIVE_TOPOLOGY_POINT_LIST = VkPrimitiveTopology 0
-
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST = VkPrimitiveTopology 1
-
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP = VkPrimitiveTopology 2
-
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST = VkPrimitiveTopology 3
-
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP = VkPrimitiveTopology 4
-
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_FAN = VkPrimitiveTopology 5
-
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 6
-
-pattern VK_PRIMITIVE_TOPOLOGY_LINE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 7
-
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST_WITH_ADJACENCY = VkPrimitiveTopology 8
-
-pattern VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP_WITH_ADJACENCY = VkPrimitiveTopology 9
-
-pattern VK_PRIMITIVE_TOPOLOGY_PATCH_LIST = VkPrimitiveTopology 10
-
-
-data VkPipelineInputAssemblyStateCreateInfo =
-  VkPipelineInputAssemblyStateCreateInfo{ vkSType :: VkStructureType 
-                                        , vkPNext :: Ptr Void 
-                                        , vkFlags :: VkPipelineInputAssemblyStateCreateFlags 
-                                        , vkTopology :: VkPrimitiveTopology 
-                                        , vkPrimitiveRestartEnable :: VkBool32 
-                                        }
-  deriving (Eq)
-
-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))
-
-
-
-data VkPipelineColorBlendStateCreateInfo =
-  VkPipelineColorBlendStateCreateInfo{ vkSType :: VkStructureType 
-                                     , vkPNext :: Ptr Void 
-                                     , vkFlags :: VkPipelineColorBlendStateCreateFlags 
-                                     , vkLogicOpEnable :: VkBool32 
-                                     , vkLogicOp :: VkLogicOp 
-                                     , vkAttachmentCount :: Word32 
-                                     , vkPAttachments :: Ptr VkPipelineColorBlendAttachmentState 
-                                     , vkBlendConstants :: Vector 4 CFloat 
-                                     }
-  deriving (Eq)
-
-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))
-
-
-
-data VkPipelineDynamicStateCreateInfo =
-  VkPipelineDynamicStateCreateInfo{ vkSType :: VkStructureType 
-                                  , vkPNext :: Ptr Void 
-                                  , vkFlags :: VkPipelineDynamicStateCreateFlags 
-                                  , vkDynamicStateCount :: Word32 
-                                  , vkPDynamicStates :: Ptr VkDynamicState 
-                                  }
-  deriving (Eq)
-
-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))
-
-
-
-data VkSpecializationMapEntry =
-  VkSpecializationMapEntry{ vkConstantID :: Word32 
-                          , vkOffset :: Word32 
-                          , vkSize :: CSize 
-                          }
-  deriving (Eq)
-
-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))
-
-
--- ** VkPipelineVertexInputStateCreateFlags
--- | Opaque flag
-newtype VkPipelineVertexInputStateCreateFlags = VkPipelineVertexInputStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** VkVertexInputRate
-
-newtype VkVertexInputRate = VkVertexInputRate Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_VERTEX_INPUT_RATE_VERTEX = VkVertexInputRate 0
-
-pattern VK_VERTEX_INPUT_RATE_INSTANCE = VkVertexInputRate 1
-
--- ** VkPipelineStageFlags
-
-newtype VkPipelineStageFlagBits = VkPipelineStageFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkPipelineStageFlagBits
-type VkPipelineStageFlags = VkPipelineStageFlagBits
-
-instance Show VkPipelineStageFlagBits where
-  showsPrec _ VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = showString "VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = showString "VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = showString "VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = showString "VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = showString "VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = showString "VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = showString "VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = showString "VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = showString "VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = showString "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = showString "VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = showString "VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_TRANSFER_BIT = showString "VK_PIPELINE_STAGE_TRANSFER_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = showString "VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_HOST_BIT = showString "VK_PIPELINE_STAGE_HOST_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = showString "VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"
-  showsPrec _ VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = showString "VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"
-  
-  showsPrec p (VkPipelineStageFlagBits x) = showParen (p >= 11) (showString "VkPipelineStageFlagBits " . showsPrec 11 x)
-
-instance Read VkPipelineStageFlagBits where
-  readPrec = parens ( choose [ ("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT", pure VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
-                             , ("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT", pure VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
-                             , ("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT", pure VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
-                             , ("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT", pure VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
-                             , ("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT", pure VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
-                             , ("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT", pure VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
-                             , ("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT", pure VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
-                             , ("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT", pure VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
-                             , ("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT", pure VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
-                             , ("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT", pure VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
-                             , ("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT", pure VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
-                             , ("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT", pure VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
-                             , ("VK_PIPELINE_STAGE_TRANSFER_BIT", pure VK_PIPELINE_STAGE_TRANSFER_BIT)
-                             , ("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT", pure VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
-                             , ("VK_PIPELINE_STAGE_HOST_BIT", pure VK_PIPELINE_STAGE_HOST_BIT)
-                             , ("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT", pure VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
-                             , ("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT", pure VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkPipelineStageFlagBits")
-                        v <- step readPrec
-                        pure (VkPipelineStageFlagBits v)
-                        )
-                    )
-
--- | Before subsequent commands are processed
-pattern VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT = VkPipelineStageFlagBits 0x1
--- | Draw/DispatchIndirect command fetch
-pattern VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT = VkPipelineStageFlagBits 0x2
--- | Vertex/index fetch
-pattern VK_PIPELINE_STAGE_VERTEX_INPUT_BIT = VkPipelineStageFlagBits 0x4
--- | Vertex shading
-pattern VK_PIPELINE_STAGE_VERTEX_SHADER_BIT = VkPipelineStageFlagBits 0x8
--- | Tessellation control shading
-pattern VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT = VkPipelineStageFlagBits 0x10
--- | Tessellation evaluation shading
-pattern VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT = VkPipelineStageFlagBits 0x20
--- | Geometry shading
-pattern VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT = VkPipelineStageFlagBits 0x40
--- | Fragment shading
-pattern VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT = VkPipelineStageFlagBits 0x80
--- | Early fragment (depth and stencil) tests
-pattern VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x100
--- | Late fragment (depth and stencil) tests
-pattern VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT = VkPipelineStageFlagBits 0x200
--- | Color attachment writes
-pattern VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT = VkPipelineStageFlagBits 0x400
--- | Compute shading
-pattern VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT = VkPipelineStageFlagBits 0x800
--- | Transfer/copy operations
-pattern VK_PIPELINE_STAGE_TRANSFER_BIT = VkPipelineStageFlagBits 0x1000
--- | After previous commands have completed
-pattern VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT = VkPipelineStageFlagBits 0x2000
--- | Indicates host (CPU) is a source/sink of the dependency
-pattern VK_PIPELINE_STAGE_HOST_BIT = VkPipelineStageFlagBits 0x4000
--- | All stages of the graphics pipeline
-pattern VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = VkPipelineStageFlagBits 0x8000
--- | All stages supported on the queue
-pattern VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = VkPipelineStageFlagBits 0x10000
-
-
-
-data VkPipelineColorBlendAttachmentState =
-  VkPipelineColorBlendAttachmentState{ vkBlendEnable :: VkBool32 
-                                     , vkSrcColorBlendFactor :: VkBlendFactor 
-                                     , vkDstColorBlendFactor :: VkBlendFactor 
-                                     , vkColorBlendOp :: VkBlendOp 
-                                     , vkSrcAlphaBlendFactor :: VkBlendFactor 
-                                     , vkDstAlphaBlendFactor :: VkBlendFactor 
-                                     , vkAlphaBlendOp :: VkBlendOp 
-                                     , vkColorWriteMask :: VkColorComponentFlags 
-                                     }
-  deriving (Eq)
-
-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))
-
-
--- ** VkBlendFactor
-
-newtype VkBlendFactor = VkBlendFactor Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_BLEND_FACTOR_ZERO = VkBlendFactor 0
-
-pattern VK_BLEND_FACTOR_ONE = VkBlendFactor 1
-
-pattern VK_BLEND_FACTOR_SRC_COLOR = VkBlendFactor 2
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_COLOR = VkBlendFactor 3
-
-pattern VK_BLEND_FACTOR_DST_COLOR = VkBlendFactor 4
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_DST_COLOR = VkBlendFactor 5
-
-pattern VK_BLEND_FACTOR_SRC_ALPHA = VkBlendFactor 6
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA = VkBlendFactor 7
-
-pattern VK_BLEND_FACTOR_DST_ALPHA = VkBlendFactor 8
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_DST_ALPHA = VkBlendFactor 9
-
-pattern VK_BLEND_FACTOR_CONSTANT_COLOR = VkBlendFactor 10
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_COLOR = VkBlendFactor 11
-
-pattern VK_BLEND_FACTOR_CONSTANT_ALPHA = VkBlendFactor 12
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_CONSTANT_ALPHA = VkBlendFactor 13
-
-pattern VK_BLEND_FACTOR_SRC_ALPHA_SATURATE = VkBlendFactor 14
-
-pattern VK_BLEND_FACTOR_SRC1_COLOR = VkBlendFactor 15
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_COLOR = VkBlendFactor 16
-
-pattern VK_BLEND_FACTOR_SRC1_ALPHA = VkBlendFactor 17
-
-pattern VK_BLEND_FACTOR_ONE_MINUS_SRC1_ALPHA = VkBlendFactor 18
-
-newtype VkSampleMask = VkSampleMask Word32
-  deriving (Eq, Storable)
-
--- ** VkPipelineMultisampleStateCreateFlags
--- | Opaque flag
-newtype VkPipelineMultisampleStateCreateFlags = VkPipelineMultisampleStateCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-
-data VkPipelineMultisampleStateCreateInfo =
-  VkPipelineMultisampleStateCreateInfo{ vkSType :: VkStructureType 
-                                      , vkPNext :: Ptr Void 
-                                      , vkFlags :: VkPipelineMultisampleStateCreateFlags 
-                                      , vkRasterizationSamples :: VkSampleCountFlagBits 
-                                      , vkSampleShadingEnable :: VkBool32 
-                                      , vkMinSampleShading :: CFloat 
-                                      , vkPSampleMask :: Ptr VkSampleMask 
-                                      , vkAlphaToCoverageEnable :: VkBool32 
-                                      , vkAlphaToOneEnable :: VkBool32 
-                                      }
-  deriving (Eq)
-
-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))
-
-
-
-data VkVertexInputBindingDescription =
-  VkVertexInputBindingDescription{ vkBinding :: Word32 
-                                 , vkStride :: Word32 
-                                 , vkInputRate :: VkVertexInputRate 
-                                 }
-  deriving (Eq)
-
-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))
-
-
-
-data VkPipelineDepthStencilStateCreateInfo =
-  VkPipelineDepthStencilStateCreateInfo{ vkSType :: VkStructureType 
-                                       , vkPNext :: Ptr Void 
-                                       , vkFlags :: VkPipelineDepthStencilStateCreateFlags 
-                                       , vkDepthTestEnable :: VkBool32 
-                                       , vkDepthWriteEnable :: VkBool32 
-                                       , vkDepthCompareOp :: VkCompareOp 
-                                       , vkDepthBoundsTestEnable :: VkBool32 
-                                       , vkStencilTestEnable :: VkBool32 
-                                       , vkFront :: VkStencilOpState 
-                                       , vkBack :: VkStencilOpState 
-                                       , vkMinDepthBounds :: CFloat 
-                                       , vkMaxDepthBounds :: CFloat 
-                                       }
-  deriving (Eq)
-
-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))
-
-
--- ** vkCreateComputePipelines
-foreign import ccall "vkCreateComputePipelines" vkCreateComputePipelines ::
-  VkDevice ->
-  VkPipelineCache ->
-    Word32 ->
-      Ptr VkComputePipelineCreateInfo ->
-        Ptr VkAllocationCallbacks -> Ptr VkPipeline -> IO VkResult
-
-
-data VkStencilOpState =
-  VkStencilOpState{ vkFailOp :: VkStencilOp 
-                  , vkPassOp :: VkStencilOp 
-                  , vkDepthFailOp :: VkStencilOp 
-                  , vkCompareOp :: VkCompareOp 
-                  , vkCompareMask :: Word32 
-                  , vkWriteMask :: Word32 
-                  , vkReference :: Word32 
-                  }
-  deriving (Eq)
-
-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))
-
-
diff --git a/src/Graphics/Vulkan/PipelineCache.hs b/src/Graphics/Vulkan/PipelineCache.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/PipelineCache.hs
+++ /dev/null
@@ -1,86 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.PipelineCache where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize
-                      , CSize(..)
-                      )
-
--- ** vkCreatePipelineCache
-foreign import ccall "vkCreatePipelineCache" vkCreatePipelineCache ::
-  VkDevice ->
-  Ptr VkPipelineCacheCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkPipelineCache -> IO VkResult
-
--- ** vkGetPipelineCacheData
-foreign import ccall "vkGetPipelineCacheData" vkGetPipelineCacheData ::
-  VkDevice -> VkPipelineCache -> Ptr CSize -> Ptr Void -> IO VkResult
-
-newtype VkPipelineCache = VkPipelineCache Word64
-  deriving (Eq, Storable)
-
-
-data VkPipelineCacheCreateInfo =
-  VkPipelineCacheCreateInfo{ vkSType :: VkStructureType 
-                           , vkPNext :: Ptr Void 
-                           , vkFlags :: VkPipelineCacheCreateFlags 
-                           , vkInitialDataSize :: CSize 
-                           , vkPInitialData :: Ptr Void 
-                           }
-  deriving (Eq)
-
-instance Storable VkPipelineCacheCreateInfo where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkPipelineCacheCreateInfo <$> peek (ptr `plusPtr` 0)
-                                       <*> peek (ptr `plusPtr` 8)
-                                       <*> peek (ptr `plusPtr` 16)
-                                       <*> peek (ptr `plusPtr` 24)
-                                       <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkPipelineCacheCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineCacheCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineCacheCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkInitialDataSize (poked :: VkPipelineCacheCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPInitialData (poked :: VkPipelineCacheCreateInfo))
-
-
--- ** vkMergePipelineCaches
-foreign import ccall "vkMergePipelineCaches" vkMergePipelineCaches ::
-  VkDevice ->
-  VkPipelineCache -> Word32 -> Ptr VkPipelineCache -> IO VkResult
-
--- ** VkPipelineCacheCreateFlags
--- | Opaque flag
-newtype VkPipelineCacheCreateFlags = VkPipelineCacheCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** vkDestroyPipelineCache
-foreign import ccall "vkDestroyPipelineCache" vkDestroyPipelineCache ::
-  VkDevice -> VkPipelineCache -> Ptr VkAllocationCallbacks -> IO ()
-
diff --git a/src/Graphics/Vulkan/PipelineLayout.hs b/src/Graphics/Vulkan/PipelineLayout.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/PipelineLayout.hs
+++ /dev/null
@@ -1,106 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.PipelineLayout where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.DescriptorSet( VkDescriptorSetLayout(..)
-                                    )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Shader( VkShaderStageFlagBits(..)
-                             , VkShaderStageFlags(..)
-                             )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** VkPipelineLayoutCreateFlags
--- | Opaque flag
-newtype VkPipelineLayoutCreateFlags = VkPipelineLayoutCreateFlags VkFlags
-  deriving (Eq, Storable)
-
-newtype VkPipelineLayout = VkPipelineLayout Word64
-  deriving (Eq, Storable)
-
--- ** vkDestroyPipelineLayout
-foreign import ccall "vkDestroyPipelineLayout" vkDestroyPipelineLayout ::
-  VkDevice -> VkPipelineLayout -> Ptr VkAllocationCallbacks -> IO ()
-
-
-data VkPushConstantRange =
-  VkPushConstantRange{ vkStageFlags :: VkShaderStageFlags 
-                     , vkOffset :: Word32 
-                     , vkSize :: Word32 
-                     }
-  deriving (Eq)
-
-instance Storable VkPushConstantRange where
-  sizeOf ~_ = 12
-  alignment ~_ = 4
-  peek ptr = VkPushConstantRange <$> peek (ptr `plusPtr` 0)
-                                 <*> peek (ptr `plusPtr` 4)
-                                 <*> peek (ptr `plusPtr` 8)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkStageFlags (poked :: VkPushConstantRange))
-                *> poke (ptr `plusPtr` 4) (vkOffset (poked :: VkPushConstantRange))
-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkPushConstantRange))
-
-
-
-data VkPipelineLayoutCreateInfo =
-  VkPipelineLayoutCreateInfo{ vkSType :: VkStructureType 
-                            , vkPNext :: Ptr Void 
-                            , vkFlags :: VkPipelineLayoutCreateFlags 
-                            , vkSetLayoutCount :: Word32 
-                            , vkPSetLayouts :: Ptr VkDescriptorSetLayout 
-                            , vkPushConstantRangeCount :: Word32 
-                            , vkPPushConstantRanges :: Ptr VkPushConstantRange 
-                            }
-  deriving (Eq)
-
-instance Storable VkPipelineLayoutCreateInfo where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkPipelineLayoutCreateInfo <$> 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 :: VkPipelineLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkPipelineLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkPipelineLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkSetLayoutCount (poked :: VkPipelineLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkPSetLayouts (poked :: VkPipelineLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPushConstantRangeCount (poked :: VkPipelineLayoutCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkPPushConstantRanges (poked :: VkPipelineLayoutCreateInfo))
-
-
--- ** vkCreatePipelineLayout
-foreign import ccall "vkCreatePipelineLayout" vkCreatePipelineLayout ::
-  VkDevice ->
-  Ptr VkPipelineLayoutCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkPipelineLayout -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/Query.hs b/src/Graphics/Vulkan/Query.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Query.hs
+++ /dev/null
@@ -1,271 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Query where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize
-                      , CSize(..)
-                      )
-
--- ** vkGetQueryPoolResults
-foreign import ccall "vkGetQueryPoolResults" vkGetQueryPoolResults ::
-  VkDevice ->
-  VkQueryPool ->
-    Word32 ->
-      Word32 ->
-        CSize ->
-          Ptr Void -> VkDeviceSize -> VkQueryResultFlags -> IO VkResult
-
--- ** vkDestroyQueryPool
-foreign import ccall "vkDestroyQueryPool" vkDestroyQueryPool ::
-  VkDevice -> VkQueryPool -> Ptr VkAllocationCallbacks -> IO ()
-
-
-data VkQueryPoolCreateInfo =
-  VkQueryPoolCreateInfo{ vkSType :: VkStructureType 
-                       , vkPNext :: Ptr Void 
-                       , vkFlags :: VkQueryPoolCreateFlags 
-                       , vkQueryType :: VkQueryType 
-                       , vkQueryCount :: Word32 
-                       , vkPipelineStatistics :: VkQueryPipelineStatisticFlags 
-                       }
-  deriving (Eq)
-
-instance Storable VkQueryPoolCreateInfo where
-  sizeOf ~_ = 32
-  alignment ~_ = 8
-  peek ptr = VkQueryPoolCreateInfo <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 16)
-                                   <*> peek (ptr `plusPtr` 20)
-                                   <*> peek (ptr `plusPtr` 24)
-                                   <*> peek (ptr `plusPtr` 28)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkQueryPoolCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkQueryPoolCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkQueryPoolCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkQueryType (poked :: VkQueryPoolCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkQueryCount (poked :: VkQueryPoolCreateInfo))
-                *> poke (ptr `plusPtr` 28) (vkPipelineStatistics (poked :: VkQueryPoolCreateInfo))
-
-
--- ** VkQueryResultFlags
-
-newtype VkQueryResultFlagBits = VkQueryResultFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkQueryResultFlagBits
-type VkQueryResultFlags = VkQueryResultFlagBits
-
-instance Show VkQueryResultFlagBits where
-  showsPrec _ VK_QUERY_RESULT_64_BIT = showString "VK_QUERY_RESULT_64_BIT"
-  showsPrec _ VK_QUERY_RESULT_WAIT_BIT = showString "VK_QUERY_RESULT_WAIT_BIT"
-  showsPrec _ VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = showString "VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"
-  showsPrec _ VK_QUERY_RESULT_PARTIAL_BIT = showString "VK_QUERY_RESULT_PARTIAL_BIT"
-  
-  showsPrec p (VkQueryResultFlagBits x) = showParen (p >= 11) (showString "VkQueryResultFlagBits " . showsPrec 11 x)
-
-instance Read VkQueryResultFlagBits where
-  readPrec = parens ( choose [ ("VK_QUERY_RESULT_64_BIT", pure VK_QUERY_RESULT_64_BIT)
-                             , ("VK_QUERY_RESULT_WAIT_BIT", pure VK_QUERY_RESULT_WAIT_BIT)
-                             , ("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT", pure VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
-                             , ("VK_QUERY_RESULT_PARTIAL_BIT", pure VK_QUERY_RESULT_PARTIAL_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkQueryResultFlagBits")
-                        v <- step readPrec
-                        pure (VkQueryResultFlagBits v)
-                        )
-                    )
-
--- | Results of the queries are written to the destination buffer as 64-bit values
-pattern VK_QUERY_RESULT_64_BIT = VkQueryResultFlagBits 0x1
--- | Results of the queries are waited on before proceeding with the result copy
-pattern VK_QUERY_RESULT_WAIT_BIT = VkQueryResultFlagBits 0x2
--- | Besides the results of the query, the availability of the results is also written
-pattern VK_QUERY_RESULT_WITH_AVAILABILITY_BIT = VkQueryResultFlagBits 0x4
--- | Copy the partial results of the query even if the final results aren't available
-pattern VK_QUERY_RESULT_PARTIAL_BIT = VkQueryResultFlagBits 0x8
-
-
--- ** VkQueryType
-
-newtype VkQueryType = VkQueryType Int32
-  deriving (Eq, Storable)
-
-instance Show VkQueryType where
-  showsPrec _ VK_QUERY_TYPE_OCCLUSION = showString "VK_QUERY_TYPE_OCCLUSION"
-  showsPrec _ VK_QUERY_TYPE_PIPELINE_STATISTICS = showString "VK_QUERY_TYPE_PIPELINE_STATISTICS"
-  showsPrec _ VK_QUERY_TYPE_TIMESTAMP = showString "VK_QUERY_TYPE_TIMESTAMP"
-  showsPrec p (VkQueryType x) = showParen (p >= 11) (showString "VkQueryType " . showsPrec 11 x)
-
-instance Read VkQueryType where
-  readPrec = parens ( choose [ ("VK_QUERY_TYPE_OCCLUSION", pure VK_QUERY_TYPE_OCCLUSION)
-                             , ("VK_QUERY_TYPE_PIPELINE_STATISTICS", pure VK_QUERY_TYPE_PIPELINE_STATISTICS)
-                             , ("VK_QUERY_TYPE_TIMESTAMP", pure VK_QUERY_TYPE_TIMESTAMP)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkQueryType")
-                        v <- step readPrec
-                        pure (VkQueryType v)
-                        )
-                    )
-
-
-pattern VK_QUERY_TYPE_OCCLUSION = VkQueryType 0
--- | Optional
-pattern VK_QUERY_TYPE_PIPELINE_STATISTICS = VkQueryType 1
-
-pattern VK_QUERY_TYPE_TIMESTAMP = VkQueryType 2
-
-newtype VkQueryPool = VkQueryPool Word64
-  deriving (Eq, Storable)
-
--- ** vkCreateQueryPool
-foreign import ccall "vkCreateQueryPool" vkCreateQueryPool ::
-  VkDevice ->
-  Ptr VkQueryPoolCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkQueryPool -> IO VkResult
-
--- ** VkQueryControlFlags
-
-newtype VkQueryControlFlagBits = VkQueryControlFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkQueryControlFlagBits
-type VkQueryControlFlags = VkQueryControlFlagBits
-
-instance Show VkQueryControlFlagBits where
-  showsPrec _ VK_QUERY_CONTROL_PRECISE_BIT = showString "VK_QUERY_CONTROL_PRECISE_BIT"
-  
-  showsPrec p (VkQueryControlFlagBits x) = showParen (p >= 11) (showString "VkQueryControlFlagBits " . showsPrec 11 x)
-
-instance Read VkQueryControlFlagBits where
-  readPrec = parens ( choose [ ("VK_QUERY_CONTROL_PRECISE_BIT", pure VK_QUERY_CONTROL_PRECISE_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkQueryControlFlagBits")
-                        v <- step readPrec
-                        pure (VkQueryControlFlagBits v)
-                        )
-                    )
-
--- | Require precise results to be collected by the query
-pattern VK_QUERY_CONTROL_PRECISE_BIT = VkQueryControlFlagBits 0x1
-
-
--- ** VkQueryPoolCreateFlags
--- | Opaque flag
-newtype VkQueryPoolCreateFlags = VkQueryPoolCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** VkQueryPipelineStatisticFlags
-
-newtype VkQueryPipelineStatisticFlagBits = VkQueryPipelineStatisticFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkQueryPipelineStatisticFlagBits
-type VkQueryPipelineStatisticFlags = VkQueryPipelineStatisticFlagBits
-
-instance Show VkQueryPipelineStatisticFlagBits where
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"
-  showsPrec _ VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = showString "VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"
-  
-  showsPrec p (VkQueryPipelineStatisticFlagBits x) = showParen (p >= 11) (showString "VkQueryPipelineStatisticFlagBits " . showsPrec 11 x)
-
-instance Read VkQueryPipelineStatisticFlagBits where
-  readPrec = parens ( choose [ ("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT", pure VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT", pure VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT", pure VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT", pure VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT", pure VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT", pure VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT", pure VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT", pure VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT", pure VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT", pure VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
-                             , ("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT", pure VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkQueryPipelineStatisticFlagBits")
-                        v <- step readPrec
-                        pure (VkQueryPipelineStatisticFlagBits v)
-                        )
-                    )
-
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT = VkQueryPipelineStatisticFlagBits 0x1
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x2
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x4
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x8
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x10
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x20
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT = VkQueryPipelineStatisticFlagBits 0x40
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x80
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT = VkQueryPipelineStatisticFlagBits 0x100
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x200
--- | Optional
-pattern VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT = VkQueryPipelineStatisticFlagBits 0x400
-
-
diff --git a/src/Graphics/Vulkan/Queue.hs b/src/Graphics/Vulkan/Queue.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Queue.hs
+++ /dev/null
@@ -1,86 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-module Graphics.Vulkan.Queue where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Graphics.Vulkan.Pipeline( VkPipelineStageFlagBits(..)
-                               , VkPipelineStageFlags(..)
-                               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.CommandBuffer( VkCommandBuffer(..)
-                                    )
-import Foreign.Storable( Storable(..)
-                       )
-import Graphics.Vulkan.Fence( VkFence(..)
-                            )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.QueueSemaphore( VkSemaphore(..)
-                                     )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-
-data VkQueue_T
-type VkQueue = Ptr VkQueue_T
-
--- ** vkDeviceWaitIdle
-foreign import ccall "vkDeviceWaitIdle" vkDeviceWaitIdle ::
-  VkDevice -> IO VkResult
-
--- ** vkQueueSubmit
-foreign import ccall "vkQueueSubmit" vkQueueSubmit ::
-  VkQueue -> Word32 -> Ptr VkSubmitInfo -> VkFence -> IO VkResult
-
--- ** vkQueueWaitIdle
-foreign import ccall "vkQueueWaitIdle" vkQueueWaitIdle ::
-  VkQueue -> IO VkResult
-
--- ** vkGetDeviceQueue
-foreign import ccall "vkGetDeviceQueue" vkGetDeviceQueue ::
-  VkDevice -> Word32 -> Word32 -> Ptr VkQueue -> IO ()
-
-
-data VkSubmitInfo =
-  VkSubmitInfo{ vkSType :: VkStructureType 
-              , vkPNext :: Ptr Void 
-              , vkWaitSemaphoreCount :: Word32 
-              , vkPWaitSemaphores :: Ptr VkSemaphore 
-              , vkPWaitDstStageMask :: Ptr VkPipelineStageFlags 
-              , vkCommandBufferCount :: Word32 
-              , vkPCommandBuffers :: Ptr VkCommandBuffer 
-              , vkSignalSemaphoreCount :: Word32 
-              , vkPSignalSemaphores :: Ptr VkSemaphore 
-              }
-  deriving (Eq)
-
-instance Storable VkSubmitInfo where
-  sizeOf ~_ = 72
-  alignment ~_ = 8
-  peek ptr = VkSubmitInfo <$> 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)
-                          <*> peek (ptr `plusPtr` 64)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 32) (vkPWaitDstStageMask (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 40) (vkCommandBufferCount (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 48) (vkPCommandBuffers (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 56) (vkSignalSemaphoreCount (poked :: VkSubmitInfo))
-                *> poke (ptr `plusPtr` 64) (vkPSignalSemaphores (poked :: VkSubmitInfo))
-
-
diff --git a/src/Graphics/Vulkan/QueueSemaphore.hs b/src/Graphics/Vulkan/QueueSemaphore.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/QueueSemaphore.hs
+++ /dev/null
@@ -1,70 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.QueueSemaphore where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize(..)
-                      )
-
--- ** VkSemaphoreCreateFlags
--- | Opaque flag
-newtype VkSemaphoreCreateFlags = VkSemaphoreCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** vkDestroySemaphore
-foreign import ccall "vkDestroySemaphore" vkDestroySemaphore ::
-  VkDevice -> VkSemaphore -> Ptr VkAllocationCallbacks -> IO ()
-
-newtype VkSemaphore = VkSemaphore Word64
-  deriving (Eq, Storable)
-
-
-data VkSemaphoreCreateInfo =
-  VkSemaphoreCreateInfo{ vkSType :: VkStructureType 
-                       , vkPNext :: Ptr Void 
-                       , vkFlags :: VkSemaphoreCreateFlags 
-                       }
-  deriving (Eq)
-
-instance Storable VkSemaphoreCreateInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkSemaphoreCreateInfo <$> peek (ptr `plusPtr` 0)
-                                   <*> peek (ptr `plusPtr` 8)
-                                   <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSemaphoreCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSemaphoreCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSemaphoreCreateInfo))
-
-
--- ** vkCreateSemaphore
-foreign import ccall "vkCreateSemaphore" vkCreateSemaphore ::
-  VkDevice ->
-  Ptr VkSemaphoreCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkSemaphore -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/Sampler.hs b/src/Graphics/Vulkan/Sampler.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Sampler.hs
+++ /dev/null
@@ -1,369 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Sampler where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkBool32(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CFloat
-                      , CFloat(..)
-                      , CSize(..)
-                      )
-
--- ** VkSamplerAddressMode
-
-newtype VkSamplerAddressMode = VkSamplerAddressMode Int32
-  deriving (Eq, Storable)
-
-instance Show VkSamplerAddressMode where
-  showsPrec _ VK_SAMPLER_ADDRESS_MODE_REPEAT = showString "VK_SAMPLER_ADDRESS_MODE_REPEAT"
-  showsPrec _ VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = showString "VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT"
-  showsPrec _ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = showString "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE"
-  showsPrec _ VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = showString "VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER"
-  showsPrec _ VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = showString "VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE"
-  showsPrec p (VkSamplerAddressMode x) = showParen (p >= 11) (showString "VkSamplerAddressMode " . showsPrec 11 x)
-
-instance Read VkSamplerAddressMode where
-  readPrec = parens ( choose [ ("VK_SAMPLER_ADDRESS_MODE_REPEAT", pure VK_SAMPLER_ADDRESS_MODE_REPEAT)
-                             , ("VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT", pure VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT)
-                             , ("VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE", pure VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE)
-                             , ("VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER", pure VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER)
-                             , ("VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE", pure VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSamplerAddressMode")
-                        v <- step readPrec
-                        pure (VkSamplerAddressMode v)
-                        )
-                    )
-
-
-pattern VK_SAMPLER_ADDRESS_MODE_REPEAT = VkSamplerAddressMode 0
-
-pattern VK_SAMPLER_ADDRESS_MODE_MIRRORED_REPEAT = VkSamplerAddressMode 1
-
-pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE = VkSamplerAddressMode 2
-
-pattern VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER = VkSamplerAddressMode 3
-
-pattern VK_SAMPLER_ADDRESS_MODE_MIRROR_CLAMP_TO_EDGE = VkSamplerAddressMode 4
-
--- ** VkFilter
-
-newtype VkFilter = VkFilter Int32
-  deriving (Eq, Storable)
-
-instance Show VkFilter where
-  showsPrec _ VK_FILTER_NEAREST = showString "VK_FILTER_NEAREST"
-  showsPrec _ VK_FILTER_LINEAR = showString "VK_FILTER_LINEAR"
-  showsPrec p (VkFilter x) = showParen (p >= 11) (showString "VkFilter " . showsPrec 11 x)
-
-instance Read VkFilter where
-  readPrec = parens ( choose [ ("VK_FILTER_NEAREST", pure VK_FILTER_NEAREST)
-                             , ("VK_FILTER_LINEAR", pure VK_FILTER_LINEAR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkFilter")
-                        v <- step readPrec
-                        pure (VkFilter v)
-                        )
-                    )
-
-
-pattern VK_FILTER_NEAREST = VkFilter 0
-
-pattern VK_FILTER_LINEAR = VkFilter 1
-
--- ** VkBorderColor
-
-newtype VkBorderColor = VkBorderColor Int32
-  deriving (Eq, Storable)
-
-instance Show VkBorderColor where
-  showsPrec _ VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = showString "VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK"
-  showsPrec _ VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = showString "VK_BORDER_COLOR_INT_TRANSPARENT_BLACK"
-  showsPrec _ VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = showString "VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK"
-  showsPrec _ VK_BORDER_COLOR_INT_OPAQUE_BLACK = showString "VK_BORDER_COLOR_INT_OPAQUE_BLACK"
-  showsPrec _ VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = showString "VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE"
-  showsPrec _ VK_BORDER_COLOR_INT_OPAQUE_WHITE = showString "VK_BORDER_COLOR_INT_OPAQUE_WHITE"
-  showsPrec p (VkBorderColor x) = showParen (p >= 11) (showString "VkBorderColor " . showsPrec 11 x)
-
-instance Read VkBorderColor where
-  readPrec = parens ( choose [ ("VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK", pure VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK)
-                             , ("VK_BORDER_COLOR_INT_TRANSPARENT_BLACK", pure VK_BORDER_COLOR_INT_TRANSPARENT_BLACK)
-                             , ("VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK", pure VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK)
-                             , ("VK_BORDER_COLOR_INT_OPAQUE_BLACK", pure VK_BORDER_COLOR_INT_OPAQUE_BLACK)
-                             , ("VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE", pure VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE)
-                             , ("VK_BORDER_COLOR_INT_OPAQUE_WHITE", pure VK_BORDER_COLOR_INT_OPAQUE_WHITE)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkBorderColor")
-                        v <- step readPrec
-                        pure (VkBorderColor v)
-                        )
-                    )
-
-
-pattern VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK = VkBorderColor 0
-
-pattern VK_BORDER_COLOR_INT_TRANSPARENT_BLACK = VkBorderColor 1
-
-pattern VK_BORDER_COLOR_FLOAT_OPAQUE_BLACK = VkBorderColor 2
-
-pattern VK_BORDER_COLOR_INT_OPAQUE_BLACK = VkBorderColor 3
-
-pattern VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE = VkBorderColor 4
-
-pattern VK_BORDER_COLOR_INT_OPAQUE_WHITE = VkBorderColor 5
-
--- ** VkCompareOp
-
-newtype VkCompareOp = VkCompareOp Int32
-  deriving (Eq, 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)
-                        )
-                    )
-
-
-pattern VK_COMPARE_OP_NEVER = VkCompareOp 0
-
-pattern VK_COMPARE_OP_LESS = VkCompareOp 1
-
-pattern VK_COMPARE_OP_EQUAL = VkCompareOp 2
-
-pattern VK_COMPARE_OP_LESS_OR_EQUAL = VkCompareOp 3
-
-pattern VK_COMPARE_OP_GREATER = VkCompareOp 4
-
-pattern VK_COMPARE_OP_NOT_EQUAL = VkCompareOp 5
-
-pattern VK_COMPARE_OP_GREATER_OR_EQUAL = VkCompareOp 6
-
-pattern VK_COMPARE_OP_ALWAYS = VkCompareOp 7
-
-newtype VkSampler = VkSampler Word64
-  deriving (Eq, Storable)
-
-
-data VkSamplerCreateInfo =
-  VkSamplerCreateInfo{ vkSType :: VkStructureType 
-                     , vkPNext :: Ptr Void 
-                     , vkFlags :: VkSamplerCreateFlags 
-                     , vkMagFilter :: VkFilter 
-                     , vkMinFilter :: VkFilter 
-                     , vkMipmapMode :: VkSamplerMipmapMode 
-                     , vkAddressModeU :: VkSamplerAddressMode 
-                     , vkAddressModeV :: VkSamplerAddressMode 
-                     , vkAddressModeW :: VkSamplerAddressMode 
-                     , vkMipLodBias :: CFloat 
-                     , vkAnisotropyEnable :: VkBool32 
-                     , vkMaxAnisotropy :: CFloat 
-                     , vkCompareEnable :: VkBool32 
-                     , vkCompareOp :: VkCompareOp 
-                     , vkMinLod :: CFloat 
-                     , vkMaxLod :: CFloat 
-                     , vkBorderColor :: VkBorderColor 
-                     , vkUnnormalizedCoordinates :: VkBool32 
-                     }
-  deriving (Eq)
-
-instance Storable VkSamplerCreateInfo where
-  sizeOf ~_ = 80
-  alignment ~_ = 8
-  peek ptr = VkSamplerCreateInfo <$> 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)
-                                 <*> peek (ptr `plusPtr` 60)
-                                 <*> peek (ptr `plusPtr` 64)
-                                 <*> peek (ptr `plusPtr` 68)
-                                 <*> peek (ptr `plusPtr` 72)
-                                 <*> peek (ptr `plusPtr` 76)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 20) (vkMagFilter (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkMinFilter (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 28) (vkMipmapMode (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkAddressModeU (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 36) (vkAddressModeV (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 40) (vkAddressModeW (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 44) (vkMipLodBias (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 48) (vkAnisotropyEnable (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 52) (vkMaxAnisotropy (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 56) (vkCompareEnable (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 60) (vkCompareOp (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 64) (vkMinLod (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 68) (vkMaxLod (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 72) (vkBorderColor (poked :: VkSamplerCreateInfo))
-                *> poke (ptr `plusPtr` 76) (vkUnnormalizedCoordinates (poked :: VkSamplerCreateInfo))
-
-
--- ** VkSamplerCreateFlags
--- | Opaque flag
-newtype VkSamplerCreateFlags = VkSamplerCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** VkSamplerMipmapMode
-
-newtype VkSamplerMipmapMode = VkSamplerMipmapMode Int32
-  deriving (Eq, Storable)
-
-instance Show VkSamplerMipmapMode where
-  showsPrec _ VK_SAMPLER_MIPMAP_MODE_NEAREST = showString "VK_SAMPLER_MIPMAP_MODE_NEAREST"
-  showsPrec _ VK_SAMPLER_MIPMAP_MODE_LINEAR = showString "VK_SAMPLER_MIPMAP_MODE_LINEAR"
-  showsPrec p (VkSamplerMipmapMode x) = showParen (p >= 11) (showString "VkSamplerMipmapMode " . showsPrec 11 x)
-
-instance Read VkSamplerMipmapMode where
-  readPrec = parens ( choose [ ("VK_SAMPLER_MIPMAP_MODE_NEAREST", pure VK_SAMPLER_MIPMAP_MODE_NEAREST)
-                             , ("VK_SAMPLER_MIPMAP_MODE_LINEAR", pure VK_SAMPLER_MIPMAP_MODE_LINEAR)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSamplerMipmapMode")
-                        v <- step readPrec
-                        pure (VkSamplerMipmapMode v)
-                        )
-                    )
-
--- | Choose nearest mip level
-pattern VK_SAMPLER_MIPMAP_MODE_NEAREST = VkSamplerMipmapMode 0
--- | Linear filter between mip levels
-pattern VK_SAMPLER_MIPMAP_MODE_LINEAR = VkSamplerMipmapMode 1
-
--- ** vkCreateSampler
-foreign import ccall "vkCreateSampler" vkCreateSampler ::
-  VkDevice ->
-  Ptr VkSamplerCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkSampler -> IO VkResult
-
--- ** VkSampleCountFlags
-
-newtype VkSampleCountFlagBits = VkSampleCountFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkSampleCountFlagBits
-type VkSampleCountFlags = VkSampleCountFlagBits
-
-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)
-                        )
-                    )
-
--- | Sample count 1 supported
-pattern VK_SAMPLE_COUNT_1_BIT = VkSampleCountFlagBits 0x1
--- | Sample count 2 supported
-pattern VK_SAMPLE_COUNT_2_BIT = VkSampleCountFlagBits 0x2
--- | Sample count 4 supported
-pattern VK_SAMPLE_COUNT_4_BIT = VkSampleCountFlagBits 0x4
--- | Sample count 8 supported
-pattern VK_SAMPLE_COUNT_8_BIT = VkSampleCountFlagBits 0x8
--- | Sample count 16 supported
-pattern VK_SAMPLE_COUNT_16_BIT = VkSampleCountFlagBits 0x10
--- | Sample count 32 supported
-pattern VK_SAMPLE_COUNT_32_BIT = VkSampleCountFlagBits 0x20
--- | Sample count 64 supported
-pattern VK_SAMPLE_COUNT_64_BIT = VkSampleCountFlagBits 0x40
-
-
--- ** vkDestroySampler
-foreign import ccall "vkDestroySampler" vkDestroySampler ::
-  VkDevice -> VkSampler -> Ptr VkAllocationCallbacks -> IO ()
-
diff --git a/src/Graphics/Vulkan/Shader.hs b/src/Graphics/Vulkan/Shader.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Shader.hs
+++ /dev/null
@@ -1,146 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.Shader where
-
-import Graphics.Vulkan.Device( VkDevice(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkInternalAllocationType(..)
-                             , PFN_vkAllocationFunction
-                             , PFN_vkReallocationFunction
-                             , PFN_vkInternalAllocationNotification
-                             , VkAllocationCallbacks(..)
-                             , VkSystemAllocationScope(..)
-                             , PFN_vkFreeFunction
-                             , PFN_vkInternalFreeNotification
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Core( VkResult(..)
-                           , VkFlags(..)
-                           , VkStructureType(..)
-                           )
-import Foreign.C.Types( CSize
-                      , CSize(..)
-                      )
-
-
-data VkShaderModuleCreateInfo =
-  VkShaderModuleCreateInfo{ vkSType :: VkStructureType 
-                          , vkPNext :: Ptr Void 
-                          , vkFlags :: VkShaderModuleCreateFlags 
-                          , vkCodeSize :: CSize 
-                          , vkPCode :: Ptr Word32 
-                          }
-  deriving (Eq)
-
-instance Storable VkShaderModuleCreateInfo where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkShaderModuleCreateInfo <$> peek (ptr `plusPtr` 0)
-                                      <*> peek (ptr `plusPtr` 8)
-                                      <*> peek (ptr `plusPtr` 16)
-                                      <*> peek (ptr `plusPtr` 24)
-                                      <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkShaderModuleCreateInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkShaderModuleCreateInfo))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkShaderModuleCreateInfo))
-                *> poke (ptr `plusPtr` 24) (vkCodeSize (poked :: VkShaderModuleCreateInfo))
-                *> poke (ptr `plusPtr` 32) (vkPCode (poked :: VkShaderModuleCreateInfo))
-
-
--- ** vkDestroyShaderModule
-foreign import ccall "vkDestroyShaderModule" vkDestroyShaderModule ::
-  VkDevice -> VkShaderModule -> Ptr VkAllocationCallbacks -> IO ()
-
--- ** VkShaderModuleCreateFlags
--- | Opaque flag
-newtype VkShaderModuleCreateFlags = VkShaderModuleCreateFlags VkFlags
-  deriving (Eq, Storable)
-
--- ** VkShaderStageFlags
-
-newtype VkShaderStageFlagBits = VkShaderStageFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkShaderStageFlagBits
-type VkShaderStageFlags = VkShaderStageFlagBits
-
-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)
-                        )
-                    )
-
-
-pattern VK_SHADER_STAGE_VERTEX_BIT = VkShaderStageFlagBits 0x1
-
-pattern VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT = VkShaderStageFlagBits 0x2
-
-pattern VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT = VkShaderStageFlagBits 0x4
-
-pattern VK_SHADER_STAGE_GEOMETRY_BIT = VkShaderStageFlagBits 0x8
-
-pattern VK_SHADER_STAGE_FRAGMENT_BIT = VkShaderStageFlagBits 0x10
-
-pattern VK_SHADER_STAGE_COMPUTE_BIT = VkShaderStageFlagBits 0x20
-
-pattern VK_SHADER_STAGE_ALL_GRAPHICS = VkShaderStageFlagBits 0x1f
-
-pattern VK_SHADER_STAGE_ALL = VkShaderStageFlagBits 0x7fffffff
-
-newtype VkShaderModule = VkShaderModule Word64
-  deriving (Eq, Storable)
-
--- ** vkCreateShaderModule
-foreign import ccall "vkCreateShaderModule" vkCreateShaderModule ::
-  VkDevice ->
-  Ptr VkShaderModuleCreateInfo ->
-    Ptr VkAllocationCallbacks -> Ptr VkShaderModule -> IO VkResult
-
diff --git a/src/Graphics/Vulkan/SparseResourceMemoryManagement.hs b/src/Graphics/Vulkan/SparseResourceMemoryManagement.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/SparseResourceMemoryManagement.hs
+++ /dev/null
@@ -1,348 +0,0 @@
-{-# LANGUAGE DuplicateRecordFields #-}
-{-# LANGUAGE Strict #-}
-{-# LANGUAGE PatternSynonyms #-}
-{-# LANGUAGE GeneralizedNewtypeDeriving #-}
-module Graphics.Vulkan.SparseResourceMemoryManagement where
-
-import Graphics.Vulkan.Device( VkPhysicalDevice(..)
-                             , VkDevice(..)
-                             )
-import Graphics.Vulkan.Buffer( VkBuffer(..)
-                             )
-import Text.Read.Lex( Lexeme(Ident)
-                    )
-import GHC.Read( expectP
-               , choose
-               )
-import Data.Word( Word64
-                , Word32
-                )
-import Foreign.Ptr( Ptr
-                  , plusPtr
-                  )
-import Graphics.Vulkan.Queue( VkQueue(..)
-                            )
-import Data.Int( Int32
-               )
-import Data.Bits( Bits
-                , FiniteBits
-                )
-import Foreign.Storable( Storable(..)
-                       )
-import Graphics.Vulkan.Fence( VkFence(..)
-                            )
-import Data.Void( Void
-                )
-import Graphics.Vulkan.Memory( VkDeviceMemory(..)
-                             )
-import Text.Read( Read(..)
-                , parens
-                )
-import Text.ParserCombinators.ReadPrec( prec
-                                      , (+++)
-                                      , step
-                                      )
-import Graphics.Vulkan.Sampler( VkSampleCountFlagBits(..)
-                              )
-import Graphics.Vulkan.Image( VkImageUsageFlags(..)
-                            , VkImage(..)
-                            , VkImageSubresource(..)
-                            , VkImageType(..)
-                            , VkImageAspectFlagBits(..)
-                            , VkImageUsageFlagBits(..)
-                            , VkImageTiling(..)
-                            , VkImageAspectFlags(..)
-                            )
-import Graphics.Vulkan.QueueSemaphore( VkSemaphore(..)
-                                     )
-import Graphics.Vulkan.Core( VkExtent3D(..)
-                           , VkResult(..)
-                           , VkDeviceSize(..)
-                           , VkFlags(..)
-                           , VkFormat(..)
-                           , VkOffset3D(..)
-                           , VkStructureType(..)
-                           )
-
-
-data VkSparseImageMemoryRequirements =
-  VkSparseImageMemoryRequirements{ vkFormatProperties :: VkSparseImageFormatProperties 
-                                 , vkImageMipTailFirstLod :: Word32 
-                                 , vkImageMipTailSize :: VkDeviceSize 
-                                 , vkImageMipTailOffset :: VkDeviceSize 
-                                 , vkImageMipTailStride :: VkDeviceSize 
-                                 }
-  deriving (Eq)
-
-instance Storable VkSparseImageMemoryRequirements where
-  sizeOf ~_ = 48
-  alignment ~_ = 8
-  peek ptr = VkSparseImageMemoryRequirements <$> peek (ptr `plusPtr` 0)
-                                             <*> peek (ptr `plusPtr` 20)
-                                             <*> peek (ptr `plusPtr` 24)
-                                             <*> peek (ptr `plusPtr` 32)
-                                             <*> peek (ptr `plusPtr` 40)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkFormatProperties (poked :: VkSparseImageMemoryRequirements))
-                *> poke (ptr `plusPtr` 20) (vkImageMipTailFirstLod (poked :: VkSparseImageMemoryRequirements))
-                *> poke (ptr `plusPtr` 24) (vkImageMipTailSize (poked :: VkSparseImageMemoryRequirements))
-                *> poke (ptr `plusPtr` 32) (vkImageMipTailOffset (poked :: VkSparseImageMemoryRequirements))
-                *> poke (ptr `plusPtr` 40) (vkImageMipTailStride (poked :: VkSparseImageMemoryRequirements))
-
-
-
-data VkSparseMemoryBind =
-  VkSparseMemoryBind{ vkResourceOffset :: VkDeviceSize 
-                    , vkSize :: VkDeviceSize 
-                    , vkMemory :: VkDeviceMemory 
-                    , vkMemoryOffset :: VkDeviceSize 
-                    , vkFlags :: VkSparseMemoryBindFlags 
-                    }
-  deriving (Eq)
-
-instance Storable VkSparseMemoryBind where
-  sizeOf ~_ = 40
-  alignment ~_ = 8
-  peek ptr = VkSparseMemoryBind <$> peek (ptr `plusPtr` 0)
-                                <*> peek (ptr `plusPtr` 8)
-                                <*> peek (ptr `plusPtr` 16)
-                                <*> peek (ptr `plusPtr` 24)
-                                <*> peek (ptr `plusPtr` 32)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkResourceOffset (poked :: VkSparseMemoryBind))
-                *> poke (ptr `plusPtr` 8) (vkSize (poked :: VkSparseMemoryBind))
-                *> poke (ptr `plusPtr` 16) (vkMemory (poked :: VkSparseMemoryBind))
-                *> poke (ptr `plusPtr` 24) (vkMemoryOffset (poked :: VkSparseMemoryBind))
-                *> poke (ptr `plusPtr` 32) (vkFlags (poked :: VkSparseMemoryBind))
-
-
-
-data VkSparseImageMemoryBind =
-  VkSparseImageMemoryBind{ vkSubresource :: VkImageSubresource 
-                         , vkOffset :: VkOffset3D 
-                         , vkExtent :: VkExtent3D 
-                         , vkMemory :: VkDeviceMemory 
-                         , vkMemoryOffset :: VkDeviceSize 
-                         , vkFlags :: VkSparseMemoryBindFlags 
-                         }
-  deriving (Eq)
-
-instance Storable VkSparseImageMemoryBind where
-  sizeOf ~_ = 64
-  alignment ~_ = 8
-  peek ptr = VkSparseImageMemoryBind <$> peek (ptr `plusPtr` 0)
-                                     <*> peek (ptr `plusPtr` 12)
-                                     <*> peek (ptr `plusPtr` 24)
-                                     <*> peek (ptr `plusPtr` 40)
-                                     <*> peek (ptr `plusPtr` 48)
-                                     <*> peek (ptr `plusPtr` 56)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSubresource (poked :: VkSparseImageMemoryBind))
-                *> poke (ptr `plusPtr` 12) (vkOffset (poked :: VkSparseImageMemoryBind))
-                *> poke (ptr `plusPtr` 24) (vkExtent (poked :: VkSparseImageMemoryBind))
-                *> poke (ptr `plusPtr` 40) (vkMemory (poked :: VkSparseImageMemoryBind))
-                *> poke (ptr `plusPtr` 48) (vkMemoryOffset (poked :: VkSparseImageMemoryBind))
-                *> poke (ptr `plusPtr` 56) (vkFlags (poked :: VkSparseImageMemoryBind))
-
-
-
-data VkSparseImageMemoryBindInfo =
-  VkSparseImageMemoryBindInfo{ vkImage :: VkImage 
-                             , vkBindCount :: Word32 
-                             , vkPBinds :: Ptr VkSparseImageMemoryBind 
-                             }
-  deriving (Eq)
-
-instance Storable VkSparseImageMemoryBindInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkSparseImageMemoryBindInfo <$> peek (ptr `plusPtr` 0)
-                                         <*> peek (ptr `plusPtr` 8)
-                                         <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageMemoryBindInfo))
-                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageMemoryBindInfo))
-                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageMemoryBindInfo))
-
-
--- ** vkGetImageSparseMemoryRequirements
-foreign import ccall "vkGetImageSparseMemoryRequirements" vkGetImageSparseMemoryRequirements ::
-  VkDevice ->
-  VkImage ->
-    Ptr Word32 -> Ptr VkSparseImageMemoryRequirements -> IO ()
-
--- ** vkQueueBindSparse
-foreign import ccall "vkQueueBindSparse" vkQueueBindSparse ::
-  VkQueue -> Word32 -> Ptr VkBindSparseInfo -> VkFence -> IO VkResult
-
-
-data VkBindSparseInfo =
-  VkBindSparseInfo{ vkSType :: VkStructureType 
-                  , vkPNext :: Ptr Void 
-                  , vkWaitSemaphoreCount :: Word32 
-                  , vkPWaitSemaphores :: Ptr VkSemaphore 
-                  , vkBufferBindCount :: Word32 
-                  , vkPBufferBinds :: Ptr VkSparseBufferMemoryBindInfo 
-                  , vkImageOpaqueBindCount :: Word32 
-                  , vkPImageOpaqueBinds :: Ptr VkSparseImageOpaqueMemoryBindInfo 
-                  , vkImageBindCount :: Word32 
-                  , vkPImageBinds :: Ptr VkSparseImageMemoryBindInfo 
-                  , vkSignalSemaphoreCount :: Word32 
-                  , vkPSignalSemaphores :: Ptr VkSemaphore 
-                  }
-  deriving (Eq)
-
-instance Storable VkBindSparseInfo where
-  sizeOf ~_ = 96
-  alignment ~_ = 8
-  peek ptr = VkBindSparseInfo <$> 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)
-                              <*> peek (ptr `plusPtr` 64)
-                              <*> peek (ptr `plusPtr` 72)
-                              <*> peek (ptr `plusPtr` 80)
-                              <*> peek (ptr `plusPtr` 88)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkSType (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 8) (vkPNext (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 16) (vkWaitSemaphoreCount (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 24) (vkPWaitSemaphores (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 32) (vkBufferBindCount (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 40) (vkPBufferBinds (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 48) (vkImageOpaqueBindCount (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 56) (vkPImageOpaqueBinds (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 64) (vkImageBindCount (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 72) (vkPImageBinds (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 80) (vkSignalSemaphoreCount (poked :: VkBindSparseInfo))
-                *> poke (ptr `plusPtr` 88) (vkPSignalSemaphores (poked :: VkBindSparseInfo))
-
-
-
-data VkSparseBufferMemoryBindInfo =
-  VkSparseBufferMemoryBindInfo{ vkBuffer :: VkBuffer 
-                              , vkBindCount :: Word32 
-                              , vkPBinds :: Ptr VkSparseMemoryBind 
-                              }
-  deriving (Eq)
-
-instance Storable VkSparseBufferMemoryBindInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkSparseBufferMemoryBindInfo <$> peek (ptr `plusPtr` 0)
-                                          <*> peek (ptr `plusPtr` 8)
-                                          <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkBuffer (poked :: VkSparseBufferMemoryBindInfo))
-                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseBufferMemoryBindInfo))
-                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseBufferMemoryBindInfo))
-
-
--- ** VkSparseImageFormatFlags
-
-newtype VkSparseImageFormatFlagBits = VkSparseImageFormatFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkSparseImageFormatFlagBits
-type VkSparseImageFormatFlags = VkSparseImageFormatFlagBits
-
-instance Show VkSparseImageFormatFlagBits where
-  showsPrec _ VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = showString "VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"
-  showsPrec _ VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = showString "VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"
-  showsPrec _ VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = showString "VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"
-  
-  showsPrec p (VkSparseImageFormatFlagBits x) = showParen (p >= 11) (showString "VkSparseImageFormatFlagBits " . showsPrec 11 x)
-
-instance Read VkSparseImageFormatFlagBits where
-  readPrec = parens ( choose [ ("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT", pure VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
-                             , ("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT", pure VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
-                             , ("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT", pure VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSparseImageFormatFlagBits")
-                        v <- step readPrec
-                        pure (VkSparseImageFormatFlagBits v)
-                        )
-                    )
-
--- | Image uses a single miptail region for all array layers
-pattern VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT = VkSparseImageFormatFlagBits 0x1
--- | Image requires mip levels to be an exact multiple of the sparse image block size for non-miptail levels.
-pattern VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT = VkSparseImageFormatFlagBits 0x2
--- | Image uses a non-standard sparse block size
-pattern VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT = VkSparseImageFormatFlagBits 0x4
-
-
--- ** vkGetPhysicalDeviceSparseImageFormatProperties
-foreign import ccall "vkGetPhysicalDeviceSparseImageFormatProperties" vkGetPhysicalDeviceSparseImageFormatProperties ::
-  VkPhysicalDevice ->
-  VkFormat ->
-    VkImageType ->
-      VkSampleCountFlagBits ->
-        VkImageUsageFlags ->
-          VkImageTiling ->
-            Ptr Word32 -> Ptr VkSparseImageFormatProperties -> IO ()
-
--- ** VkSparseMemoryBindFlags
-
-newtype VkSparseMemoryBindFlagBits = VkSparseMemoryBindFlagBits VkFlags
-  deriving (Eq, Storable, Bits, FiniteBits)
-
--- | Alias for VkSparseMemoryBindFlagBits
-type VkSparseMemoryBindFlags = VkSparseMemoryBindFlagBits
-
-instance Show VkSparseMemoryBindFlagBits where
-  showsPrec _ VK_SPARSE_MEMORY_BIND_METADATA_BIT = showString "VK_SPARSE_MEMORY_BIND_METADATA_BIT"
-  
-  showsPrec p (VkSparseMemoryBindFlagBits x) = showParen (p >= 11) (showString "VkSparseMemoryBindFlagBits " . showsPrec 11 x)
-
-instance Read VkSparseMemoryBindFlagBits where
-  readPrec = parens ( choose [ ("VK_SPARSE_MEMORY_BIND_METADATA_BIT", pure VK_SPARSE_MEMORY_BIND_METADATA_BIT)
-                             ] +++
-                      prec 10 (do
-                        expectP (Ident "VkSparseMemoryBindFlagBits")
-                        v <- step readPrec
-                        pure (VkSparseMemoryBindFlagBits v)
-                        )
-                    )
-
--- | Operation binds resource metadata to memory
-pattern VK_SPARSE_MEMORY_BIND_METADATA_BIT = VkSparseMemoryBindFlagBits 0x1
-
-
-
-data VkSparseImageOpaqueMemoryBindInfo =
-  VkSparseImageOpaqueMemoryBindInfo{ vkImage :: VkImage 
-                                   , vkBindCount :: Word32 
-                                   , vkPBinds :: Ptr VkSparseMemoryBind 
-                                   }
-  deriving (Eq)
-
-instance Storable VkSparseImageOpaqueMemoryBindInfo where
-  sizeOf ~_ = 24
-  alignment ~_ = 8
-  peek ptr = VkSparseImageOpaqueMemoryBindInfo <$> peek (ptr `plusPtr` 0)
-                                               <*> peek (ptr `plusPtr` 8)
-                                               <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkImage (poked :: VkSparseImageOpaqueMemoryBindInfo))
-                *> poke (ptr `plusPtr` 8) (vkBindCount (poked :: VkSparseImageOpaqueMemoryBindInfo))
-                *> poke (ptr `plusPtr` 16) (vkPBinds (poked :: VkSparseImageOpaqueMemoryBindInfo))
-
-
-
-data VkSparseImageFormatProperties =
-  VkSparseImageFormatProperties{ vkAspectMask :: VkImageAspectFlags 
-                               , vkImageGranularity :: VkExtent3D 
-                               , vkFlags :: VkSparseImageFormatFlags 
-                               }
-  deriving (Eq)
-
-instance Storable VkSparseImageFormatProperties where
-  sizeOf ~_ = 20
-  alignment ~_ = 4
-  peek ptr = VkSparseImageFormatProperties <$> peek (ptr `plusPtr` 0)
-                                           <*> peek (ptr `plusPtr` 4)
-                                           <*> peek (ptr `plusPtr` 16)
-  poke ptr poked = poke (ptr `plusPtr` 0) (vkAspectMask (poked :: VkSparseImageFormatProperties))
-                *> poke (ptr `plusPtr` 4) (vkImageGranularity (poked :: VkSparseImageFormatProperties))
-                *> poke (ptr `plusPtr` 16) (vkFlags (poked :: VkSparseImageFormatProperties))
-
-
diff --git a/src/Graphics/Vulkan/Version.hs b/src/Graphics/Vulkan/Version.hs
deleted file mode 100644
--- a/src/Graphics/Vulkan/Version.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-
-module Graphics.Vulkan.Version where
-
-import Data.Word( Word32
-                )
-import Data.Bits( shiftR
-                , shiftL
-                , (.|.)
-                , (.&.)
-                )
-
-vkApiVersion :: Word32
-vkApiVersion  = vkMakeVersion 1 0 3
-
-vkVersionMinor :: Word32 -> Word32
-vkVersionMinor version = (.&.) (shiftR version 12) 1023
-
-vkVersionPatch :: Word32 -> Word32
-vkVersionPatch version = (.&.) version 4095
-
-vkMakeVersion :: Word32 -> Word32 -> Word32 -> Word32
-vkMakeVersion major minor patch = (.|.) ((.|.) (shiftL major 22) (shiftL minor 12)) patch
-
-vkVersionMajor :: Word32 -> Word32
-vkVersionMajor version = shiftR version 22
-
diff --git a/vulkan.cabal b/vulkan.cabal
--- a/vulkan.cabal
+++ b/vulkan.cabal
@@ -1,5 +1,5 @@
 name:                vulkan
-version:             1.7.0.0
+version:             2.0.0.0
 synopsis:            Bindings to the Vulkan graphics API.
 description:         Please see readme.md
 homepage:            http://github.com/expipiplus1/vulkan#readme
@@ -7,55 +7,270 @@
 license-file:        LICENSE
 author:              Joe Hermaszewski
 maintainer:          live.long.and.prosper@monoid.al
-copyright:           2016 Joe Hermaszewski
+copyright:           2018 Joe Hermaszewski
 category:            Graphics
 build-type:          Simple
 extra-source-files:  readme.md,
                      changelog.md
 cabal-version:       >=1.10
 
+flag xlib
+    description:
+      Enable xlib specific extensions
+    default: False
+flag xlib_xrandr
+    description:
+      Enable xlib_xrandr specific extensions
+    default: False
+flag xcb
+    description:
+      Enable xcb specific extensions
+    default: False
+flag wayland
+    description:
+      Enable wayland specific extensions
+    default: False
+flag mir
+    description:
+      Enable mir specific extensions
+    default: False
+flag android
+    description:
+      Enable android specific extensions
+    default: False
+flag win32
+    description:
+      Enable win32 specific extensions
+    default: False
+flag vi
+    description:
+      Enable vi specific extensions
+    default: False
+flag ios
+    description:
+      Enable ios specific extensions
+    default: False
+flag macos
+    description:
+      Enable macos specific extensions
+    default: False
+
 library
   hs-source-dirs:      src
-  exposed-modules:     Graphics.Vulkan
-                     , Graphics.Vulkan.Buffer
-                     , Graphics.Vulkan.BufferView
-                     , Graphics.Vulkan.CommandBuffer
-                     , Graphics.Vulkan.CommandBufferBuilding
-                     , Graphics.Vulkan.CommandPool
-                     , Graphics.Vulkan.Constants
-                     , Graphics.Vulkan.Core
-                     , Graphics.Vulkan.DescriptorSet
-                     , Graphics.Vulkan.Device
-                     , Graphics.Vulkan.DeviceInitialization
-                     , Graphics.Vulkan.EXT.DebugReport
-                     , Graphics.Vulkan.Event
-                     , Graphics.Vulkan.ExtensionDiscovery
-                     , Graphics.Vulkan.Fence
-                     , Graphics.Vulkan.Image
-                     , Graphics.Vulkan.ImageView
-                     , Graphics.Vulkan.KHR.Display
-                     , Graphics.Vulkan.KHR.DisplaySwapchain
-                     , Graphics.Vulkan.KHR.Surface
-                     , Graphics.Vulkan.KHR.Swapchain
-                     , Graphics.Vulkan.LayerDiscovery
-                     , Graphics.Vulkan.Memory
-                     , Graphics.Vulkan.MemoryManagement
-                     , Graphics.Vulkan.OtherTypes
-                     , Graphics.Vulkan.Pass
-                     , Graphics.Vulkan.Pipeline
-                     , Graphics.Vulkan.PipelineCache
-                     , Graphics.Vulkan.PipelineLayout
-                     , Graphics.Vulkan.Query
-                     , Graphics.Vulkan.Queue
-                     , Graphics.Vulkan.QueueSemaphore
-                     , Graphics.Vulkan.Sampler
-                     , Graphics.Vulkan.Shader
-                     , Graphics.Vulkan.SparseResourceMemoryManagement
-                     , Graphics.Vulkan.Version
+  ghc-options:         -Wall
+  exposed-modules:     Graphics.Vulkan.NamedType
+                     , Graphics.Vulkan.Core10.Core
+                     , Graphics.Vulkan.Core10.Version
+                     , Graphics.Vulkan.Core10.Constants
+                     , Graphics.Vulkan.Core10.DeviceInitialization
+                     , Graphics.Vulkan.Core10.Device
+                     , Graphics.Vulkan.Core10.ExtensionDiscovery
+                     , Graphics.Vulkan.Core10.LayerDiscovery
+                     , Graphics.Vulkan.Core10.Queue
+                     , Graphics.Vulkan.Core10.Memory
+                     , Graphics.Vulkan.Core10.MemoryManagement
+                     , Graphics.Vulkan.Core10.SparseResourceMemoryManagement
+                     , Graphics.Vulkan.Core10.Fence
+                     , Graphics.Vulkan.Core10.QueueSemaphore
+                     , Graphics.Vulkan.Core10.Event
+                     , Graphics.Vulkan.Core10.Query
+                     , Graphics.Vulkan.Core10.Buffer
+                     , Graphics.Vulkan.Core10.BufferView
+                     , Graphics.Vulkan.Core10.Image
+                     , Graphics.Vulkan.Core10.ImageView
+                     , Graphics.Vulkan.Core10.Shader
+                     , Graphics.Vulkan.Core10.PipelineCache
+                     , Graphics.Vulkan.Core10.Pipeline
+                     , Graphics.Vulkan.Core10.PipelineLayout
+                     , Graphics.Vulkan.Core10.Sampler
+                     , Graphics.Vulkan.Core10.DescriptorSet
+                     , Graphics.Vulkan.Core10.Pass
+                     , Graphics.Vulkan.Core10.CommandPool
+                     , Graphics.Vulkan.Core10.CommandBuffer
+                     , Graphics.Vulkan.Core10.CommandBufferBuilding
+                     , Graphics.Vulkan.Core11.DeviceInitialization
+                     , Graphics.Vulkan.Core11.Promoted_From_VK_KHR_subgroup
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_bind_memory2
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_16bit_storage
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_dedicated_allocation
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_and_VK_KHR_bind_memory2
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_device_group_creation
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_memory_requirements2
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_get_physical_device_properties2
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance1
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance2
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_multiview
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_variable_pointers
+                     , Graphics.Vulkan.Core11.Promoted_From_VK_KHR_protected_memory
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_sampler_ycbcr_conversion
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_descriptor_update_template
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory_capabilities
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_memory
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence_capabilities
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_fence
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_external_semaphore_capabilities
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_maintenance3
+                     , Graphics.Vulkan.Core11.Promoted_from_VK_KHR_shader_draw_parameters
+                     , Graphics.Vulkan.Extensions.VK_KHR_surface
+                     , Graphics.Vulkan.Extensions.VK_KHR_swapchain
+                     , Graphics.Vulkan.Extensions.VK_KHR_display
+                     , Graphics.Vulkan.Extensions.VK_KHR_display_swapchain
+                     , Graphics.Vulkan.Extensions.VK_EXT_debug_report
+                     , Graphics.Vulkan.Extensions.VK_NV_glsl_shader
+                     , Graphics.Vulkan.Extensions.VK_EXT_depth_range_unrestricted
+                     , Graphics.Vulkan.Extensions.VK_KHR_sampler_mirror_clamp_to_edge
+                     , Graphics.Vulkan.Extensions.VK_IMG_filter_cubic
+                     , Graphics.Vulkan.Extensions.VK_AMD_rasterization_order
+                     , Graphics.Vulkan.Extensions.VK_AMD_shader_trinary_minmax
+                     , Graphics.Vulkan.Extensions.VK_AMD_shader_explicit_vertex_parameter
+                     , Graphics.Vulkan.Extensions.VK_EXT_debug_marker
+                     , Graphics.Vulkan.Extensions.VK_AMD_gcn_shader
+                     , Graphics.Vulkan.Extensions.VK_NV_dedicated_allocation
+                     , Graphics.Vulkan.Extensions.VK_AMD_draw_indirect_count
+                     , Graphics.Vulkan.Extensions.VK_AMD_negative_viewport_height
+                     , Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_half_float
+                     , Graphics.Vulkan.Extensions.VK_AMD_shader_ballot
+                     , Graphics.Vulkan.Extensions.VK_AMD_texture_gather_bias_lod
+                     , Graphics.Vulkan.Extensions.VK_AMD_shader_info
+                     , Graphics.Vulkan.Extensions.VK_AMD_shader_image_load_store_lod
+                     , Graphics.Vulkan.Extensions.VK_KHR_multiview
+                     , Graphics.Vulkan.Extensions.VK_IMG_format_pvrtc
+                     , Graphics.Vulkan.Extensions.VK_NV_external_memory_capabilities
+                     , Graphics.Vulkan.Extensions.VK_NV_external_memory
+                     , Graphics.Vulkan.Extensions.VK_KHR_get_physical_device_properties2
+                     , Graphics.Vulkan.Extensions.VK_KHR_device_group
+                     , Graphics.Vulkan.Extensions.VK_EXT_validation_flags
+                     , Graphics.Vulkan.Extensions.VK_KHR_shader_draw_parameters
+                     , Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_ballot
+                     , Graphics.Vulkan.Extensions.VK_EXT_shader_subgroup_vote
+                     , Graphics.Vulkan.Extensions.VK_KHR_maintenance1
+                     , Graphics.Vulkan.Extensions.VK_KHR_device_group_creation
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_memory_capabilities
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_memory
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_memory_fd
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_capabilities
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_semaphore
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_semaphore_fd
+                     , Graphics.Vulkan.Extensions.VK_KHR_push_descriptor
+                     , Graphics.Vulkan.Extensions.VK_KHR_16bit_storage
+                     , Graphics.Vulkan.Extensions.VK_KHR_incremental_present
+                     , Graphics.Vulkan.Extensions.VK_KHR_descriptor_update_template
+                     , Graphics.Vulkan.Extensions.VK_NVX_device_generated_commands
+                     , Graphics.Vulkan.Extensions.VK_NV_clip_space_w_scaling
+                     , Graphics.Vulkan.Extensions.VK_EXT_direct_mode_display
+                     , Graphics.Vulkan.Extensions.VK_EXT_display_surface_counter
+                     , Graphics.Vulkan.Extensions.VK_EXT_display_control
+                     , Graphics.Vulkan.Extensions.VK_GOOGLE_display_timing
+                     , Graphics.Vulkan.Extensions.VK_NV_sample_mask_override_coverage
+                     , Graphics.Vulkan.Extensions.VK_NV_geometry_shader_passthrough
+                     , Graphics.Vulkan.Extensions.VK_NV_viewport_array2
+                     , Graphics.Vulkan.Extensions.VK_NVX_multiview_per_view_attributes
+                     , Graphics.Vulkan.Extensions.VK_NV_viewport_swizzle
+                     , Graphics.Vulkan.Extensions.VK_EXT_discard_rectangles
+                     , Graphics.Vulkan.Extensions.VK_EXT_conservative_rasterization
+                     , Graphics.Vulkan.Extensions.VK_EXT_swapchain_colorspace
+                     , Graphics.Vulkan.Extensions.VK_EXT_hdr_metadata
+                     , Graphics.Vulkan.Extensions.VK_KHR_shared_presentable_image
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_fence_capabilities
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_fence
+                     , Graphics.Vulkan.Extensions.VK_KHR_external_fence_fd
+                     , Graphics.Vulkan.Extensions.VK_KHR_maintenance2
+                     , Graphics.Vulkan.Extensions.VK_KHR_get_surface_capabilities2
+                     , Graphics.Vulkan.Extensions.VK_KHR_variable_pointers
+                     , Graphics.Vulkan.Extensions.VK_EXT_external_memory_dma_buf
+                     , Graphics.Vulkan.Extensions.VK_EXT_queue_family_foreign
+                     , Graphics.Vulkan.Extensions.VK_KHR_dedicated_allocation
+                     , Graphics.Vulkan.Extensions.VK_EXT_debug_utils
+                     , Graphics.Vulkan.Extensions.VK_EXT_sampler_filter_minmax
+                     , Graphics.Vulkan.Extensions.VK_KHR_storage_buffer_storage_class
+                     , Graphics.Vulkan.Extensions.VK_AMD_gpu_shader_int16
+                     , Graphics.Vulkan.Extensions.VK_AMD_mixed_attachment_samples
+                     , Graphics.Vulkan.Extensions.VK_AMD_shader_fragment_mask
+                     , Graphics.Vulkan.Extensions.VK_EXT_shader_stencil_export
+                     , Graphics.Vulkan.Extensions.VK_EXT_sample_locations
+                     , Graphics.Vulkan.Extensions.VK_KHR_relaxed_block_layout
+                     , Graphics.Vulkan.Extensions.VK_KHR_get_memory_requirements2
+                     , Graphics.Vulkan.Extensions.VK_KHR_image_format_list
+                     , Graphics.Vulkan.Extensions.VK_EXT_blend_operation_advanced
+                     , Graphics.Vulkan.Extensions.VK_NV_fragment_coverage_to_color
+                     , Graphics.Vulkan.Extensions.VK_NV_framebuffer_mixed_samples
+                     , Graphics.Vulkan.Extensions.VK_NV_fill_rectangle
+                     , Graphics.Vulkan.Extensions.VK_EXT_post_depth_coverage
+                     , Graphics.Vulkan.Extensions.VK_KHR_sampler_ycbcr_conversion
+                     , Graphics.Vulkan.Extensions.VK_KHR_bind_memory2
+                     , Graphics.Vulkan.Extensions.VK_EXT_validation_cache
+                     , Graphics.Vulkan.Extensions.VK_EXT_descriptor_indexing
+                     , Graphics.Vulkan.Extensions.VK_EXT_shader_viewport_index_layer
+                     , Graphics.Vulkan.Extensions.VK_KHR_maintenance3
+                     , Graphics.Vulkan.Extensions.VK_EXT_global_priority
+                     , Graphics.Vulkan.Extensions.VK_EXT_external_memory_host
+                     , Graphics.Vulkan.Extensions.VK_AMD_buffer_marker
+                     , Graphics.Vulkan.Extensions.VK_AMD_shader_core_properties
+                     , Graphics.Vulkan.Extensions.VK_EXT_vertex_attribute_divisor
+                     , Graphics.Vulkan.Extensions.VK_NV_shader_subgroup_partitioned
+                     , Graphics.Vulkan
+                     , Graphics.Vulkan.Core10
+                     , Graphics.Vulkan.Core11
+                     , Graphics.Vulkan.Extensions
+
+  if flag(android)
+    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
+                   , Graphics.Vulkan.Extensions.VK_NV_external_memory_win32
+                   , Graphics.Vulkan.Extensions.VK_NV_win32_keyed_mutex
+                   , Graphics.Vulkan.Extensions.VK_KHR_external_memory_win32
+                   , 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 && < 0.4
-  extra-libraries:     vulkan
+                     , vector-sized >= 0.1 && < 1.1
   default-language:    Haskell2010
+
+  if os(windows)
+    extra-libraries:   vulkan-1
+  else
+    extra-libraries:   vulkan
 
 source-repository head
   type:     git
